You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WSL2无法解析VPN后方主机名的配置求助

WSL2无法解析VPN后方主机名的配置求助

兄弟,我之前也碰到过一模一样的坑!WSL2的DNS配置在VPN场景下确实有点棘手,既然你已经确定是域名解析的问题,给你几个亲测有效的解决办法,你挨个试试:

方法一:锁定WSL2的DNS配置,优先使用VPN DNS

WSL2默认会自动生成并覆盖/etc/resolv.conf,这也是你手动修改后没效果的核心原因,咱们先把这个自动生成给关了:

  • 在WSL终端里执行sudo nano /etc/wsl.conf,如果文件不存在就直接创建
  • 在文件里添加以下内容:
[network]
generateResolvConf = false
  • 保存退出后,关闭所有WSL窗口,打开Windows的命令提示符(CMD),执行wsl --shutdown彻底重启WSL
  • 重新打开WSL终端,先删除原来的自动生成文件:sudo rm /etc/resolv.conf
  • 新建一个自定义的resolv.confsudo nano /etc/resolv.conf,把VPN的DNS服务器放在最前面:
nameserver 172.23.10.128
nameserver 8.8.8.8

这样设置后,WSL不会再自动覆盖DNS配置,而且会优先用VPN的DNS服务器解析公司内网域名,大概率能解决问题。

方法二:检查并修复WSL2的路由转发

有时候DNS请求发不到VPN的DNS服务器,是因为WSL2和Windows VPN之间的路由没打通:

  • 在Windows的PowerShell里执行Get-NetRoute,查看有没有指向公司内网网段的路由,下一跳是不是VPN的网关地址
  • 在WSL终端里执行ip route,确认公司内网网段的路由是不是指向Windows的WSL网关(一般是172.23.x.1这类地址)
  • 如果路由缺失,可以手动在WSL里添加,比如假设公司内网网段是192.168.1.0/24,Windows WSL网关是172.23.10.1,就执行:
    sudo ip route add 192.168.1.0/24 via 172.23.10.1

方法三:让WSL2直接复用Windows的DNS服务

如果上面的方法都不行,可以让WSL2把DNS请求直接转发给Windows,这样Windows能解析的域名,WSL2也能跟着解析:

  • 同样编辑/etc/wsl.conf,改成以下内容:
[network]
generateResolvConf = true
dnsProxy = true
  • 保存后重启WSL,这样WSL会自动同步Windows的DNS配置,包括VPN生效后的DNS服务器。

要是还是有问题,你可以在WSL里执行nslookup 你的公司主机名,看看返回的DNS服务器是不是你设置的VPN地址,这样能快速排查是DNS没生效还是其他路由问题。

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

火山引擎 最新活动