为什么我的路由器对于 IP 和 IPv6 交易会有不同的 MAC 地址?

为什么我的路由器对于 IP 和 IPv6 交易会有不同的 MAC 地址?

今天我使用 tcpdump 时发现我的计算机有 IPv6 流量,该流量带有一个特定的 MAC 地址,我无法使用 nmap 或 arping 将其与 IP 进行匹配。仔细查看 tcpdump 日志后,我发现这是我的路由器正在使用的另一个 MAC 地址,但仅用于 IPv6 流量。

22:49:01.936830 90:0d:cb:ff:31:91 (oui Unknown) > 33:33:00:00:00:01 (oui Unknown), ethertype IPv6 (0x86dd), length 158: fe80::920d:cbff:feff:3191 > ip6-allnodes: ICMP6, router advertisement, length 104

为什么路由器会为 IPv6 提供不同的 MAC 地址?

答案1

这是隐私/安全问题的结果。在 IPv6 中,无状态地址自动配置ADDRCONF,节点无需 DHCP 服务器即可生成自己的公共地址。该地址的低 64 位由 IEEE 标识符(如果可用)生成,相当于第 2 层 MAC 地址。如果这就是全部情况,那么通过使用传统的数据挖掘技术,就有可能通过 IPv6 地址的低 64 位跟踪任何移动设备的位置和通信。

这就是为什么我问你是否在笔记本电脑上看到这个。

这一隐私/安全问题由以下方式解决:RFC 3041RFC4941,描述了两种生成随机接口标识符的策略(在存在或不存在永久存储的情况下)。

您可以在 Linux 和 Mac 中使用以下控件来控制此功能:在 Linux 中,

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

等等,在 Mac 中

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

这种方案的优点在于,它不仅可以隐藏您的硬件标识,还可以经常自动更改(随机)标识。

有关大多数操作系统中的隐私寻址的更多信息,可以阅读 这个优秀的 PSU 页面

编辑:

有些系统(例如 Arch Linux)已经转向使用 sysctl 的新配置。在这种情况下,您可以通过在文件 /etc/sysctl.d/40-ipv6.conf 中将以下条目更改为这些值来执行上述配置:

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

编辑2:

@slubman 正确指出,在 Linux 中,正确的选项是2, 不是1(这是我的 Debian 上所拥有的),因为1确实允许生成隐私地址但仍然优先使用 Autoconf。

相关内容