WireGuard MTU 设置心得 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
mantouboji
V2EX    WireGuard

WireGuard MTU 设置心得

  •  
  •   mantouboji 2023-11-22 10:23:37 +08:00 4539 次点击
    这是一个创建于 735 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近几个月都在折腾 wireguard ,从之前的小盒子,变成了 RouterOS 7 内置,一些经验总结下来,MTU 参数的设置值得一提,写下来供参考:

    首先要了解,wireguard 协议增加的开销是 16 字节头加 16 字节尾,一共 32 字节。

    如果你的 wireguard 两端都是 IPv4 地址连接,一个包(假设长度为 x Bytes )到达对方的 wireguard 拟网卡之后:

    1. 加上 wireguard 的 header 和 authentication tag ,此时长度为 x + 32
    2. 加上 udp header ,此时长度为 x + 32 + 8
    3. 加上 IPv4 header ,此时长度为 x + 32 + 8 + 20 为了不丢包,应该有 x + 32 + 8 + 20 <= 1500 (以太网的 MTU ),得到 x <= 1440 ,所以 wireguard 的 MTU 最大可设置为 1440

    如果我们是直接在两台 LAN 连接的电脑上架设 wireguard ,考虑到以太网卡的 MTU 是 1500, 这时候可以选择的 wireguard MTU 就是

    1500 - 32 - 8 - 20 = 1440 

    如果是通过 PPPoE 上网的,本身 PPPoE 的协议开销会占掉 8 个字节,所以上述数据要再减 8 。

    1500 - 32 - 8 - 8 = 1432 

    如果你中间使用了 IPv6 协议连接两端,因为 v6 的地址长,协议开销变大,这时候在以太网和 PPPoE 下的最大 MTU 分别成了

    1500 - 32 - 8 - 40 = 1420 1500 - 8 - 32 - 8 - 40 = 1412 

    缺省情况下,Linux 的 wg-quick 脚本会按照使用了 IPv6 的最大包络,从系统中各个网卡的 MTU 找到一个最小的,减去 80, 作为缺省 MTU 。这也就是 Linux 上常见到 wireguard 接口的 MTU 是 1420 的缘故。

    实质上你用这个在纯 v4 网络上是有一点浪费的,但无所谓了,更保险。

    这个时候还应该想到:你在本地是 PPPoE 连接,但是你的海外 VPS 人家可是 LAN 连接,所以会发生你这里 1492-80=1412 人家那里 1500-80=1420 的情况。好在这个-80 是按照 IPv6 最大包罗万象来选的,对于 IPv4 线路而言还有足够的余量,不至于产生影响。

    核心是承载 wireguard 流量的 UDP 数据包不能被分包。

    但是为了安全起见,还是应该在两端的配置文件里都指定同一个 MTU 数值为好(这种情况下 1412 是一个合理的选择)。

    因为 wireguard 是走 UDP 协议的,会受到运营商 QoS 策略的限制,一段时间后断线或者限流,于是出现了一些把 UDP 伪装成 TCP 的办法。这些办法的配置各有不同,但重点是:它们都会添加额外的协议开销字节数,减少了 wireguard 的有效 MTU ,所以在使用了这些手段之后,必须要减少 wireguard 接口 MTU 配置。

    对于最常用的两种伪装手段而言,udp2raw 是 44 字节,phantun 是 12 字节。于是,在普通 PPPoE 宽带上使用的 wireguard 接口 MTU 就应该是 udp2raw : 1412 - 44 = 1368 phantun: 1412 - 12 = 1400

    最后,更戏剧性的来了,笔者丧心病狂购买了所谓的"国际精品网",还是 PPPoE 拨号,然而 MTU 却大幅度缩水成了 1442, 被电信内部的网络白白吃掉了 50 个字节(恐怖的是 MTU 小了,MRU 还是 1492 )。那么可怜的 wireguard MTU 就变成了:

    UDP:1442 - 32 - 8 - 40 = 1362 

    所以,这时候你就需要按照自己的情况,选择合适的 MTU ,保证网络畅通了。

    在下有段时间心血来潮,想着既然 VPS 和本地都已经有 IPv6 地址,那么顺序切换 IPv4 和 IPv6 地址来建立 wireguard 连接应该是一个有希望的方案。然而当时没有仔细考虑这个 MTU 设置,设成 IPv6 连接后各种不舒服……

    再加上发现精品网只是 IPv4 部分,IPv6 走的路由依旧是普通的 163 线路,延迟巨大,所以彻底打消了这个念头。

    但如果你一直是用普通的 163 线路或者其他运营商,那倒是可以一试。163 线路的 PPPoE MTU 还是 1492 呢。

    总结一下:

    正常普通 PPPoE 宽带:1412 正常普通 PPPoE 宽带套 phantun: 1400

    精品网: 1362 精品网套 phantun: 1350 像我一样的洁癖强迫症:1280 + 32 + 32 = 1344 (算是个整数?)

    3 条回复    2024-02-10 12:30:59 +08:00
    rulagiti
        1
    rulagiti  
       2024-02-09 16:20:15 +08:00
    感谢分享,pppoe 下 ipv6 over ipv4 占用头部是 60 还是 80 ?
    mantouboji
        2
    mantouboji  
    OP
       2024-02-09 20:14:03 +08:00
    @rulagiti 那是在 MTU 里面的事情。我们只关心 wireguard 两端 endpoint 是 v4 还是 v6
    rulagiti
        3
    rulagiti  
       2024-02-10 12:30:59 +08:00
    @mantouboji 明白了
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1070 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is poweed by solitude
    VERSION: 3.9.8.5 23ms UTC 23:19 PVG 07:19 LAX 15:19 JFK 18:19
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86