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

WSL/Ubuntu连接Trident VPN后DNS被阻断,无法访问任何网络

WSL/Ubuntu连接Trident VPN后DNS被阻断,无法访问任何网络

这种情况我之前帮同事排查过,大概率是Trident这类企业级VPN接管Windows网络配置后,干扰了WSL的DNS解析流程——毕竟WSL默认和Windows共享网络栈,但VPN的规则没适配WSL的特殊情况,咱们一步步来解决:

先确认问题根源

连VPN之后,先在WSL里跑个命令看看DNS配置是不是被覆盖了:

cat /etc/resolv.conf

如果输出里的DNS服务器不是你之前设的8.8.8.8,而是VPN推送的地址,那基本就是VPN强制替换了WSL的DNS配置,导致公共域名解析失败;要是DNS还是8.8.8.8但ping域名不通,那可能是VPN防火墙拦截了WSL到公共DNS的请求。

解决方案一:强制WSL锁定自定义DNS,不受VPN干扰

这是最常用的解决办法,核心是让WSL的DNS解析完全独立于Windows的VPN配置:

  • 编辑/etc/systemd/resolved.conf,把配置改成这样(重点关注最后一行):
    [Resolve]
    DNS=8.8.8.8 8.8.4.4
    FallbackDNS=
    Domains=
    #LLMNR=no
    #MulticastDNS=no
    #DNSSEC=no
    #DNSOverTLS=no
    #Cache=no-negative
    DNSStubListener=no
    
    把DNSStubListener设为no,就能阻止systemd-resolved创建干扰DNS的Stub监听。
  • 重启resolved服务:
    sudo systemctl restart systemd-resolved
    
  • 修复resolv.conf的软链接(WSL经常会自动覆盖这个文件):
    sudo mv /etc/resolv.conf /etc/resolv.conf.bak
    sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
    
  • 彻底关闭WSL(别只关终端),在Windows PowerShell里运行:
    wsl --shutdown
    
    重新打开WSL并连接VPN,再试试ping github.com,应该就能正常解析了。

解决方案二:适配VPN的DNS规则(如果VPN禁止公共DNS)

要是公司的VPN防火墙严格禁止访问公共DNS(比如8.8.8.8),那只能用VPN分配的DNS:

  • 在Windows PowerShell里连接VPN后,运行ipconfig /all,找到Trident VPN适配器的「DNS服务器」地址并记下来。
  • 在WSL里编辑/etc/resolv.conf,把DNS改成刚才记录的VPN地址,比如:
    nameserver 10.xxx.xxx.xxx
    nameserver 10.xxx.xxx.xxy
    
  • 同样执行wsl --shutdown重启WSL,再测试访问。

解决方案三:排查路由/防火墙拦截

要是上面两种方法都不行,先测试IP连通性:

ping 140.82.112.3  # github的公共IP之一

如果能ping通,那还是DNS的问题;如果ping不通,说明VPN的路由规则阻止了WSL的流量,这时候需要在Windows端检查Trident VPN的设置,看看是不是允许WSL的子网(一般是172.16.x.x或192.168.x.x段)访问外部网络,或者有没有防火墙规则把WSL的流量当成「未授权」给拦截了。

为啥Windows本身没问题?因为企业级VPN客户端会专门适配Windows的网络栈,自动更新DNS和路由规则,但WSL的网络是基于Windows的虚拟化子网,VPN厂商可能没做适配,就导致WSL的流量被误拦截了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 14:08:03