在wsl2推出了镜像网络模式之后,第一时间进行了试用,但之前就发现这个模式下,如果同时开启了代理的tun模式(fake-ip),会出现在wsl内无法正常上网的问题。测试方法如下,使用curl https://baidu.com -v
,观察发现一直卡在TLS握手阶段,无法正常链接,然后apt-get update
命令也会运行失败。
v2论坛上可以看到类似问题的反馈,参考WSL2 今天史诗级更新 - V2EX。
经过一系列的测试,今天终于发现了解决问题的办法,在这里分享一下。
原因定位
一句话解释,tun模式下的虚拟网卡的mtu值是9000,修改为1500就可以了。
修复方法
首先我们用ifconfig
查看wls2内的网卡,然后记下ip地址为198.18.0.1
的网卡的名字,如eth4
。
root用户身份,运行如下命令:echo -e "[Unit]\nDescription=clash tun mtu fix\nAfter=network-online.target\n\n[Service]\nExecStart=$(which ip) link set eth4 mtu 1500\n\n[Install]\nWantedBy=multi-user.target" | sudo tee /etc/systemd/system/mtufix.service
, 将eth4
修改为你上一步记下的名字,然后运行命令
systemctl enable mtufix.service
systemctl start mtufix.service
重新进行测试,此时发现已经可以正常联网了,google也可以正常连接。
Comments 2 条评论
博主 依云
博主 赫萝
@依云 修改tun的mtu也可以哈,因为我用的工具版本不支持直接修改mtu,如果是 meta内核的话是可以直接设置的