web-dev-qa-db-ja.com

IPv6を使用しているときに自分のMACアドレスが公開されないようにする方法

私のMacでは、各IPv6アドレス 特定のコンピュータのMACアドレス(not私のルーター)が含まれています。 ipv6-test.com のようなサイトはそれを表示するだけでなく、それがAppleコンピュータに属していることさえ私に言ってください。

これはスーパークッキーのように感じられ、他のオペレーティングシステムにも当てはまるかもしれません。自分のMACアドレスが公開されないようにするにはどうすればよいですか。

背景:MACアドレスは ではありません2001:0db8:1:2:60:8ff:fe52:f9d8のように:

  • 最後の64ビット(ホスト識別子)を取り、先行ゼロを追加します:0060:08ff:fe52:f9d8
  • 中央からff:fe部分を削除します。これらのバイトが存在しない場合、 MACアドレスがありません。
  • 最初のバイトの場合:2番目の下位ビット(ユニバーサル/ローカルビット。ビットが1の場合は0に、それが0の場合は1にする)を補完します。つまり、0x00(00000000)は0x02(00000010)になります。
  • Presto:60:8ff:fe52:f9d8はMACアドレス02:60:08:52:f9:d8に変換されます。

注:Ars Technicaによると、macOS 10.12 Sierra以降、 AppleはMACアドレス に基づいていない安定したアドレスを生成する新しい方法を採用しました。 。


この質問は、今週のスーパーユーザー質問でした。
詳しくはブログ記事を読むか、contribを読んでください。ブログへ自分で

139
Arjan

これはIPv6への2つの拡張によって解決されます。

  • RFC 4941 別名「プライバシーアドレッシング」を使用すると、発信接続で一時的にランダムに生成されたアドレス(数時間ごとにローテーションされる)を使用できます。
  • RFC 7217 では、プライマリの静的アドレスを、情報を一切公開しない不透明なハッシュから生成することができます。

一般的なオペレーティングシステムでは、少なくとも1つの方法で両方の方法がサポートされています。

これらの機能は直交していることに注意してください。必要に応じて、両方を同時に使用することができます。

安定したプライベートアドレス

一部のオペレーティングシステムでは、MAC(EUI-48)アドレスはインタフェース識別子にはもはや使用されなくなりました。代わりに、ランダムまたはハッシュベースの識別子が、一般的にはRFC 7217に従って使用されます。

  • Windowsは、Windows Vista以降、デフォルトでカスタムスキームを使用します。

    機能がアクティブかどうかを確認するには、PowerShellコマンドを実行します。

    Get-NetIPv6Protocol | fl RandomizeIdentifiers
    

    機能を有効/無効にするには:

    Set-NetIPv6Protocol -RandomizeIdentifiers Enabled
    Set-NetIPv6Protocol -RandomizeIdentifiers Disabled
    
  • Linux(NetworkManager)は、シードの一部として接続プロファイルのUUIDを使用して、NetworkManager v1.2.0以降でRFC 7217をサポートします。この機能は最近のNMバージョンではデフォルトで有効になっています。

    この機能を有効または無効にするには

    nmcli con modify "<profilename>" ipv6.addr-gen-mode stable-privacy
    nmcli con modify "<profilename>" ipv6.addr-gen-mode eui64
    
  • Linux(カーネルSLAAC)は、カーネルv4.1.0以降でRFC 7217をサポートしています。しかしながら、それはsysctlを通して秘密の種を保存することによって手動で起動されなければなりません。

    秘密鍵は128ビットの16進数ストリング(IPv6アドレスのような形)で、net.ipv6.conf.default.stable_secret sysctlに保管する必要があります。それを永続的にするために、それは/etc/sysctl.d/50-rfc7217.confまたは同様のものに入れることができます:

    net.ipv6.conf.default.stable_secret = 84a0:d5aa:52b0:4d35:k567:3aa6:7af5:474c
    

    シークレットを設定すると、すべてのネットワークインタフェースに対してこのモードが自動的に有効になります。機能がアクティブかどうかを確認するには、ip -d linkで "addrgenmode stable_secret"、またはsysctl net.ipv6.conf.<ifname>.addr_gen_modeで値 "2"を探します。

一時プライベートアドレス

RFC 4941で定義されているように、一時的なプライバシーアドレスはランダムに生成され、数時間ごとにローテーションされます。

  • Windowsは、Windows XP SP2以降の一時アドレスをサポートします。

    この機能を有効/無効にするには:

    netsh interface ipv6 set privacy state=enabled
    netsh interface ipv6 set privacy state=disabled
    

    Windowsは、Windows Vista以降、MACアドレスベースのプライマリアドレスを使用しなくなりました。

  • Linux(NetworkManager):最近のバージョンのNetworkManagerは独自にRAを処理しますが、以下の2つの値はsysctlと同じ意味を持ちます(2 =プライバシアドレスを優先、1 =メインアドレスを優先) :

     nmcli con modify <name> ipv6.ip6-privacy 2
    

    また、1.2.0以降では、 main アドレスがMACベースではなくなり、代わりにすべてのネットワークで一意になるように改良されたモードが利用可能になりました(RFC 7217)。

    (プライバシーアドレッシングはaddr-gen-modeと直交していることに注意してください。両方を使用することが可能です。)

    サイドノート:1.4.0以降、NMではMACアドレス自体をランダム化することもできます。ネットワークごとに異なるMACを持つ場合はwifi.cloned-mac-addressstableに設定します(推奨)。または every 接続にランダムに割り当てる場合はrandomを設定します(問題の原因となる可能性があります)。

    すべての場合において、<name>は接続名でなければなりません、例えばWiFi SSIDまたは"Wired Connection 1"。すべてを一覧表示するにはnmcli conを使用してください。

    これを new 接続のデフォルトにするには、1.2.0以降で/etc/NetworkManager/NetworkManager.confを変更できます。

     [connection]
     ipv6.addr-gen-mode=stable-privacy
     wifi.cloned-mac-address=stable
    
  • Linux(カーネルSLAAC)は一時アドレスをサポートしますが、デフォルトでは使用しません。それらはsysctlを通して起動することができます。

    一時的なアドレスを有効にしてそれらを preferred 発信接続用にするには:

     sysctl net.ipv6.conf.all.use_tempaddr=2
     sysctl net.ipv6.conf.default.use_tempaddr=2
    

    一時的なアドレス生成を有効にするには、静的SLAACアドレスを優先されるようにします。

     sysctl net.ipv6.conf.all.use_tempaddr=1
     sysctl net.ipv6.conf.default.use_tempaddr=1
    

    allまたはdefaultの部分は、特定のインタフェース名に置き換えることができます。例えばnet.ipv6.conf.eth0.use_tempaddr

    (アドレスの割り当てを強制するためにip link set eth0 down && ip link set eth0 upを使用しましたが、rdisc6 eth0を実行するか、または次の定期的なルーター通知を数分間待つこともできます。)

  • Mac OS X - OS X 10.7以降、デフォルトで有効になっています。

     sysctl -w net.inet6.ip6.use_tempaddr=1
    

    有効な場合は、一時アドレスが優先されます。

  • FreeBSD

     sysctl net.inet6.ip6.use_tempaddr=1
    
     sysctl net.inet6.ip6.prefer_tempaddr=1
    
  • NetBSD

     sysctl -w net.inet6.ip6.use_tempaddr=1
    

    仮住所の設定何も思いつきません。 autoconfアドレスが優先されるようです。 ifconfigは、アドレスプロパティを一覧表示していないようです。

  • OpenBSD - 5.2 でサポートが追加されました。 5.3 でデフォルトで有効になっています。

     ifconfig em0 autoconfprivacy
    

    ifconfigは、一時アドレスの横に "autoconfprivacy"を表示します。

構成に関する注意事項

  • Linux、OS X、およびすべてのBSDでは、設定を永続的にするために/etc/sysctl.confを編集します。

  • Windowsでは、変更は自動的に持続します。 (再起動するまでだけ継続させたい場合は、netshコマンドにstore=activeを追加できます。)


IPv6INT.netの IPv6オペレーティングシステム に一部基づいています。 IPv6に関する一般的な注意事項 もご覧ください。


ハードウェアアドレスがIPv6アドレスで使用されている場合、通常、ネットワークはIPv6ステートレス自動設定を使用しています。そのような場合は、単にあなた自身のアドレスサフィックスを選んで手動でIPv6を設定することができます。

ただし、手動で追加したアドレスにはハードウェア情報は含まれませんが、それでも静的なままになります(プライバシーアドレスとは異なり、アドレスが頻繁に変更されます)。また、静的アドレスは、2〜3台のデバイスを超えるネットワークでは問題になる可能性があります。

132
grawity

参考までに、これは特定のIPアドレス指定方式にのみ適用されます。おそらくあなた(またはあなたのISP)はIPv6自動設定を使用しています、それはそもそも達成するためにかなり大きなIPブロックを必要とします。解決策は、この機能を無効にすることです。 ISPはDHCPを使用してアドレスを割り当てることもできますが、これはIPv6でも可能です。

1
Ernie Dunbar