参考 https://www.v2ex.com/t/975098?p=2 中有人提到的,同时设置了 wsl2 镜像网络模式和 clash 的 tun 模式之后,wsl2 内的 https 访问会无法连接的问题。
经过测试发现原因是由于 clash 的 tun 模式默认 MTU 为 9000 ,修改为 1500 就正常了。
先使用命令ifconfig
,查找 ip 地址为198.18.0.1
的网卡的名字,比如eth4
,然后 root 用户执行ip link set eth4 mtu 1500
就可以了。
想开机自动执行的话,在/etc/systemd/system
目录下添加一个文件mtufix.service
,内容:
[Unit]
Description=clash tun mtu fix
After=network-online.target
[Service]
ExecStart=/usr/sbin/ip link set eth4 mtu 1500
[Install]
WantedBy=multi-user.target
然后执行
systemctl enable mtufix.service
systemctl start mtufix.service
1
zuotun 2023-12-13 17:25:27 +08:00
解决方案是别用镜像模式, 宿主机都访问不了虚拟机的端口....
docker 暴露一个端口, WSL 用 Windows 对外 IP 可以访问, Windows 用相同 IP 或者 127 都不通, 这算什么事? 不仅如此, 还连带我其他 Windows 上直接起的也不行, node 项目唤起浏览器然后 localhost:3000 不通.... 我甚至都没开什么 clash, 关闭镜像网络重启之后就好了, 过程中 Docker Desktop 会断开连接别的也没什么. |
2
Jat001 2023-12-13 23:15:35 +08:00
|
3
Jat001 2023-12-14 01:18:13 +08:00
多次测试后发现确实 mtu 会影响 wsl 内的网速,有时候会导致连接超时
另外 systemd-networkd 也可以管理网络设置,配置文件还更简单 /etc/systemd/network/10-eth7.network ``` [Match] Name=eth7 [Link] MTUBytes=1500 ``` 理论上这样设置后每次开启 tun mode ,networkd 都会重新设置 eth7 的 mtu ,不像 systemd service 只会运行一次 不过 networkd 有个 bug ,就是热插拔的设备不会在接入后重新配置,看 github 已经修了,不知道是不是我这系统里的 systemd 太老了 https://github.com/systemd/systemd/pull/22540 |
4
Jat001 2023-12-14 03:47:57 +08:00
@Jat001 #3 又测试了下,在 wsl 启动后再打开 tun mode 会导致 wsl 内无法联网,所以没必要纠结热插拔的问题了
|
5
Clouder1 363 天前
解决了,赞。
奇怪的是这个问题在我的设备上是突然出现的,之前一段时间开 mirrored mode 和 Clash Tun mode 也没遇到这个情况,今天突然连不上网了. |
6
rozbo 349 天前
真灵!这你是怎么发现的!
|
7
arc9un 303 天前
还有一种解决方法
https://github.com/clash-verge-rev/clash-verge-rev/issues/329 把 CFW 换成 clash-verge-rev(目前还在更新),clash-verge-rev 有个 merge 功能支持直接设置 tun 的 mtu 。 直接在订阅里新建一个 merge ,加上 ``` tun: mtu: 1500 ``` 这样不用在 wsl 里设置什么东西,就能设置 tun 虚拟网卡的 mtu 。设置完后记得重启电脑生效。 |
9
hxf168482 265 天前
今天发现在 mirror 模式下,mvn install 无法下载 jar 包,发现原来是这个问题,点赞。
|
10
Nolca 260 天前
似乎镜像模式也能从 windows 访问 wsl 内端口,参考 https://github.com/microsoft/WSL/issues/10632
不过我目前还没成功,成功了再回复。 |
11
Nolca 260 天前
最后还是 networkingMode=NAT ,mirrored 目前不能 windows 到 wsl
|
12
lllei 222 天前
@Nolca <https://learn.microsoft.com/en-us/windows/wsl/networking> 中有提到解决方案:
```powershell Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow ``` |
13
JuzerQ 188 天前
只要 mtu 改成 1500 就行了吗,v2rayN 设置里面可以设置 tun 模式的 mtu 值
![]( https://imgur.com/a/6B5Mzt2) |