子域的 NS 记录不传播

子域的 NS 记录不传播

更新:已解决,在问题末尾回答

请问我是否做错了什么?或者在过去 3~4 年中 DNS 记录传播的实践是否发生了变化?我设置的子域的 NS 记录似乎没有传播到任何公共 DNS 服务器

我已经设置了一个新的子域,并计划将其 DNS 委托给特定的服务器。

这是通过在 whois.com 上为子域名设置 NS 记录来完成的

SOA 和 NS 记录都指向 whois.com

dig @8.8.8.8 SOA mydomain.com
;; ANSWER SECTION:
mydomain.com.          7200    IN      SOA     ns1.whois.com. someemail.someemail.com.

dig @8.8.8.8 NS mydomain.com
;; ANSWER SECTION:
mydomain.com.          21600   IN      NS      ns2.whois.com.
mydomain.com.          21600   IN      NS      ns4.whois.com.
mydomain.com.          21600   IN      NS      ns3.whois.com.
mydomain.com.          21600   IN      NS      ns1.whois.com.

我已经为想要使用的名称服务器设置了子域名记录

dig @8.8.8.8 ns.mydomain.com.
;; ANSWER SECTION:
ns.mydomain.com.       28800   IN      A       88.22.66.11

设置子域名的 NS 记录后,whois.com 服务器上的内容如下所示

dig @whois.com SOA subdomain.mydomain.com  #both query came back the same
dig @whois.com NS  subdomain.mydomain.com
;; QUESTION SECTION:
;subdomain.mydomain.com.             IN      SOA

;; AUTHORITY SECTION:
subdomain.mydomain.com.      38400   IN      NS      ns.mydomain.com.

;; ADDITIONAL SECTION:
ns.mydomain.com.       28800   IN      A       88.22.66.11

所以我认为设置已经正确了。

然而我已经等了两天多了,似乎没有其他公共 DNS 服务器发现这个问题,我也尝试了其他的,比如 1.1.1.1 和 cisco 名称服务器

dig @8.8.8.8 NS subdomain.mydomain.com
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 38946
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;subdomain.mydomain.com.            IN      NS

我记得 3~4 年前我曾为另一个子域名做过同样的设置,但 ns 服务器后来退役了,而我从未更改过任何 DNS 记录,于是我尝试检查另一个域名

dig @8.8.8.8 NS oldsubdomain.mydomain.com
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;oldsubdomain.mydomain.com.            IN      NS

dig @whois.com NS  oldsubdomain.mydomain.com
;; QUESTION SECTION:
;oldsubdomain.mydomain.com.             IN      SOA

;; AUTHORITY SECTION:
oldsubdomain.mydomain.com.      38400   IN      NS      ns2.mydomain.com.

;; ADDITIONAL SECTION:
ns2.mydomain.com.       28800   IN      A       88.22.66.112

奇怪的是,除了 whois.com 名称服务器之外,该记录似乎也从其他公共 DNS 服务器中消失了。

回答

事实证明,named 没有在实际网络接口上监听 ipv4 上的端口 53

[]# 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
;;have answer
#assume 123.123.123.123 is public IP of server
dig @123.123.123.123 subdomain.mydomain.com
;;time-out no answer

我通过将公共 IP 添加到 named.conf 来修复

listen-on port 53 { 127.0.0.1; 123.123.123.123; };

所以以前因为 ns.mydomain.com 服务器没有回答任何 dns 查询,所以这是主要问题。

我的困惑在于我把 ns 记录和 soa 记录搞混了,我以为设置子域名的 NS 记录,SOA 就已经到位了,但实际上这需要来自 NS 服务器。而我的 NS 服务器由于 SOA 查询失败而无法在绑定时使用 nsupdate,这导致我自己的调查出现了一些循环逻辑。

答案1

首先,SOA 记录和 NS 记录是不同类型的记录。

来自上游的 NS 记录委托其他名称服务器来回答子域的 DNS 查询。

SOA实际上告诉了特定域的权威起点是什么。

在我的例子中,我还必须设置 named 以响应 SOA 查询,我通过设置 named 的区域文件来这样做。区域文件包含 subdomain.mydomain.com 的 SOA 和 A 记录。

我错误地认为我应该使用 nsupdate 来排除故障,因为当 nsupdate 找不到来自服务器默认 DNS(即 8.8.8.8)的 SOA 记录时,它会阻塞。对我来说,整个事情变得非常循环。

实际问题是没有服务器能够从我设置的名称服务器 ns.mydomain.com 查询 SOA。

这是通过在 ns.mydomain.com 服务器上运行以下 dig 和 netstat 命令发现的

dig @127.0.0.1 subdomain.mydomain.com
;;have answer
#assume 123.123.123.123 is public IP of server
dig @123.123.123.123 subdomain.mydomain.com
;;time-out no answer

[]# 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

仔细检查 netstat 输出后发现,端口 53 仅在所有 ipv6 接口和 127.0.0.1 ipv4 本地环回上进行监听,但没有在任何其他 ipv4 接口上进行监听。

要更改此行为的配置,请修改named.conf中的以下行

listen-on port 53 { 127.0.0.1; 123.123.123.123; };

添加公有 IP 后,该名称也能正确监听来自 ipv4 接口的请求

相关内容