跳到主要内容

Path MTU 与 TCP MSS

routerd 推导 tunnel MTU、TCP MSS clamp、router advertisement MTU 和可选 IPv4 force fragmentation 的流程

routerd 从建立隧道路径的资源中,自动导出 Path MTU 的处理方式。 DS-Lite、PPPoE、WireGuard 各接口提供有效 MTU,防火墙区域则表示从 LAN 往 WAN 的转发方向。

从 trusted 接口转发至 untrusted 隧道时,routerd 自动生成 TCP MSS clamp。 MSS 设置为:IPv4 TCP 为 MTU - 40,IPv6 TCP 为 MTU - 60。 有效值以来源接口 MTU 与目的地路径的 Path MTU 中较小的一方为准, 分别针对来源路径与目的地路径计算。Linux 的 nftables 生成器只在 SYN 数据包所广播的 MSS 大于此导出值时才进行改写。 因此不会拉高来自其他具有较小 MTU 接口的较低 MSS, 也不会将无关的 LAN 路径拉低至较低的 MTU。

若 trusted 接口上有 DHCPv6ServerIPv6RouterAdvertisement, 且转发路径使用较小的隧道 MTU,RA 也会反映导出的 MTU。 配置中只需声明 LAN、WAN、隧道、防火墙区域及 RA/DHCPv6 的意图,无需编写各自的 MTU policy 资源。

reverse path filter 的 sysctl 也是相同的设计思想。routerd 从路由器与隧道的 资源,自动导出面向路由器的保守默认值,以及各隧道的 rp_filter=0