RouterOS 下基于 macvlan pppoe 拨号的 wireguard mtu 问题
最近发现 git clone
github 上面稍微大一点的库的时候就会在下载到几百兆的时候报错断开。我一直以为是从 udp2raw 切换到 hysteria 才导致的线路不稳定。但是报错断开的同时观察 ping 数据,一直处于非常稳定的状态。最近这一次碰到的时候突然联想到了 mtu 。觉得可能和它有关系。就尝试调整了一下。
git clone
大致的报错如下:
remote: Enumerating objects: 222542, done.
remote: Counting objects: 100% (11400/11400), done.
remote: Compressing objects: 100% (466/466), done.
error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CANCEL (err 8)
error: 6407 bytes of body are still expected
fetch-pack: unexpected disconnect while reading sideband packet
fatal: early EOF
fatal: fetch-pack: invalid index-pack output
网络结构
之前用的是 udp2raw + udpspeeder,来包裹 wireguard 协议。udpspeeder 好像会重新对包进行组装。所以没有遇到网络问题。
但由于 routeros 中的 container 没有 iptables 的权限。没有办法运行 udp2raw,所以换成了 hysteria 对 wireguard 协议进行包裹。运行了一段时间之后感觉稳定性也还不错。延迟似乎还更低了一些。从 github 拉一些不太大的库也没有碰到问题。
这次怀疑 mtu 问题也只是猜测而已。尝试过设置两边的 wg0 接口 mtu 值为 1480, 1460, 1420, 1280 都没有解决问题。错误的设置甚至会导致 git clone
操作卡死不动,直到 timeout。
最后测试下来发现下面的设置是有效的:
- 设置 macvlan mtu 为 1480
- pppoe 拨号后会自动设置 mtu 为 1472 (1480-8)
- 保持 routeros wg0 mtu 为默认的 1420
- server 端 wg0 保持为 1500
其它
中间加入了一层 macvlan 是因为给 pppoe 做单线多拨。
很早之前也遇到过 mtu 导致的网络问题,但通常都是在访问 http 服务的时候出现的,而且大部分网站都会遇到访问问题。这次的情况好像只有 github 出现问题。并且只是在 git clone
的时候出现问题。通过浏览器访问、下载都是正常的。其实这次出现问题我也没有发现设置上明显的错误。最后虽然解决了,但也只是通过猜测解决的。暂时先记录一下。继续观察看看。
2024-03-29 更新:
最近又出现了 github 不能 clone 仓库的问题了。应该还是 mtu 导致的问题。最后找到了解决方案。通过下面的命令设置 server 的 pmtu
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
并且设置:
- 还原 routeros 中 macvlan mtu 为 1500
- 设置 server 端 wg0 接口 mtu 为默认的 1420