找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 3680|回复: 13

[暂时无法划分类别的讨论] WireGuard MTU 设置心得

[复制链接]
本帖最后由 mantouboji 于 2023-7-11 00:59 编辑

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

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

如果你的wireguard两端都是IPv4地址连接,一个包(假设长度为 x B)到达对方的 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就是
  1. 1500 - 32 - 8 - 20 = 1440
复制代码

如果你中间使用了IPv6 协议连接两端,因为v6的地址长,协议开销变大,这时候在以太网和PPPoE下的最大MTU分别成了
  1. 1500 - 32 - 8 - 40 = 1420
  2. 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线路而言还有足够的余量,不至于产生影响。但是为了安全起见,还是应该在两端的配置文件里都指定同一个MTU数值为好(这种情况下1412是一个合理的选择)。

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

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

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

评分

参与人数 1恩山币 +1 收起 理由
tl*** + 1 几亿网民,我们俩竟然神奇的在恩山相遇了!.

查看全部评分

不错不错
回复

使用道具 举报

想请问一下大佬,您试过环境为wireguard + mwan3 多wan口也就是开启负载均衡的模式么? 我目前尝试了wireguard + mwan3,会出现wireguard 显示在线也能连接到,但是实际网络是中断状态的
回复

使用道具 举报

 楼主| | 显示全部楼层
airxy 发表于 2023-7-15 01:17
想请问一下大佬,您试过环境为wireguard + mwan3 多wan口也就是开启负载均衡的模式么? 我目前尝试了wiregu ...

没听说过。

wg的udp连接需要这么复杂的折腾吗?
回复

使用道具 举报

mantouboji 发表于 2023-7-15 17:26
没听说过。

wg的udp连接需要这么复杂的折腾吗?

因为我这边有一个专网是是10.139段的,而我们这个大内网是10.218段,我这个op在10.218是旁路由模式,然后需求是整个10.218的机器都可以v到op上访问10.139,目前op对于10.218和10.139都是wan链接,但是我操作完后连接上就会断网,所以不知道我是不是哪里设置错误了
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 mantouboji 于 2023-7-16 00:32 编辑
airxy 发表于 2023-7-15 22:50
因为我这边有一个专网是是10.139段的,而我们这个大内网是10.218段,我这个op在10.218是旁路由模式,然后 ...

你另外起一个帖子吧,也许其他熟悉OpenWrt的人愿意帮你。我不懂OpenWrt。

你说的需求似乎并不复杂,但我不知道跟OP和所谓的mwan3是什么关系。你最好还是另外起一个帖子详细描述一下你的需求和现况。
----

简单说:假设我们为wg连接单独分配一个网段,这里我选192.168.100.0/24。
然后假设你在139那个段里放一个跑wg的设备A,这个节点分配个地址 192.168.100.1。然后你在218段里再跑一个wg,我们假设是B,地址设成192.168.100.2

A这边:
[interface]
address=192.168.100.1/24

[peer]
AllowedIPs=192.168.100.2/32,10.218.0.0/16

B这边
[interface]
address=192.168.100.2/24
[peer]
AllowedIPs=192.168.100.0/24,10.139.0.0/16

其他关于路由的事情就不再多说了。如有必要,可以在B这边做NAT
回复

使用道具 举报

mantouboji 发表于 2023-7-16 00:01
你另外起一个帖子吧,也许其他熟悉OpenWrt的人愿意帮你。我不懂OpenWrt。

你说的需求似乎并不复杂,但我 ...

收到,谢谢大佬
回复

使用道具 举报

大佬好,请教一个问题,关于局域网的MTU,我设置了一个bridge 名为LAN,把所有的局域网口都加进去了,然后路由pppoe拨号。
结果我发现,ppoe的MTU为1492,LAN bridge的MTU为1500,请问有必要把1500改为1492吗?
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 mantouboji 于 2023-7-20 10:35 编辑
liangxy 发表于 2023-7-20 00:27
大佬好,请教一个问题,关于局域网的MTU,我设置了一个bridge 名为LAN,把所有的局域网口都加进去了,然后 ...

不用,本来就应该如此。你要设置那个clamp-to-pmtu即可。缺省ppppe的设置里已经有了。

  1. /ip firewall mangle add action=change-mss chain=forward comment="Change MSS to PMTU" new-mss=clamp-to-pmtu passthrough=yes protocol=tcp tcp-flags=syn
  2. /ipv6 firewall mangle add action=change-mss chain=forward comment="Change MSS to PMTU, make HTTPS happy" new-mss=clamp-to-pmtu out-interface-list=WAN passthrough=yes protocol=tcp tcp-flags=syn
复制代码


回复

使用道具 举报

大佬你好,望提笔写几篇关于在openwrt上部署配置upd2raw和phantun的文章,我在网上找了好久没有详细的手把手教程,望您不吝赐教,感谢!
回复

使用道具 举报

 楼主| | 显示全部楼层
小猎鹰 发表于 2023-8-3 01:06
大佬你好,望提笔写几篇关于在openwrt上部署配置upd2raw和phantun的文章,我在网上找了好久没有详细的手把 ...

我只玩RouterOS和Fedora 38,不知道OpenWRT是什么,没见过世面,实在帮不上忙,你还是自己去phantun的github页面看看吧,作者写的很详细。
回复

使用道具 举报

mantouboji 发表于 2023-8-3 01:42
我只玩RouterOS和Fedora 38,不知道OpenWRT是什么,没见过世面,实在帮不上忙,你还是自己去phantun的git ...

看了很多遍了,实在是搞不懂,二进制文件还包含服务端和客户端,我都不明白客户端要部署在哪里...
回复

使用道具 举报

 楼主| | 显示全部楼层
本帖最后由 mantouboji 于 2023-8-3 16:46 编辑
小猎鹰 发表于 2023-8-3 11:05
看了很多遍了,实在是搞不懂,二进制文件还包含服务端和客户端,我都不明白客户端要部署在哪里... ...

我很讨厌“部署”这个词。

仅就我的应用情况而言,phantun-server运行在境外VPS上,他有固定的公网IP,等待别人来连接。

client运行在本地。我是一个跑armbian的OrangePi Zero2小盒子,光猫拨号成功后AX2的wg连接这个小盒子的phantun,然后它再去连接境外VPS

--

我的服务器端:/usr/local/bin/phantun-server.sh

  1. #!/bin/bash
  2. RUST_LOG=info nohup /usr/local/bin/phantun_server --local 443 --remote 127.0.0.1:48000 > /var/log/phantun.log 2>&1 & echo $! > /var/run/phantun.pid
复制代码


客户端:/usr/local/bin/phantun-client.sh
  1. #!/bin/bash
  2. SERVER=MY_VPS_IP
  3. nft add rule inet nat postrouting "iifname tun0 oif eth0 masquerade"
  4. RUST_LOG=info nohup /usr/local/bin/phantun_client --local 0.0.0.0:48000 --remote $SERVER:443 > /var/log/phantun.log 2>&1 & echo $! > /var/run/phantun.pid
复制代码


回复

使用道具 举报

感谢大佬,解决了我的大问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-5-24 06:50

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表