dig & nslookup 无法解析本地主机,除非我指定要使用的(本地)DNS服务器

dig & nslookup 无法解析本地主机,除非我指定要使用的(本地)DNS服务器

我正在我的大学网络内建立一个小型私人网络。我有一个 Centos 6 盒子(太阳)位于我的私人网络和大学 WAN 之间。eth0 在太阳通过 netgear 智能交换机连接到 WAN 并将 eth1 连接到我的专用网络。太阳充当私有网络的路由器,使用 iptables 配置的 NAT 将流量从 eth1 转发到 eth0。私有网络上的客户端(目前只有) 通过运行在太阳. dnsmasq 配置为将特定的 IP 和主机名发送到客户端的 MAC 地址。

/etc/hosts我已经对主机名/IP 进行了硬编码太阳仅有的:

# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.42.1    sun sun.beowulf.iecs
192.168.42.2    mercury mercury.beowulf.iecs

目前,eth0(面向 WAN)的 IP 地址是通过 DHCP 分配的(太阳eth0 始终被分配相同的 IP,无论何时;这是大学的做法,但我正在对其进行更改,以允许我分配静态 IP。我/etc/resolv.conf太阳是:

; generated by /sbin/dhclient-script
search biol.uregina.ca
nameserver 142.3.102.202
nameserver 142.3.100.15

当我重新启动时它似乎被覆盖所以我有以下内容/etc/dnsmasq-resolv.conf

search beowulf.iecs biol.uregina.ca
nameserver 127.0.0.1
nameserver 8.8.8.8

并指示 dnsmasq 使用它来代替/etc/resolv.conf

# Change this line if you want dns to get its upstream servers from
# somewhere other that /etc/resolv.conf
resolv-file=/etc/dnsmasq-resolv.conf

# By  default,  dnsmasq  will  send queries to any of the upstream
# servers it knows about and tries to favour servers to are  known
# to  be  up.  Uncommenting this forces dnsmasq to try each query
# with  each  server  strictly  in  the  order  they   appear   in
# /etc/resolv.conf
strict-order

大部分情况下,这个设置是有效的。我遇到的问题(我不确定这是否是一个主要问题,但是......)是nslookupdig都无法解析名称太阳 除非我告诉这些命令要查询哪个 DNS 服务器:

# nslookup sun.beowulf.iecs sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun.beowulf.iecs
Address: 192.168.42.1

# nslookup sun sun.beowulf.iecs
Server:     sun.beowulf.iecs
Address:    192.168.42.1#53

Name:   sun
Address: 192.168.42.1

# nslookup sun
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun: NXDOMAIN

# nslookup sun.beowulf.iecs
Server:     142.3.102.202
Address:    142.3.102.202#53

** server can't find sun.beowulf.iecs: NXDOMAIN

输出结果相同而不是**sun*。代表性dig输出为:

# dig @192.168.42.1 mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> @192.168.42.1 mercury.beowulf.iecs
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65090
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; ANSWER SECTION:
mercury.beowulf.iecs.   0   IN  A   192.168.42.2

;; Query time: 0 msec
;; SERVER: 192.168.42.1#53(192.168.42.1)
;; WHEN: Wed Jun 25 12:05:31 2014
;; MSG SIZE  rcvd: 54

当我没有指定要使用的名称服务器时它不起作用:

# dig mercury.beowulf.iecs

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.23.rc1.el6_5.1 <<>> mercury.beowulf.iecs
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 29153
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;mercury.beowulf.iecs.      IN  A

;; AUTHORITY SECTION:
.           7988    IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2014062500 1800 900 604800 86400

;; Query time: 0 msec
;; SERVER: 142.3.102.202#53(142.3.102.202)
;; WHEN: Wed Jun 25 12:05:37 2014
;; MSG SIZE  rcvd: 113

在上面的最后一个例子中(dig),默认情况SERVER: 142.3.102.202#53(142.3.102.202)下是第一个 DNS 服务器/etc/resolv.conf太阳似乎正在使用这个名称服务器,而不是 dnsmasq,我本来期望它使用 dnsmasq,因为 中的设置/etc/dnsmasq.conf

那么,这是个问题吗?我可以 ping太阳太阳并连接到太阳使用 SSH。

如果这是个问题(或者即使不是),有没有办法配置太阳dnsmasq在其上运行以自动解析私有主机名?

答案1

dig域名信息搜索器) 和nslookup交互式查询互联网名称服务器) 是查询名称服务器的工具。除非将特定名称服务器指定为命令行参数,否则它们将查询在 /etc/resolv.conf 中找到的名称服务器。它们根本不会查看其他主机信息来源,例如/etc/hosts中指定的文件或其他来源/etc/nsswitch.conf

如果你想强制所有 DNS 查询都通过你的太阳主机,/etc/resolv.conf那里应该指向 dnsmasq,即它应该看起来像:

#/etc/resolv.conf on sun
nameserver 127.0.0.1

为了防止重新启动网络接口 eth0 时该文件被覆盖,请编辑/etc/sysconfig/network-scripts/ifcfg-eth0 并添加选项 PEERDNS=no

其次,/etc/dnsmasq-resolv.conf您尝试配置 dnsmasq 以使用其自身作为上游名称服务器nameserver 127.0.0.1...该文件应如下所示:

#/etc/dnsmasq-resolv.conf
search beowulf.iecs biol.uregina.ca
nameserver 8.8.8.8

如果您想使用 Google 的名称服务器。使用大学名称服务器 142.3.102.202 和 142.3.100.15 可能是一个好主意,因为某些资源只能从校园网络看到的情况并不少见。

如果你的主机由 DHCP 配置,它应该从 dnsmasq 获取其配置,然后/etc/resolv.conf指向 192.168.42.1 上的 dnsmasq 名称服务器

答案2

142.3.102.202 和 142.3.100.15 对您的本地专用网络一无所知,因此它们正确返回恩斯域。这些也是系统的默认名称服务器,因此当您未指定名称服务器时,将使用它们。

您将需要覆盖内容/etc/resolv.conf并配置名称服务器指令以指向您的本地 dnsmasq 名称服务器,而该服务器又应配置为转发其无法向上游回答的查询。

相关内容