host(1) 命令仅使用第一个名称服务器?

host(1) 命令仅使用第一个名称服务器?

根据手册页,host应该查询“列出的服务器/etc/resolv.conf”,但它仅使用该文件中的第一个条目:

thefourthtower:$cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 192.168.1.254
domain gateway.2wire.net
search gateway.2wire.net
thefourthtower:$host thefourthtower
Host thefourthtower not found: 3(NXDOMAIN)
thefourthtower:$host thefourthtower 192.186.1.254
thefourthtower.gateway.2wire.net has address 192.168.1.74

2wire位来自 2Wire 调制解调器/路由器。AT&T(或 2Wire?)为该设备配备了非常差的固件,其 DNS 服务器(缓存)通常比 Google Public DNS 慢,而 AT&T 自己的 DNS 服务器不稳定(没有备用服务器选项)使这一问题更加严重。

我可以获得hostnslookup使用进一步的/etc/resolv.conf条目吗(并避免手动指定服务器)?

或者,唯一的解决方案是手动映射主机/etc/hosts,并给定所需的条目顺序resolv.conf

更新

上述内容并不意味着我认为 Google 的名称服务器应该了解我的本地主机。

我在问:是否可以将某个名称服务器仅用于本地名称(因为像“thefourthtower”这样的名称必须是本地的)?

答案似乎是,而且我必须在我的计算机上运行一个名称服务器,因为现存的本地名称服务器太差了。

答案1

host命令使用解析器库,该库按顺序使用 /etc/resolv.conf 中的名称服务器条目,但仅在发生故障时使用。多个条目的目的是为了冗余,以防主服务器因某种原因发生故障。但如果主服务器提供响应,无论是正面的还是负面的(例如 NXDOMAIN),则不使用其他名称服务器条目。您最多可以有三个,以实现三重冗余。

外部名称服务器(如 Google)不会知道您的本地主机名。您应该将这些名称放入 /etc/hosts 文件中,或运行本地名称服务器。运行本地名称服务器的优点是可以缓存 DNS 查找,从而使将来或重复查找的速度更快。

我用域名系统作为本地 DNS 和缓存。这确实很有帮助。只需将您的设置/etc/resolv.conf为使用127.0.0.1第一个(或唯一)名称服务器,并配置 dnsmasq 以使用您的 ISP 上游服务器。即使您的 ISP 速度很慢,您的本地缓存也会在大多数时间进行补偿。

答案2

/etc/resolv.conf如果他们不知道您的 LAN 上的主机或本地使用的域,请删除前两个名称服务器条目。

NXDOMAIN 响应可能是因为gateway.2wire.net它不是一个可以在互联网上使用的注册域名。

$ dig gateway.2wire.net any

; <<>> DiG 9.3.6-P1-RedHat-9.3.6-4.P1.el5_5.3 <<>> gateway.2wire.net any
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 7984
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;gateway.2wire.net.             IN      ANY

;; AUTHORITY SECTION:
2wire.net.              1200    IN      SOA     ns1.2wire.com. hostmaster.2wire.com. 2007041700 3600 600 604800 1200

;; Query time: 209 msec
;; SERVER: 10.0.0.9#53(10.0.0.9)
;; WHEN: Tue Aug 30 13:29:23 2011
;; MSG SIZE  rcvd: 95

请注意,的权威名称服务器2wire.net说没有这样的域名gateway.2wire.net。我猜这只是 2wire 产品在 LAN 级别使用的便利。

8.8.8.8 是 Google 名称服务器,不应期望它了解您的私有 LAN 上的主机以及您的 2wire 路由器所做的有些奇怪的配置选择。

计算机 thefourthtower 的名称应该出现在它自己的/etc/hosts表中(您应该安排在 DNS 之前查阅该表),并且您的 LAN(即您的 2wire 路由器)上的 DNS 名称服务器确实应该知道该名称。

/etc/nsswitch.conf你的包含吗hosts: files dns

答案3

您可以使用以下代码来查询全部/etc/resolv.conf 中的名称服务器:

grep '^nameserver' /etc/resolv.conf | cut -c 12- | xargs -i host [HOSTNAME] {}

或者,如果你愿意的话dig(1)

grep '^nameserver' /etc/resolv.conf | cut -c 12- | xargs -i dig @{} [HOSTNAME]

相关内容