プライバシー – IPv6を使用しているときにMACアドレスを公開しないようにするには?

ipv6 mac-address privacy

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

これはスーパークッキーのように感じますし、他のOSにも当てはまるかもしれません。自分のMACアドレスを公開されないようにするにはどうすればいいですか?

背景:MACアドレスはnot in plain sightです。2001:0db8:1:2:60:8ff:fe52:f9d8のように

  • 最後の64ビット(ホスト識別子)を取り、先頭のゼロを追加します。0060:08ff:fe52:f9d8
  • ff:feの部分を真ん中から剥がします。これらのバイトがない場合、then MACアドレスは存在しない
  • 1 バイト目の場合:2 番目の低次ビット(ユニバーサル/ローカルビット;ビットが 1 の場合は 0 に、0 の場合は 1 にする)を補完します。例えば、以下のようになります。0x00 (000000) は 0x02 (00000010) になります
  • すぐに。60:8ff:fe52:f9d8はMACアドレス02:60:08:52:f9:d8に変換されます

注:macOS 10.12 Sierra以降、Ars Technicaによると、Appleは、Windowsが明らかにすでに何年も前から行っていたMACアドレスに基づかない安定したアドレスを生成する新しい方法を採用しています


この質問は、今週のスーパーユーザーの質問でした。 詳細はブログエントリーを読むか、自分でブログに投稿してみてください

  142  None  2011-02-09


ベストアンサー

これは、IPv6の2つの拡張機能によって解決されます

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

少なくとも1つの方法ではありますが、最近では両方の方法が一般的なオペレーティングシステムでサポートされるようになってきています

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

安定した個人アドレス

一部のオペレーティングシステムでは、プライマリインタフェース識別子は MAC や EUI-64 から生成されなくなり、代わりにハッシュやランダムシードを使って生成されます (通常は RFC 7217 に従います)

この種のアドレスはネットワークごとにまだ静的です – 同じIPv6プレフィックス内の同じマシン上の同じOSは、常に同じサフィックスを生成する必要があります。これは、着信接続に適しています

  • Windows Vistaから始まるWindowsは、カスタムスキームを採用しています

    機能が有効かどうかを確認するには、PowerShell コマンドを実行します

    Get-NetIPv6Protocol | fl RandomizeIdentifiers
    

    機能の有効化/無効化を行います

    Set-NetIPv6Protocol -RandomizeIdentifiers Enabled
    
    Set-NetIPv6Protocol -RandomizeIdentifiers Disabled
    

    これはnetsh interface ipv6でもできます

  • NetworkManager on Linuxは、NM v1.2.0からRFC 7217をサポートしており、接続プロファイルのUUIDをシードの一部として使用します。この機能は、最近の NM バージョンではデフォルトで有効になっています

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

    nmcli con modify "<profilename>" ipv6.addr-gen-mode stable-privacy
    
    nmcli con modify "<profilename>" ipv6.addr-gen-mode eui64
    
  • systemd-networkd はこの .network ファイルオプションを使って RFC 7217 をサポートしていますが、このモードが使われるべきネットワークプレフィックスを明示的にリストアップする必要があるようです

    [Network]
    IPv6Token=prefixstable:2001:db8:abcd:123::/64
    

    接頭辞が一致しない場合でも、EUI-64方式にフォールバックします

  • Linux/BSD 上の dhcpcd は /etc/dhcpcd.conf のこのオプションを使って RFC 7217 をサポートしています

    slaac private
    

    この機能を無効にして、従来のEUI-64識別子を使用する場合

    slaac hwaddr
    
  • Linux カーネル SLAAC は Linux v4.1.0 の RFC 7217 をサポートしています

    秘密鍵は128ビットの16進数文字列(IPv6アドレスのような形をしています)で、これを使って生成することができます

    uuidgen | sed "s/-//g; s/..../:&/g; s/^://"
    

    この秘密鍵は、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で定義されている) は、数時間ごとにランダムに生成される追加のアドレスを提供します。これらのアドレスは発信接続にのみ使用され、着信接続ではMACベースまたはRFC7217ベースのプライマリアドレスを保持します

  • WindowsはWindows XP SP2からテンポラリアドレスをサポートしています

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

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

    Windows は Vista からハッシュベースのプライマリアドレス生成をサポートしているので、この機能はそれほど重要ではないことに注意してください

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

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

    NetworkManager は v1.2.0 以降、RFC7217 ベースのプライマリアドレス生成をサポートしているため、この機能はそれほど重要ではないことに注意してください

    余談: 1.4.0の時点で、NMではMACアドレス自体もランダム化できるようになっています。wifi.cloned-mac-addressstableに設定するとネットワークごとに異なるMACを持つことになり(推奨)、randomに設定すると接続ごとにランダム化することになります(問題が発生する可能性があります)

    すべての場合、<name>には接続名(WiFi SSIDや"Wired Connection 1"など)を指定する必要があります。すべてをリストアップするには nmcli con を使用します

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

     [connection]
    ipv6.addr-gen-mode=stable-privacy
    wifi.cloned-mac-address=stable
    
  • dhcpcd は slaac ... temporary サブオプションを使ったテンポラリアドレスをサポートしています

     slaac private temporary
    

    or

     slaac hwaddr temporary
    
  • Linux カーネル SLAAC は一時アドレスをサポートしていますが、デフォルトでは使用しません。これらの sysctls を設定することで有効にすることができます

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

    all または default の部分は、特定のインターフェイス名に置き換えることができます

    (私はip link set eth0 down && ip link set eth0 upを使って強制的にアドレス割り当てを行いましたが、rdisc6 eth0を実行したり、次の定期的なRouter Advertisementを数分待つだけでも構いません)

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

     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
    

    最新の NetBSD はカーネルの SLAAC サポートがなくなっているようです

  • OpenBSD – 5.2 でサポートが追加され、5.3 で有効化され、デフォルトでは優先されています

     ifconfig em0 autoconfprivacy
    

    ifconfigでは、テンポラリアドレスの横に「autoconfprivacy」と表示されています

設定の注意点

  • Linux、OS X、およびすべてのBSDでは、/etc/sysctl.confを編集して設定を恒久的なものにしてください

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


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


IPv6アドレスにハードウェアアドレスが使用されている場合、通常はネットワークがIPv6ステートレス自動設定を使用していることを意味します。

しかしながら、手動で追加されたアドレスにはハードウェア情報が含まれていないにもかかわらず、それは静的なままです (アドレスが頻繁に変更されるプライバシー アドレッシングとは異なります)。また、静的なアドレスは、2-3 台のデバイスよりも大きなネットワークでは苦痛になることがあります

137  user1686  2011-02-09


参考までに、これは特定のIPアドレッシングスキームにのみ適用されます。おそらく、あなた(またはあなたのISP)はIPv6の自動設定を使用していて、最初の場所で達成するにはかなり大きなIPブロックが必要です。解決策としては、この機能をオフにすることが考えられます。ISPはアドレスを割り当てるためにDHCPを使用している可能性がありますが、これはIPv6でも可能です

1  Ernie Dunbar  2011-02-09


タイトルとURLをコピーしました