这感觉像是超级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显然已经使用了多年。
这个问题是超级用户本周问题。
阅读博客条目以获取更多详细信息,或者自己撰写博客
#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
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 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
评论
哇,我不了解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帐户。与常规站点当前的行为类似