使用IPv6时如何避免暴露我的MAC地址?


140

在我的Mac上,每个IPv6地址都包括特定计算机(而不是我的路由器)的MAC地址。ipv6-test.com等网站不仅显示它,甚至告诉我它属于Apple计算机。

这感觉像一个超级cookie,并且可能也适用于其他操作系统。如何避免暴露我的MAC地址?

背景:MAC地址不清晰。喜欢2001:0db8:1:2:60:8ff:fe52:f9d8

  • 取最后64位(主机标识符)并添加前导零:0060:08ff:fe52:f9d8
  • ff:fe从中间剥离零件。如果这些字节不存在,没有MAC地址。
  • 对于第一个字节:对第二个低序位进行补充(通用/本地位;如果该位为1,则将其设置为0,如果为0,则将其设置为1)。因此:0x00(00000000)变为0x02(00000010)。
  • Presto:60:8ff:fe52:f9d8转换回MAC地址02:60:08:52:f9:d8

注意:自macOS 10.12 Sierra以来,根据Ars Technica的说法,苹果采用了一种新的方式来生成稳定的地址,该地址不是基于MAC地址的,Windows显然已经这样做了多年。


这个问题是本周超级用户问题
阅读博客条目以获取更多详细信息,或者自己撰写博客


14
哇,我不了解IPV6,真是太好了。
Supercereal 2011年

18
好吧,它当然显示的是一台苹果计算机。毕竟,这是一个MAC地址。
Graeme Perrow

@Kronos,博客条目中没有图像;blog.superuser.com/2011/02/11/…在网址中添加“ .stack”将有助于:i.stack.imgur.com/RNXoA.png
Arjan

...但是,@ KronoS添加“ .stack”实际上会使同一博客文章消失的另一种图像形式,例如i.imgur.com/vjK73.png(好)与i.stack.imgur.com/vjK73.png(不行)。换句话说:也许博客上当前不使用的所有图像都.stack应该重新上传...?
Arjan 2012年

@Arjan我不确定。我将不得不对此进行检查。我想要一个功能,所有上传到博客的图像都将自动上传到堆栈的imgur帐户。与目前的常规网站类似
James Mertz 2012年

Answers:


134

这可以通过对IPv6的两个扩展来解决:

  • RFC 4941(也称为“隐私寻址”)允许出站连接使用临时随机生成的地址(每隔几个小时轮换一次)。
  • RFC 7217允许从不显示任何信息的不透明哈希生成主要的静态地址。

流行的操作系统支持至少一种但越来越多的两种方法。

请注意,这些特征是正交的。如果需要,您可以同时使用两者。

稳定的私人地址

在某些操作系统中,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位的十六进制字符串(形状类似于IPv6地址),必须存储在net.ipv6.conf.default.stable_secretsysctl中。为了使其持久,可以将其放入/etc/sysctl.d/50-rfc7217.conf或类似方式:

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

    设置密码会自动为所有网络接口激活此模式。要检查该功能是否处于活动状态,请在中查找“ addrgenmode stable_secret” ip -d link,或在中查找值“ 2” sysctl net.ipv6.conf.<ifname>.addr_gen_mode

临时私人地址

根据RFC 4941的定义,临时隐私地址是随机生成的,每隔几个小时轮换一次。

  • Windows从Windows XP SP2开始支持临时地址。

    要启用/禁用此功能:

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

    请注意,从Windows Vista开始,Windows不再使用基于MAC地址的主地址。

  • Linux(NetworkManager)NetworkManager的最新版本自行处理RA,尽管以下两个值与sysctl具有相同的含义(2 =首选隐私地址,1 =首选主地址):

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

    同样,从1.2.0版开始,更好的模式变得可用,它将地址更改为不再基于MAC,而是对每个网络都是唯一的(RFC 7217):

    (请注意,隐私寻址与addr-gen-mode正交;可以同时使用两者。)

    旁注:从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
    
  • Linux(内核SLAAC)支持临时地址,但默认情况下不使用它们。可以通过sysctls激活它们。

    要启用临时地址并使它们成为传出连接的首选地址:

     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
    

    alldefault部分可以与特定的接口名称被替换; 例如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 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
    

    临时地址偏爱?我不知道。autoconf地址似乎是首选。ifconfig似乎没有列出任何地址属性。

  • 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无状态自动配置。在这种情况下,您只需选择自己的地址后缀并手动配置IPv6。

但是,即使手动添加的地址没有您的硬件信息,它仍然是静态的(与“隐私寻址”不同,后者经常更改地址)。同样,在大于2-3个设备的网络中,静态地址可能会很麻烦。


2
在Mac和FRITZ!Box 7340路由器上有很好的副作用:我在中得到两个地址ifconfig。传出连接使用随机autoconf temporary地址,该地址有时会更改。好!但是对于传入的连接(在路由器中打开时),我仍然可以使用该autoconf地址。我不介意在DNS记录中公开它(尽管也许我什至可以为此选择另一个地址)。
Arjan

啊,whois垃圾邮件之后,我们现在收到了IPv6垃圾邮件:dig -t AAAA www.v6.facebook.com ;-)
Arjan

6
@Arjan:的IPv6地址de4d:b33f对于记忆来说还不错。同样,它们是由其所有者放置的,而whois垃圾邮件是a)烦人的b)由无法控制您的域的局外人造成的。
grawity 2011年

1
顺便说一句:上面的(某些)似乎可以告诉OS 首选临时地址,但应用程序仍可以覆盖此首选项
Arjan 2013年

使用AFAICS的临时地址(IPv6保密性)对于某些ISP实际上是不可用的,这是因为路由器的广告具有40s的短短最大生存期,它覆盖了内核设置。Linux的看到ip apreferred_lft。因此,ssh如果启用此功能,连接将每隔40秒中断一次。对于普通的网络冲浪者来说,它甚至不可用,因为每次下载也必须在40秒内完成。
蒂诺2014年

1

仅供参考,这仅适用于某些IP寻址方案。您(或您的ISP)很有可能正在使用IPv6自动配置,这首先需要相当大的IP块才能完成。解决方法可能是关闭此功能。您的ISP可能也使用DHCP分配地址,而IPv6仍然可以分配地址。


3
至于大块:根据Wikipedia在“常规分配”中的描述:RIR将较小的块分配给ISP,然后ISP将这些块以/ 48大小的部分分配给它们的客户。确实,我的ISP还为消费者级订户分配了/ 48前缀。那不是太奇怪了吗?
Arjan

3
然后归咎于维基百科和Arin的IPv6寻址计划草案:所有客户都获得一个/ 48的收益,除非他们能证明他们需要超过65k子网。但也:如果你有大量的消费客户,你可能要指派/ 56S到私人住宅的网站 -这仍是比我以往任何时候都需要。;-)但是,情况可能会发生变化:尽管显然他们的客户已基于此配置了调制解调器/路由器,但我的ISP从未承诺过这一点。
Arjan

3
我认为当Arin说“客户”时,它们的意思是“ ISP”。任何ISP(包括非常大的ISP)都可以为其整个网络分配一个/ 64并完成此操作。无需进一步的路由。但是,将数以万亿计的IP地址块分配给普通的普通居民,实在是万无一失。
Ernie Dunbar,

3
显然,分配至少一个原因的原因是/56“仅分发/64/64/48/56
2014年

7
/ 64不是“相当大的块”;它是子网的最小合理分配块。一些IPv6的功能需要一个子网/ 64,你已经忘记了(或没有意识到),该IPv6在很大程度上是旨在防止有人曾经跑出来的地址再次如初。您必须从需要保留宝贵地址的旧思想中解放思想;它在IPv6中没有位置。
迈克尔·汉普顿
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.