语境
我打算使用 Technitium 设置本地 DNS 服务器,并希望验证本地 DNS 服务器在查询域时返回正确的响应。它在使用时不起作用nslookup mydomain.com
。我希望这是因为本地 dns 服务器无法从公共/互联网位置访问。
为了排除这是由于我的本地 DNS 服务器(本地)无法正常工作引起的,我想验证至少本地 DNS 服务器在查询我的域时返回正确的 IP 地址。
尝试
本地 DNS 服务器127.0.0.1
在端口的本地 IP 地址上运行,5379
因此我尝试了以下命令及其各自的输出:
nslookup 127.0.0.1 somedomain.com
;; connection timed out; no servers could be reached
nslookup 127.0.0.1:5379 somedomain.com
nslookup: couldn't get address for 'somedomain.com': failure
nslookup http://127.0.0.1:5379 somedomain.com
;; connection timed out; no servers could be reached
nslookup https://127.0.0.1:5379 somedomain.com
;; connection timed out; no servers could be reached
所以要么测试命令nslookup 127.0.0.1:5379 somedomain.com
是一种可能的方式来测试本地DNS服务器在查询某个域时是否返回正确的IP地址,而我没有正确设置本地DNS服务器,或者我使用了不正确的测试命令。
问题
如何测试本地 DNS 服务器的响应在查询域时是否返回正确的 IP 地址(从托管 DNS 服务器的设备)?
您的 nslookup 语法是向后的:服务器在域名之后。
您不能使用 Windows 的 nslookup 指定自定义端口。(虽然它有一个隐藏
-port=
选项,但不幸的是它被忽略了。)URL 在这里不起作用:DNS 不是基于 HTTP 的。(有一个在 HTTP 中携带 DNS 消息的规范,但它需要特殊的客户端和服务器。)
如果您有 Linux 或一些可用的 BSD(适用于 Linux 的 Windows 子系统也可以使用),则有更多种类的工具,例如
dig
、drill
或delv
. 例如:正如一些人所指出的,这个答案的弱点是 ping 解析并不能证明您的 DNS 服务器已回答。它只是证明某些 DNS 服务器做到了。假设您无法从 nslookup 切换到支持指定端口的其他命令(如本答案中所建议的那样),那么我会看到两个可能对您有所帮助的选项:
关闭您的 DNS 服务器,这样它肯定不会响应。尝试 ping,如果它没有返回任何内容,但在您打开服务器时确实提供了结果,那么它正在工作。弱点:如果互联网可以解析地址,它将无法工作。
拔下网线。确认您无法访问任何东西(因此您知道您没有 WiFi 连接或类似的东西)。在服务器关闭的情况下尝试 ping(以确保它没有被缓存)。然后打开 DNS 服务器并再次尝试 ping。
请注意,无论哪种情况,都必须正确配置。因此,您的计算机需要配置为使用本地 DNS 服务器,并且本地 DNS 服务器必须配置为响应请求。如果它不起作用,那么这些东西中的任何一个都可能被破坏。这就是为什么切换到支持端口选择的不同 DNS 客户端可能会更好。然后,您可以针对已知良好的服务器测试客户端,并针对您的服务器测试现在已验证的客户端。
另一种选择是端口转发。nslookup 命令将使用端口 53。如果您进行配置,以便将 53 的请求转发到正确的端口,这也将允许请求通过。但是,它再次添加了无法正常工作的其他内容。DNS服务器是否损坏?还是端口转发配置错误?两者都可以给出相同的结果。
我将尝试在这里放一个完整的示例,包括从本地 dns 服务器公开区域。
我们将使用 bind9 作为 Ubuntu 21 机器上的名称服务器。
首先在文件中定义您的区域,我使用 etc/bind/example.com.zone,修改此示例
文档:https ://bind9.readthedocs.io/en/latest/reference.html#zone-file
现在你应该从绑定配置文件 /etc/bind/named.conf 加载这个区域,像这样
我还为命名服务 /etc/bind/named.conf.options 添加了一些额外的选项
然后就可以重启服务了
sudo systemctl restart named bind9
最后测试您的区域,您可以在 dig、host、resolvectl 或 nslookup 之间使用您喜欢的。
$ host -t A dns1.example.com localhost
$ host -t AAAA dns1.example.com localhost
$ host -t CNAME bar.example.com localhost
视窗
您可以使用 nslookup,因为 Grawity 提到您的语法错误。
您还可以在 Windows 上使用Bind9中的工具,您不再需要 Linux 的 Windows 子系统来使用它们。它不需要安装。只需将其解压缩到便于命令行使用的地方。(带有 dig、delv、host、nslookup 等)bind9-nslookup 似乎能够使用 Grawity 在他的回答中提到的隐藏端口参数。
挖
Debian 和 Ubuntu 安装:
CentOS 7 安装:
dig 的典型用法如下所示:
在哪里:
服务器
姓名
类型
钻研
delv 的典型用法如下所示:
http://manpages.ubuntu.com/manpages/xenial/man1/delv.1.html
或者您可以为此使用快速而肮脏的 ping。
完全披露:如果您需要知道您的本地 LAN 私有服务器是否使用此方法响应,您只需在运行服务器应用程序的计算机上将 127.0.0.1 作为网络适配器配置中的第一个也是唯一一个 DNS 服务器.
Ping mydomain.com并检查它是否显示正确的 IP 号码。
127.0.0.1 是计算机的环回地址,只有您的本地操作系统才能与此 IP 号通信。
如果您希望 LAN 上的其他计算机能够使用本地 DNS 服务,请确保该服务连接到本地 IP 地址。
不要忘记将DNS服务的本地IP添加到局域网中其他计算机的适配器设置中。