You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WSL2 Ubuntu环境下连接VPN时如何维持与VcXserv/Xming的连接?

WSL2 Ubuntu环境下连接VPN时如何维持与VcXserv/Xming的连接?

我之前也碰到过完全一样的困扰!公司的Cisco AnyConnect VPN为了安全把所有网络流量都走VPN隧道,结果WSL2里的GUI程序直接连不上Windows主机上的VcXserv了。后来折腾出了几个实用的解决办法,你可以试试:

核心思路

问题根源在于VPN连接后,WSL2的默认路由被修改成了VPN网关,导致原本通往Windows主机(VcXserv所在)的流量也被强行走VPN隧道,自然就断连了。我们要做的就是给Windows主机的IP添加一条静态路由,让这部分流量不走VPN,直接走WSL和Windows之间的虚拟网卡。

具体操作步骤

  1. 找到Windows主机在WSL中的内网IP
    在WSL的终端里执行:

    cat /etc/resolv.conf
    

    输出里的nameserver后面的IP就是Windows主机的内网地址(一般是172.x.x.x或192.168.x.x这类),记下来,比如假设是172.28.128.1。

  2. 添加静态路由
    还是在WSL终端里,执行这条命令(把<Windows_IP>换成你刚才记下的IP):

    sudo ip route add <Windows_IP>/32 dev eth0
    

    这条命令的意思是:所有发往Windows主机的流量,都通过WSL的默认虚拟网卡eth0传输,不走VPN隧道。

  3. 验证是否生效
    先连接VPN,然后尝试启动Firefox之类的GUI程序,应该就能正常连接VcXserv了。也可以用ping <Windows_IP>测试,能ping通就说明路由生效了。

  4. 让路由持久化(可选)
    因为WSL重启后这条静态路由会消失,如果你不想每次都手动加,可以把命令加到你的shell配置文件里:

    • 如果你用bash,编辑~/.bashrc,在末尾加上:
      WIN_IP=$(grep nameserver /etc/resolv.conf | awk '{print $2}')
      sudo ip route add $WIN_IP/32 dev eth0
      
    • 如果你用zsh,就编辑~/.zshrc,内容一样。
      这样每次启动WSL时,脚本会自动获取Windows的IP并添加路由,省得手动操作。

额外注意事项

  • 如果公司VPN强制开启了全隧道模式(不允许拆分流量),可能上面的方法暂时没用。这时候可以试试联系IT部门,问问能不能给你的账号开启拆分隧道权限,让内网流量走VPN,而WSL到Windows的本地流量不走。
  • 要是Windows的虚拟IP偶尔变化(比如重启后),上面的脚本会自动获取最新的IP,不用担心失效。

备注:内容来源于stack exchange,提问作者Zorak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:04:31