V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kuingsmile
V2EX  ›  程序员

wsl2 镜像网络模式与 clash tun 模式冲突的解决方案

  •  2
     
  •   kuingsmile ·
    Kuingsmile · 157 天前 · 2815 次点击
    这是一个创建于 157 天前的主题,其中的信息可能已经有所发展或是发生改变。

    参考 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
    
    12 条回复    2024-05-11 12:03:28 +08:00
    zuotun
        1
    zuotun  
       157 天前
    解决方案是别用镜像模式, 宿主机都访问不了虚拟机的端口....
    docker 暴露一个端口, WSL 用 Windows 对外 IP 可以访问, Windows 用相同 IP 或者 127 都不通, 这算什么事?
    不仅如此, 还连带我其他 Windows 上直接起的也不行, node 项目唤起浏览器然后 localhost:3000 不通....
    我甚至都没开什么 clash, 关闭镜像网络重启之后就好了, 过程中 Docker Desktop 会断开连接别的也没什么.
    Jat001
        2
    Jat001  
       157 天前


    无法复现,不知道是不是修了,还是因为我用的 fake-ip 地址不一样

    CFW 0.20.39
    WSL 2.0.14
    Jat001
        3
    Jat001  
       156 天前
    多次测试后发现确实 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
    Jat001
        4
    Jat001  
       156 天前
    @Jat001 #3 又测试了下,在 wsl 启动后再打开 tun mode 会导致 wsl 内无法联网,所以没必要纠结热插拔的问题了
    Clouder1
        5
    Clouder1  
       149 天前
    解决了,赞。
    奇怪的是这个问题在我的设备上是突然出现的,之前一段时间开 mirrored mode 和 Clash Tun mode 也没遇到这个情况,今天突然连不上网了.
    rozbo
        6
    rozbo  
       134 天前
    真灵!这你是怎么发现的!
    arc9un
        7
    arc9un  
       89 天前
    还有一种解决方法
    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 。设置完后记得重启电脑生效。
    srwxyz
        8
    srwxyz  
       65 天前 via iPhone
    @zuotun 同感,已切默认模式,自己配路由都比这玩意好使
    hxf168482
        9
    hxf168482  
       50 天前
    今天发现在 mirror 模式下,mvn install 无法下载 jar 包,发现原来是这个问题,点赞。
    Nolca
        10
    Nolca  
       45 天前
    似乎镜像模式也能从 windows 访问 wsl 内端口,参考 https://github.com/microsoft/WSL/issues/10632
    不过我目前还没成功,成功了再回复。
    Nolca
        11
    Nolca  
       45 天前
    最后还是 networkingMode=NAT ,mirrored 目前不能 windows 到 wsl
    lllei
        12
    lllei  
       7 天前
    @Nolca <https://learn.microsoft.com/en-us/windows/wsl/networking> 中有提到解决方案:

    ```powershell
    Set-NetFirewallHyperVVMSetting -Name '{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}' -DefaultInboundAction Allow
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1536 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 17:08 · PVG 01:08 · LAX 10:08 · JFK 13:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.