开启路由器 IPv6 网络
由于之前设置好了电信光猫的桥接模式,路由器是直接通过 PPPoE 协议接入电信网络,所以可以直接启用 IPv6 网络。
首先开启 MikroTik ROS 的 ipv6 包。
打开 PPPoE profile 中的 ipv6 支持。
确定 ipv6 转发开启。
配置 IPv6 DHCP Client 获取前缀。
配置 IPv6 DHCP Server 分发地址。
为内网接口分配 IPv6 地址
DNS
Google 的 IPv6 公共 DNS
- 2001:4860:4860::8888
- 2001:4860:4860::8844
问题
PMTU 黑洞
现象:
接上 IPv6 后发现知乎、简书、网易云音乐等 HTTPS 协议连接无法访问,而 ICMP 报文可达,HTTP 协议可以返回。参考了几篇文章后发现是路由器 MTU 设置问题。
以下是引用的文章说明 [1]
终端设备在发包时,也可以设置 DF ( Don’t Fragment )标记来告诉路由器不要分片。这时中间路由器会丢掉超过 MTU 的包,回复一条 ICMP Fragmentation Needed 消息。发送者收到这个包后,下次就会发小一点的包,这个过程叫做 PMTU Discovery 。现实中可以看到 HTTPS ( TLS )的流量大都是带 DF 标记的。
然而,互联网上有大量的中间设备为了所谓的“安全”或者没有正确配置,不回应 ICMP Fragmentation Needed 包,这使得访问某些网站时如果某个包的大小超过了 PMTU,会被无声地丢弃,直到 TCP 协议发现超时丢包进行重传,这非常缓慢。遇到这种情况,我们可以说你和目标服务器的路径上存在 PMTU 黑洞。
由于我们到简书之间的目标链路一直在变化,在链路节点中如果遇到了这种被错误配置的设备,就会导致我们无法访问简书。
现在国内 ISP 一般都是通过 PPPoE 虚拟拨号建立 WAN 口连接的。Ethernet 的默认 MTU 是 1500,但是 PPPoE 隧道有 8 个 bytes 的开销,所以 PPPoE 虚连接的 MTU 就是 1500-8=1492,减掉 IPv4 包头( 20 字节)和 TCP 包头( 20 字节),可以得知 IPv4 下需要把 MSS 设为 1452 以下。IPv6 的包头是 40 字节,所以 IPv6 下需要把 MSS 设为 1432 以下。
这里将最大 MTU 改为 1400,问题得到缓解。
多重 IP 地址
以太网适配器 以太网 2:
连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : 240e:****:****:****:****:****:****:872c
IPv6 地址 . . . . . . . . . . . . : 240e:****:****:****:****:****:****:872c
IPv6 地址 . . . . . . . . . . . . : 240e:****:****:****:****:****:****:872c
临时 IPv6 地址. . . . . . . . . . : 240e:****:****:****:****:****:****:f4dd
临时 IPv6 地址. . . . . . . . . . : 240e:****:****:****:****:****:****:f4dd
临时 IPv6 地址. . . . . . . . . . : 240e:****:****:****:****:****:****:f4dd
本地链接 IPv6 地址. . . . . . . . : fe80::****:****:****:872c%21
IPv4 地址 . . . . . . . . . . . . : 10.*.*.10
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : fe80::****:****:****:5ff1%21
10.*.*.1
如上,系统的 DHCP Client 获取到了多重 IPv6 地址,参考 [2] 中认为,是 PPPoE 定期拨号,导致了 IPv6 地址前缀变动,使得旧地址失效。而系统又将旧地址的路由优先级高于新地址,导致 IPv6 网络无法访问。
暂时没有好的解决方案。