NAT 背后的 Meraki VPN 破坏了 Windows 10 上 WSL2(Ubuntu 20)上的 Bitbucket Git

NAT 背后的 Meraki VPN 破坏了 Windows 10 上 WSL2(Ubuntu 20)上的 Bitbucket Git

我从我的 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 值进行测试以适应您的网络设置。

相关内容