macOS PPPoE IPv6 配置

2020年03月31日 175点热度 0人点赞 0条评论

单位提供的拨号连接,本身是提供 IPv6 地址的,这一点在 Windows 上得以证实,拨号即可自动配置 IPv6。但是将网线连接到 Mac 上进行拨号连接时,却无论如何也无法获取 IPv6 地址。

在使用 Wireshark 进行检查后,确认 macOS 是可以正确无误地收到 IPv6 路由通告数据包的,数据包中也提供了 64 位前缀,但是不知为何 macOS 从上古时代至今一直没有处理好拨号连接的 IPv6 配置问题。在网上搜索还可以搜到 10 年前相同的问题。

在苹果官网社区中找到了此问题的讨论,有位用户提供了一个相当有用的脚本。这个脚本做的事情就是监听 PPPoE 连接中的 ICMPv6 数据包,并从中提取出通告的前缀,构造一个合法的 IPv6 地址,手动配置到 PPPoE 连接上,并添加一条 IPv6 默认路由。

经过测试,在我的网络环境下,在建立 PPPoE 连接时,只接收到了一个 ICMPv6 数据包,原本的脚本设置监听两个数据包,在我的网络环境中不适用,所以略作修改,只监听一个,修改后测试通过。同时我额外增加了过滤条件,限定只监听路由通告数据包,这样可以避免其他数据包的干扰。

#!/bin/sh
PREFIXINFO=`/usr/sbin/tcpdump -v -i $IFNAME -c 1 icmp6 and 'ip6[40] = 134' | grep prefix`
PREFIX=`echo $PREFIXINFO|cut -f2- -d:|cut -f1 -d/|cut -c2-`
PREFIXLEN=`echo $PREFIXINFO|cut -f2 -d/|cut -f1 -d,`
ADDR="cafe"

/sbin/ifconfig $IFNAME inet6 ${PREFIX}${ADDR}/$PREFIXLEN
/sbin/route add -inet6 default -interface $IFNAME

将以上脚本放置在 /etc/ppp/ 目录下,并命名为 ip-up,之后不要忘记添加可执行权限 sudo chmod +x /etc/ppp/ip-up。再次测试 PPPoE 连接,由于第一个路由通告包在 tcpdump 运行之前已经发送过了,所以需要耐心等到第二个路由通告包发来才能将 IPv6 配置成功。

截屏2020-03-31 10.10.54

参考链接:https://discussions.apple.com/thread/4294034?answerId=23474747022#23474747022

Neo

与卿再世相逢日,玉树临风一少年。

文章评论