关于 macos 使用 IPv6 获得四个地址问题的讨论

2019-07-10 09:43:05 +08:00
 janz1995

各位大佬好,初到 V2EX 也不知道如何发帖才能得到各位大佬的重视。 最近有个问题困扰我很久,希望在 V2EX 得到解决与帮助,我描述下我的问题。

众所周知,IPv6 地址需要分配,目前存在两种分配地址的方式,分别为 stateless (无状态)和 stateful (有状态)当设备通过无状态获取 IPv6 地址时,不需要 DHCP 客户端等其他配置,地址是由路由器给出的前缀通过某种算法推算出来的,比如通过 MAC 地址计算出除了路由前缀剩下的部分,但这就涉及到隐私问题,所以在 RFC4941 中,规定了操作系统会通过某种算法重新计算这个无状态获得的 IPv6 地址,计算出来一个临时地址供以使用,当启用了隐私扩展功能后,与外界相连时会优先使用这个 IP。那问题来了,即如何保证 macos 系统使用临时地址的稳定性?以及可追踪?

有状态的地址暂时不在此次讨论的范围内。

macos 系统是从 10.7**( 2011 年发布的版本)**这个版本加入了临时地址这个选项,当时的 autoconf secured 地址还是通过 mac 地址算出来的地址,而 autoconf temporary 地址又是通过某种算法为了保证隐私又算了一遍得到的全球单播地址,而到了 10.12 版本之后,autoconf secured 不再仅仅是根据 mac 地址推算出来的地址,那 auto temporary 地址也会随之变化,当然这不是我们关心的点,我们只需要知道在 10.7 这个版本之后就存在这个 autoconf temporary 地址即可。

通过查阅资料可知,autoconf secured 这个地址一般是用来外部主机连接本机时所用,即其他主机访问我,而 autoconf temporary 地址则是用来从内部到外发起连接所用,即客户端访问服务端。

这个隐私地址每次系统(重新)连接到网络时都会被更改,同时每 24 小时更改一次。

如下方:

en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
	ether 8c:85:90:**:**:**
	inet6 fe80::****:****:****:****%en0 prefixlen 64 secured scopeid 0x6
	inet6 2001:da8:****:****:****:****:****:**** prefixlen 64 autoconf secured
	inet6 2001:da8:****:****:****:****:****:**** prefixlen 64 autoconf temporary
	inet6 2001:da8:****:****:****:****:****:**** prefixlen 64 dynamic
	inet 169.254.130.12 netmask 0xffff0000 broadcast 169.254.255.255
	nd6 options=201<PERFORMNUD,DAD>
	media: autoselect
	status: active

那么问题来了,请问:

1. Macos 获取 IPv6 隐私地址的运行机制是什么?

个人理解:早期的 IPv6 无状态地址是前 64 位是根据路由前缀决定的,但后 64 位是根据主机的 mac 地址通过某种算法计算而得,这就出现了隐私的相关问题,故 IETF 在 RFC4941 规定了可以通过无状态地址再通过某种算法计算出一个临时地址或者说隐私地址,具体的文档可参见:

https://tools.ietf.org/html/rfc4941

2. 替换周期以及交接窗口期

个人理解:替换周期为每次中断网络连接后都会重新计算,或者使用一个临时地址超过 24 小时会重新计算。

3. 替换过程中 telnet 等应用是否会中断

求大家帮助

4. 替换过程中两个 Privacy 作为外联地址的交接过程

求大家帮助

5. 能否关闭 mac 的 privacy 地址

个人理解以及实践说明:Macos 可以通过对 sysctl.conf 进行修改从而达到禁用 IPv6 临时地址的问题,具体操作方法如下:

通过对 sysctl.conf 文件进行修改,可以做到关闭掉 autoconf temporary 地址

具体命令 sudo sysctl -w net.inet6.ip6.use_tempaddr=0 但是重启后会失效

如果想使设备,重启不失效 和对 SSLVPN 的做法一样,通过修改 sysctl.conf 文件 可以禁用掉 temporary 地址

但是在 10.14.5 最新版的 macos 系统中,在 etc 目录中并没有 sysctl.conf 文件,不过通过 sysctl -a 命令在 shell 中有相关参数的输出

所以手动创建 sysctl.conf 文件并添加下列内容

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

同时由于 conf 文件的规则,最后一行需要 blank 行,即多摁一个回车

经过测试,按照上述的配置,是可以禁用掉临时地址的。

4266 次点击
所在节点    macOS
3 条回复
janz1995
2019-07-10 09:43:35 +08:00
1-5 的问题,求大佬解答。。
podel
2019-07-10 09:54:51 +08:00
最近不是不少人说电信的 ipv6 重启都不会变么。
不管你再怎么 privacy 地址 网段都不会变。再怎么也能追查到你家的路由器。
janz1995
2019-07-10 11:02:20 +08:00
@podel 嗯嗯 谢谢您 我这边是在园区网内 还是有上述疑惑 希望能够得到解答 。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/581583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX