我从我的 Windows 10 Pro(10.0.19042 Build 19042)机器访问两个 Meraki VPN:
- 一个不在 NAT 后面的 – 当我打开它时,我可以做
git clone [...]
或者git fetch [...]
做得很好。 - 第二,它位于 NAT 后面 - 当我打开它并运行时
git fetch
,我收到错误消息:“致命:无法访问‘https://bitbucket.org/[project]/[project-name].git/’:gnutls_handshake() 失败:拉取功能出错。“
为了使第二个 VPN 正常工作,我在 PowerShell 中执行了以下命令:
Set-ItemProperty -Path "HKLM:SYSTEM\CurrentControlSet\Services\PolicyAgent" -Name "AssumeUDPEncapsulationContextOnSendRule" -Type DWORD -Value 2 –Force;
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v AllowL2TPWeakCrypto /t REG_DWORD /d 1 /f
reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters" /v ProhibitIpSec /t REG_DWORD /d 0 /f
还需要禁用 IPv6。
这使得 VPN 可以在 Windows 上运行,但不能在 WSL2 内的 Linux 上运行。有什么建议吗?非常感谢!
答案1
问题在于 WSL2 MTU 大小下的 VPN MTU 与 Linux 不匹配。
可以通过两个命令来识别:
Windows PowerShell(以管理员身份运行)
netsh interface ipv4 show subinterfaces
注意第一行 - 它显示了您的 VPN 允许的 MTU 有多大。
Linux(WSL2 内部)控制台
ip addr
注意以“eth0”开头的行 - 它的 MTU 必须匹配或低于上面的 MTU。
就我而言,Linux 中的 MTU 更高。
解决方案
以下命令可以立即解决问题:
sudo ip link set dev eth0 mtu 1400
(更新 MTU 值以适合您的 VPN)
我已将其放入我的帐户中~/.bashrc
,并将 NOPASSWD 放入sudoers 中。/usr/sbin/ip
更好的解决方案
到目前为止,我还没有设法使用任何标准 Linux 工具在 WSL2 内部的 Linux 启动时更改 MTU(因此避免将其放入 .bashrc)。
rc-local
在 WSL2 下不起作用/etc/dhcp/dhcpclient.conf
不会传播default interface-mtu
变化supersede interface-mtu
netsh interface ipv4 set subinterface "vEthernet (WSL)" mtu=1400 store=persistent
不影响 Linux/etc/netplan
无法在 WSL2 中运行
如果你找到了方法,我会非常高兴将它带到这里!
答案2
我的解决方案是:
sudo ip link set dev eth0 mtu 1350
不是:
sudo ip link set dev eth0 mtu 1400
通过降低 MTU 值进行测试以适应您的网络设置。