Bind9服务运行正常但DNS服务器本机无法解析域名并ping通主机的问题求助
嘿,我来帮你排查这个问题!从你的描述来看,局域网内其他机器都能正常通过Bind9解析域名,唯独DNS服务器自己不行,这大概率是本机的DNS解析服务和Bind9的监听配置不匹配导致的,咱们一步步来解决:
1. 修正Bind9的监听地址配置
看你给出的/etc/bind/named.conf.options里,listen-on只设置了192.168.0.0/24,这意味着Bind9只监听局域网网卡的请求,没监听本地回环接口(127.0.0.1)。而你的DNS服务器本机默认是通过127.0.0.53(systemd-resolved的缓存服务)发起DNS请求的,自然连不上Bind9。
修改这个配置:
sudo nano /etc/bind/named.conf.options
把listen-on改成同时包含回环和局域网地址:
listen-on { 127.0.0.1; 192.168.0.0/24; };
保存后重启Bind9服务:
sudo systemctl restart bind9
2. 配置systemd-resolved正确转发请求到Bind9
Ubuntu 22.04默认用systemd-resolved管理DNS解析,它会先缓存请求再转发到配置的DNS服务器。虽然你在netplan里设置了指向本机的DNS,但有时候需要手动确认resolved的配置:
编辑resolved的配置文件:
sudo nano /etc/systemd/resolved.conf
确保以下配置项正确设置(去掉前面的注释符号):
[Resolve] DNS=192.168.0.211 Domains=ent.com
保存后重启resolved服务:
sudo systemctl restart systemd-resolved
3. 验证配置是否生效
先检查Bind9是否已经监听回环地址:
sudo ss -tulpn | grep named
输出里应该能看到127.0.0.1:53和192.168.0.211:53的监听记录,说明Bind9已经在回环接口上提供服务了。
然后测试本机的解析:
nslookup webserver ping webserver
如果还是有问题,可以直接指定Bind9地址测试,确认Bind9本身没问题:
nslookup webserver 192.168.0.211
如果这个命令能返回正确的IP,那就是resolved的配置还没生效,你可以尝试重启机器,或者手动修正resolv.conf的指向:
sudo rm /etc/resolv.conf sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
小提醒:反向区域文件名的笔误
看你贴的配置里,反向区域文件写的是/etc/bind/forward.ent.com,但反向区域应该对应reverse.ent.com吧?不过你说checkzone没问题,可能是粘贴时的笔误,这个如果不影响反向解析的话暂时不用管,但建议后续确认一下文件名是否正确。
按照上面的步骤操作后,你的DNS服务器本机应该就能正常解析域名了!
备注:内容来源于stack exchange,提问作者Ilya Shmadchenko

