在我的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,则为0。是0,则设为1)。因此:0x00(00000000)变为0x02(00000010)。
前言:60:8ff:fe52:f9d8转换回MAC地址02:60:08:52:f9:d8


注意:根据macOS 10.12 Sierra,根据Ars Technica Apple Windows已经采用了一种新的方式来生成不基于MAC地址的稳定地址,Windows显然已经使用了多年。



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


评论

哇,我不了解IPV6,真是太好了。

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

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

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

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

#1 楼

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


RFC 4941(又称“隐私寻址”)使出站连接可以使用临时随机生成的地址(每隔几个小时轮换一次)。

RFC 7217允许从不显示任何信息的不透明哈希生成主要的静态地址。

流行的操作系统至少支持一种方法,但越来越多地支持这两种方法。
/>请注意,这些特征是正交的。如果需要,可以同时使用两者。
稳定的私有地址
在某些操作系统中,不再从MAC或EUI-64生成主接口标识符,而是使用哈希或随机种子(通常根据RFC 7217)
这种地址在每个网络中仍然是静态的-同一机器上同一IPv6前缀内的同一操作系统应始终生成相同的后缀。它适合传入连接。


从Windows Vista开始的Windows使用自定义方案。
要检查该功能是否处于活动状态,请运行PowerShell命令:
Get-NetIPv6Protocol | fl RandomizeIdentifiers

要启用/禁用该功能:
Set-NetIPv6Protocol -RandomizeIdentifiers Enabled


Set-NetIPv6Protocol -RandomizeIdentifiers Disabled

也可以使用netsh interface ipv6来实现。


Linux上的NetworkManager使用连接配置文件的UUID作为种子的一部分,从NM v1.2.0开始支持RFC 7217。默认情况下,此功能在最近的NM版本中处于活动状态。
要启用或禁用此功能,请执行以下操作:
网络化类型使用此.network文件选项支持RFC 7217,但似乎要求您明确列出应为此模式使用的网络前缀:
nmcli con modify "<profilename>" ipv6.addr-gen-mode stable-privacy

如果没有匹配的前缀,它仍然会回退到EUI-64方法。


在Linux / BSD上,dhcpcd在/etc/dhcpcd.conf中使用此选项支持RFC 7217:
nmcli con modify "<profilename>" ipv6.addr-gen-mode eui64

要禁用此功能并使用传统的EUI-64标识符:
[Network]
IPv6Token=prefixstable:2001:db8:abcd:123::/64



从Linux v4.1.0起,Linux内核SLAAC支持RFC 7217。但是,必须通过通过sysctl存储秘密种子来手动激活它。
秘密密钥是一个128位十六进制字符串(形状类似于IPv6地址),可以使用以下命令生成该密钥:
slaac private

此密钥必须存储在net.ipv6.conf.default.stable_secret sysctl中。为了使其持久,可以将其放在/etc/sysctl.d/50-rfc7217.conf或类似文件中:
slaac hwaddr

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


临时专用地址
此功能(在RFC 4941)提供了其他地址,这些地址是随机生成的,每隔几个小时轮换一次。这些地址仅用于传出连接-您仍然为传入连接保留基于MAC或基于RFC7217的主地址。


Windows从Windows XP SP2开始支持临时地址。 />要启用/禁用此功能:
uuidgen | sed "s/-//g; s/..../:&/g; s/^://"

请注意,Windows现在支持从Vista开始的基于哈希的主地址生成,因此此功能并不那么重要。


Linux上的NetworkManager:尽管以下两个值与sysctl具有相同的含义,但NetworkManager的最新版本可单独处理RA(2 =首选隐私地址,1 =首选主地址):
net.ipv6.conf.default.stable_secret = 84a0:d5aa:52b0:4d35:k567:3aa6:7af5:474c

请注意,NetworkManager现在支持从v1.2.0开始的基于RFC7217的主地址生成,因此此功能并不那么重要。
旁注:从1.4.0版本开始,NM也允许随机化MAC地址本身。将wifi.cloned-mac-address设置为stable,以便每个网络使用不同的MAC(推荐),或者将random设置为每个连接随机使用(可能会导致问题)。在所有情况下,<name>必须是连接名称,例如WiFi SSID或"Wired Connection 1"。使用nmcli con列出所有列表。
要使其成为新连接的默认设置,从1.2.0版本开始,您可以更改/etc/NetworkManager/NetworkManager.conf
netsh interface ipv6 set privacy state=enabled
netsh interface ipv6 set privacy state=disabled



dhcpcd使用slaac ... temporary子选项支持临时地址:
 nmcli con modify <name> ipv6.ip6-privacy 2
 [connection]
 ipv6.addr-gen-mode=stable-privacy
 wifi.cloned-mac-address=stable



Linux内核SLAAC支持临时地址,但默认情况下不使用它们。可以通过设置以下系统来激活它们:
 slaac private temporary

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起默认启用:
 slaac hwaddr temporary

如果使用临时地址,将是首选。


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



较旧的NetBSD版本:
 sysctl -w net.inet6.ip6.use_tempaddr=1

最新的NetBSD似乎不再具有内核SLAAC支持,在这种情况下,请遵循dhcpcd指令。


OpenBSD –在5.2中添加了支持;在5.3中已启用并默认为首选。
 sysctl net.inet6.ip6.use_tempaddr=1
 sysctl net.inet6.ip6.prefer_tempaddr=1

ifconfig在临时地址旁边显示“自动保密”。


有关配置的说明:


在Linux,OS X和所有BSD上,编辑/etc/sysctl.conf以使设置永久化。


在Windows上,更改将自动保留。 (如果希望仅持续到重启,则可以将store=active附加到netsh命令中。)

部分基于IPv6INT.net上的IPv6操作系统。另请参见IPv6常规说明

如果在IPv6地址中使用了硬件地址,则通常意味着您的网络使用IPv6无状态自动配置。在这种情况下,您只需选择自己的地址后缀并手动配置IPv6。
但是,即使手动添加的地址没有您的硬件信息,它仍然是静态的(与“隐私寻址”不同,后者经常更改地址)。此外,在大于2-3个设备的网络中,静态地址可能会很麻烦。

评论


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

– Arjan
2011-2-9 18:56

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

–user1686
2011年2月9日在20:13

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

– Arjan
2013年9月14日12:33在

@Tino:他们不会。 preferred_lft仅定义何时将地址用于新的传出连接,但是当该地址过期时,该地址在有效时间段内仍然保持有效。因此,即使在正常情况下,如果在10小时后不再喜欢使用临时地址(并生成了一个新地址),该地址仍将保持有效期大约一周。

–user1686
2014年5月8日13:20

在IMO中,您应该切换sysctl命令以获取有关添加到/etc/sysctl.conf(或在Arch Linux上为/etc/sysctl.d/any_file_name)的说明。很多人可能很忙,没有阅读整篇文章。而且,人们很少会希望仅在下一次重新启动之前进行此更改。

–扎兹
15年6月4日在20:42

#2 楼

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

评论


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

– Arjan
2011年2月9日在21:47

然后归咎于维基百科和Arin的IPv6寻址计划草案:所有客户都得到一个/ 48,除非他们可以证明他们需要超过65k子网。而且:如果您有很多消费者客户,则可能需要将/ 56分配给私人住宅站点-这仍然比我需要的更多。 ;-)但是,情况可能会发生变化:我的ISP从未承诺过这一点,尽管显然他们的客户已基于此配置了调制解调器/路由器。

– Arjan
2011-02-10 19:02



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

–Ernie Dunbar
2011-2-10在19:42

显然,分配至少/ 56的原因之一是:“仅分发单个/ 64的ISP根本无法进行任何子网划分。如果该/ 64位于WAN接口上,则您将永远无法在LAN上获得不错的IPv6 (s)。这是ISP的错误,他们应该通过提供适当数量的地址(/ 48或/ 56)来解决此问题。”

– Arjan
2014年7月27日13:07

/ 64不是“相当大的块”;它是子网的最小合理分配块。 IPv6的一些功能要求子网必须为/ 64,并且您已经忘记(或没有意识到)IPv6在很大程度上是为了防止任何人再次用尽地址而设计的。您必须从需要保留宝贵地址的旧思想中解放思想;它在IPv6中没有位置。

–迈克尔·汉普顿
15年2月22日在16:54