有没有办法使用 DiG 或 nslookup 来确定服务器设置为主服务器还是从服务器?如果服务器是从服务器,则返回主服务器的 IP 地址?
答案1
据我所知,答案是否定的——肯定没有标准方法,因为有十亿种不同的 DNS 服务器变体。一种选择是有一个“masterdns.mydomain.com”记录,保证包含主服务器的 IP 地址(甚至不要暴露它,没有必要)——然后您需要做的就是将 DNS 服务器的 IP 与它提供给您的主服务器的 IP 进行比较,一切就绪了。这也是不完美的,因为有别名/多宿主/等等(您不能保证它是不同的服务器),但是……
.. 你似乎暗示你自己设置这一切,在这种情况下你应该只需要 masterdns.mydomain.com 记录。
答案2
不,没有办法。DNS 协议没有提供任何从外部了解主/从关系的功能。
而且,这种区别如今已不复存在。许多域只有主域,并在一个公共数据库上同步。
您可以使用启发式方法(参见 Maas 的建议或使用序列号的增加,第一个增加的名称服务器将成为主服务器)但它们显然不可靠。
答案3
首先,从技术上讲,DNS 服务器不一定是主服务器或从服务器。这可能因域而异。它可能对某些域是主服务器,而对其他域则是从服务器。
如果域名的 DNS 区域配置正确 - 那么您可以请求该区域的 SOA 记录,其中(除其他外)包含主 DNS 服务器(主服务器)的主机名。
例如:
C:\>nslookup
Default Server: UnKnown
Address: 192.168.1.1
> set type=SOA
> google.com.
Server: UnKnown
Address: 192.168.1.1
Non-authoritative answer:
google.com
primary name server = ns1.google.com
responsible mail addr = dns-admin.google.com
serial = 1396486
refresh = 7200 (2 hours)
retry = 1800 (30 mins)
expire = 1209600 (14 days)
default TTL = 300 (5 mins)
您现在可以对主服务器名称(从 SOA 记录 - 在本例中为“ns1.google.com”)进行另一次查找,以获取主服务器的 IP 地址:
C:\nslookup ns1.google.com.
Server: UnKnown
Address: 192.168.1.1
Non-authoritative answer:
Name: ns1.google.com
Address: 216.239.32.10
本例中的答案是 216.239.32.10
答案4
该命令dig -t SOA your-url
将在 ANSWER 部分返回权威服务器,然后如果您愿意,您可以获得dig authoritative-server-url
IP。或者您可以使用host -t SOA your-url
和host authoritative-server-url
获得更简洁的响应。