开启路由器 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 后发现知乎、简书、网易云音乐等 SSL 协议连接无法访问。参考了几篇文章后发现是路由器 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 改为 1430,问题得到缓解。

参考