子域名NS记录无法在公共DNS服务器生效的问题求助(已解决)
最近遇到个头疼的问题——我设置的子域名NS记录,过了两天都没在任何公共DNS服务器上生效,想问问是不是我哪里操作错了,还是这三四年间DNS传播的规则变了?
我本来想把一个子域名的DNS解析权委托给特定服务器,步骤是这样的:
- 在whois.com上给主域名设置了NS和SOA记录,指向whois.com的服务器,用
dig @8.8.8.8 SOA mydomain.com和dig @8.8.8.8 NS mydomain.com查询都正常返回结果; - 给要用来做子域名NS的主机
ns.mydomain.com设置了A记录,dig @8.8.8.8 ns.mydomain.com能查到对应的IP(88.22.66.11); - 在whois.com的服务器上给子域名
subdomain.mydomain.com设置了NS记录,指向ns.mydomain.com,用dig @whois.com NS subdomain.mydomain.com查询能看到正确的权威记录和附加段的A记录。
但等了两天多,用8.8.8.8、1.1.1.1这些公共DNS查subdomain.mydomain.com的NS记录,返回的都是SERVFAIL,连三四年前设置的另一个子域名oldsubdomain.mydomain.com的NS记录也从公共DNS上消失了,只有whois.com自己的服务器能查到。
折腾半天终于找到原因了!原来是我的NS服务器(ns.mydomain.com)上的named服务只监听了127.0.0.1的53端口,没在公网IP上监听!
用netstat -tulpn查看端口监听情况,结果显示:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 29722/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 29722/named tcp6 0 0 :::80 :::* LISTEN 29722/named tcp6 0 0 ::1:953 :::* LISTEN 29722/named udp 0 0 127.0.0.1:53 0.0.0.0:* 29722/named udp 0 0 0.0.0.0:5353 0.0.0.0:* 9134/avahi-daemon: udp6 0 0 ::1:53 :::* 29722/named
本地用dig @127.0.0.1 subdomain.mydomain.com能查到结果,但用服务器公网IP(假设是123.123.123.123)查询dig @123.123.123.123 subdomain.mydomain.com就超时没响应。
解决方法很简单,修改named.conf配置文件,把服务器的公网IP加入监听列表:
listen-on port 53 { 127.0.0.1; 123.123.123.123; };
这里我之前混淆了NS记录和SOA记录的关系——以为设置了子域名的NS记录就自带SOA了,其实SOA记录是要由指定的NS服务器提供的。而我的NS服务器因为没监听公网端口,根本无法响应公共DNS的查询请求,导致整个解析链断了,自然公共DNS上就看不到子域名的NS记录了。
备注:内容来源于stack exchange,提问作者Jimmy Chi Kin Chau

