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之间的虚拟网卡。
具体操作步骤
找到Windows主机在WSL中的内网IP
在WSL的终端里执行:cat /etc/resolv.conf输出里的
nameserver后面的IP就是Windows主机的内网地址(一般是172.x.x.x或192.168.x.x这类),记下来,比如假设是172.28.128.1。添加静态路由
还是在WSL终端里,执行这条命令(把<Windows_IP>换成你刚才记下的IP):sudo ip route add <Windows_IP>/32 dev eth0这条命令的意思是:所有发往Windows主机的流量,都通过WSL的默认虚拟网卡
eth0传输,不走VPN隧道。验证是否生效
先连接VPN,然后尝试启动Firefox之类的GUI程序,应该就能正常连接VcXserv了。也可以用ping <Windows_IP>测试,能ping通就说明路由生效了。让路由持久化(可选)
因为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并添加路由,省得手动操作。
- 如果你用bash,编辑
额外注意事项
- 如果公司VPN强制开启了全隧道模式(不允许拆分流量),可能上面的方法暂时没用。这时候可以试试联系IT部门,问问能不能给你的账号开启拆分隧道权限,让内网流量走VPN,而WSL到Windows的本地流量不走。
- 要是Windows的虚拟IP偶尔变化(比如重启后),上面的脚本会自动获取最新的IP,不用担心失效。
备注:内容来源于stack exchange,提问作者Zorak
相关产品推荐
相关产品推荐

