Ubuntu客户端无法解析本地Unbound服务器中的局域网主机
Ubuntu客户端无法解析本地Unbound服务器中的局域网主机
我太懂你这种头疼的感觉了——明明Unbound服务器本身能完美解析局域网里的短名主机,Android和Windows客户端都能用http://myserver:8080/正常访问,偏偏两台Ubuntu 23.04客户端死活不行,手动改了/etc/resolv.conf能好,但一待机或重启就被重置。别着急,这是因为Ubuntu 23.04默认用systemd-resolved管理DNS,直接改resolv.conf根本不持久,咱们用规范的方法来搞定它:
问题根源先搞清楚
你看到的127.0.0.53是systemd-resolved的本地DNS缓存服务,所有客户端的DNS请求都会先经过它。之前你的Ubuntu客户端没把查询转发给Unbound服务器,所以才会返回SERVFAIL错误。咱们的目标就是让systemd-resolved正确指向你的Unbound服务器,并且持久化配置。
方法一:通过NetworkManager修改单连接的DNS配置(适合笔记本等经常换网络的设备)
这个方法是针对当前的WiFi/有线连接单独设置,不会影响其他网络:
- 先用命令查看你的连接名称(比如你这里的
MYSSID):nmcli con show - 修改该连接的DNS服务器,指向你的Unbound和备用DNS:
sudo nmcli con mod "MYSSID" ipv4.dns "192.168.1.2,192.168.1.3" - 如果不需要之前的
Home搜索域(因为Unbound没配置这个域的解析),可以清空它:sudo nmcli con mod "MYSSID" ipv4.dns-search "" - 重启连接让配置生效:
sudo nmcli con down "MYSSID" && sudo nmcli con up "MYSSID" - 验证一下:用
resolvectl status查看连接的DNS配置,确认已经指向192.168.1.2,然后再dig myserver试试能不能解析。
方法二:全局配置systemd-resolved(适合固定台式机)
如果你的Ubuntu设备一直用这个局域网,直接全局修改systemd-resolved的配置更省事:
- 编辑
/etc/systemd/resolved.conf文件:sudo nano /etc/systemd/resolved.conf - 修改以下配置项(把注释去掉,改成对应的值):
[Resolve] DNS=192.168.1.2 192.168.1.3 # 不需要搜索域的话就注释掉或者设为空 # Domains=Home FallbackDNS= DNSSEC=no DNSOverTLS=no MulticastDNS=no LLMNR=no Cache=yes DNSStubListener=yes - 保存退出后,重启
systemd-resolved服务:sudo systemctl restart systemd-resolved - 验证:用
resolvectl status检查全局DNS配置,然后测试dig myserver或者直接访问http://myserver:8080/看是否正常。
额外验证小技巧
修改配置后,你可以先测试dig myserver @127.0.0.53,如果能返回正确的A记录,说明systemd-resolved已经把查询转发给Unbound了,之后直接用短名访问就没问题了。
备注:内容来源于stack exchange,提问作者user352472




