我在 VMWare Workstation 中安装了 Kali Linux。虚拟机配置为使用 NAT。主机服务器是 Windows 8.1。
Kali 中的 DNS 无法正常工作:
$ ping -c1 www.google.es
ping: unknown host www.google.es
网络正常运行:
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_req=1 ttl=128 time=32.0 ms
64 bytes from 8.8.8.8: icmp_req=2 ttl=128 time=25.0 ms
配置的 DNS 是 Google 的:
$ cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.8.9
任何想法?
答案1
有两个可能的故障点:
- 与 DNS 服务器的 TCP/UDP 连接是否正常?
- C 库是否首先配置为使用 DNS,如果是,则使用哪个解析器库?
可以使用之前建议的任何命令来测试第一点:
host www.google.es 8.8.8.8
nslookup www.google.es 8.8.8.8
dig +short www.google.es @8.8.8.8
由于可以成功 ping 通 DNS 服务器,我们知道 IP 路由有效并且允许 ICMP 流量 - 但它没有告诉我们有关 DNS 流量的具体信息,即到端口 53 的 TCP 和 UDP 流量。防火墙可以阻止该流量而不阻止 ICMP,反之亦然。
对于第二个可能的故障点,运行:
grep hosts /etc/nsswitch.conf
如果答案不包含关键字dns
,resolve
也不包含lwres
,那么此虚拟机中的主机名解析已配置为根本不使用 DNS - 关键字将指示实际要使用哪些方法。
dns
是经典的 DNS 解析器,通过以下方式配置/etc/resolv.conf
lwres
是libnss-lwres
:如果发现此问题,还请验证lwresd
进程是否正在运行,并且未将其配置为使用自定义配置文件而不是默认配置文件/etc/resolv.conf
resolve
表示libnss-resolve
:如果发现此信息,请验证该systemd-resolved
进程是否正在运行,并使用该systemd-resolve --status
命令查看当前的DNS配置。在这种情况下,经典/etc/resolv.conf
可能根本不会被使用,除了直接使用自己的 DNS 解析器库将查询发送到的应用程序之外systemd-resolved
。
要测试应用程序是否可以成功使用已配置的主机名解析库,请使用getent hosts www.google.es
。如果您认为应用程序仅使用 IPv4,或者指定 IPv4 首选项,您也可以使用 进行测试getent ahostsv4 www.google.es
。同样,要专门针对 IPv6 进行测试,您可以使用getent ahostsv6 www.google.es
。
答案2
尝试使用 host 或 nslookup 并强制它询问特殊服务器
$ host www.google.es 8.8.8.8
$ nslookup www.google.es 8.8.8.8
答案3
或者,挖掘 www.google.es @8.8.8.8 也尝试其他主机名。
可能需要检查 DNS 端口 53 是否打开(主要是 UDP,但也包括 TCP)