WireGuard VPN无法解析本地域名的问题排查与配置求助
我目前的网络环境是这样的:用一台Ubuntu 22.04.1 LTS服务器跑wg-easy,用Portainer来管理Docker容器;Windows 11客户端连上WireGuard服务器后,既能正常访问互联网,也能访问本地局域网的设备。本地局域网里还有另一台Ubuntu 22.04.1 LTS服务器,同样用Docker跑AdGuard Home作为DNS解析服务。
现在遇到了一个头疼的问题:当我从远程网络连VPN时,用AdGuard DNS重写页面里配置的主机名,不管是通过SSH、HTTP/HTTPS还是ICMP(Ping)访问,都会出现DNS解析失败的情况——浏览器会报ERR_NAME_NOT_RESOLVED,SSH或Ping则提示无法解析主机名/找不到目标主机。但奇怪的是,用nslookup查询时,明明显示使用的是AdGuard服务器的IP,而且能正常解析出对应的主机名,这点和某SuperUser帖子的情况不一样,所以那个帖子的解决方法对我没用。
还有个例外情况,可能指向是AdGuard的问题而非WireGuard:只有AdGuard服务器本身的主机名能通过HTTP/HTTPS、SSH、Ping正常访问,其他服务器哪怕在AdGuard里配置了完全一样的域名规则,都没法用域名访问。另外还有个细节:正向DNS查询没问题,但反向解析不行,nslookup没法把解析出来的IP转回对应的主机名。
简单来说就是:我能正常上网,也能通过IP地址访问本地局域网的设备,但就是没法用主机名访问这些设备。
我的WireGuard客户端配置如下:
[Interface] PrivateKey = <my private key> Address = 10.8.0.3/24 DNS = 192.168.68.105 // 这是AdGuard服务器的本地IP [Peer] PublicKey = <my public key> PresharedKey = <my pre-shared key> AllowedIPs = 0.0.0.0/0, ::/0, 192.168.68.105/32 Endpoint = <my home router's public domain name>:51820
我之前看到Reddit的一个老帖子,建议把192.168.68.105/32加到AllowedIPs列表里,确保DNS流量走VPN,我照做了但问题还是没解决。我知道这是拆分隧道的配置,也确认过wg-easy默认的10.8.0.x网段和本地的192.168.68.0/24网段没有冲突。
我还分别进入了wg-easy容器和AdGuard容器的终端排查:wg-easy容器能正常访问AdGuard服务器,但反过来AdGuard容器没法访问wg-easy——不过Docker容器默认的出入网规则就是这样,应该不是问题。另外,我试过在客户端的/etc/hosts文件里手动映射IP和主机名,这能解决问题,但这只是治标不治本,而且要给每台用VPN的设备都这么配置,实在太麻烦了。还有个细节:WireGuard容器用的是Portainer配置的栈网络,而AdGuard容器是network: host模式,和宿主机共用IP地址。
补充两个排查信息:
- 后来我连了一台随便的网络设备,在AdGuard里加了DNS映射,结果VPN下还是只能用IP Ping通,确实只有AdGuard自己的主机名能正常解析(说真的有点自恋了😂)
- 用
ipconfig /all查看后发现,我的默认WiFi适配器和WireGuard适配器的“Connection-specific DNS Suffix”都是空的
有没有大佬能帮我调整一下网络配置,让我从远程网络连VPN时,也能用本地设备的主机名访问它们?
备注:内容来源于stack exchange,提问作者A. P. Roblem

