在这个问题之前,我从未听说过 MTU,而且我很难相信这是原因,的确如此。
- 我在连接 Pulse Secure VPN 时遇到问题,我正在尝试连接到内部自托管 Gitlab。
- 到常规互联网的 SSH 流量正常。
- 我使用的是 WSL2 Ubuntu 20.04,如果我将它放到 WSL1 中,一切都按预期工作(对于 Debian 也是如此)。
尝试先升级你的驱动程序,这对我不起作用。
首先打开一个 PowerShell 提示符并输入:
netsh interface ipv4 show subinterface
你会得到如下输出:
MTU MediaSenseState Bytes In Bytes Out Interface
------ --------------- --------- --------- -------------
4294967295 1 0 5974969 Loopback Pseudo-Interface 1
1500 1 2678641808 213293706 Wi-Fi
1500 5 0 0 Local Area Connection* 1
1500 5 0 0 Local Area Connection* 2
1500 1 0 529702 vEthernet (Default Switch)
1300 1 2106 509236 vEthernet (WSL)
1200 1 553027168 20290571 Local Area Connection* 13
1500 1 0 22759124 VirtualBox Host-Only Network #3
1500 5 0 0 Bluetooth Network Connection 4
密钥在Local Area Connection 13 MTU*(名称和值可以在机器之间更改),即VPN接口。就我而言,它是 1200,这就是原因
set MTU to 1350 (same as VPN interface):
sudo ifconfig eth0 mtu 1350
对我不起作用...而且我不知道如何获取 VPN 接口 MTU。
(我也讨厌安装ifconfig,它已被ip 弃用)。
现在我们知道了,您可以在具有提升权限的 PowerShell 中从 Windows 更改 VPN MTU,
netsh interface ipv4 set subinterface "Local Area Connection* 13" mtu=1400 store=persistent
如果您想跳过下一步,可以将其设置为 1500,但您没有为 VPN 包装数据包留下空间,例如我在使用 Github 时遇到了问题,因为将其设置为 1500。
然后,在您的 WSL2 发行版中,您可以通过以下方式检查您当前的 MTU 值:
❯ ip addr | grep mtu
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default qlen 1000
3: dummy0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN group default qlen 1000
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
5: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1000
我们关心 eth0(与 Windows 的虚拟以太网连接),您必须将匹配的 MTU 设置为您在上一步中离开的位置。
sudo ip link set eth0 mtu 1400
遗憾的是,每次您启动新的 VPN 会话、重新启动 WSL2,甚至从 WLAN 切换到 LAN 时,这两个设置都会被重置。