本人使用WSL2已有一段时间,近日在学习linux5.0新内核的UDP GRO功能时,偶尔发现WSL2在NAT模式下eth0的MTU值默认只有1420,顺便检查了一下Vmware和VirtualBox虚拟机,发现其NAT模式下以太网卡的MTU默认都是1500。感觉WSL2有点怪异,NAT从不涉及数据包的二次封装,怎么会莫名其妙降低MTU呢,手工将其改为1500,似乎也没出现不良症状。好奇之下,网上搜了一下相关资料,WSL2(NAT)降低默认MTU,居然和所在Windows主机上的VPN有关。综合网上资料,最初WSL2(NAT)的MTU也是1500,后来发现不能顺利访问主机VPN网络,便将其改为1280(IPv6最小MTU),再后来考虑WSL2内部有时也需要跑VPN,导致该VPN的MTU小于1280,内部VPN上不能跑IPv6,这才把WSL2(NAT)的MTU改到了1420(wg的默认MTU),而且理论上为了让WSL2(NAT)能顺利访问主机VPN网络,WSL2(NAT)的MTU不应超过主机VPN。所以针对不同的VPN,如发现网络访问不正常,还需要进一步缩小WSL2(NAT)的MTU。我也试着在Windows主机上启用了wg(AllowedIPs = 0.0.0.0/1,128.0.0.0/1),WSL2(NAT)在MTU=1500的情况下确实会出现ssh不能连接的问题,进一步测试发现在启用wg的kill-switch功能后(AllowedIPs = 0.0.0.0/0),即使MTU=1420也必定会出现无法访问互联网现象。网上有位老外对WSL2(NAT)和主机VPN相互之间的影响分析得比较全面,网络访问异常主要由3个原因引起,分别是MTU、路由和DNS,但由于只考虑了WSL2的NAT,分析未免不够透彻。本人同时对比了Vmware和VirtualBox下NAT和主机VPN的互动,做了进一步的分析,有助于更深刻地了解虚拟机的NAT模式,特此记录,以免遗忘。
一、MTU问题
对于ICMP和UDP数据包,WSL2(NAT)的网关(