首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dig & nslookup不能解析本地主机,除非我指定要使用的(本地) DNS服务器

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

Server Fault用户
提问于 2014-06-25 18:12:31
回答 2查看 47.4K关注 0票数 9

我正在我的大学网络中建立一个小型的专用网。我有一个Centos 6盒(太阳)坐在我的私人网络和大学广域网之间。sun上的eth0通过一个netgear智能交换机连接到广域网和eth1到我的专用网络。sun充当专用网络的路由器,使用使用iptables配置的NAT将通信从eth1转发到eth0。私有网络上的客户端(目前只有水银)通过在太阳上运行的dnsmasq分配一个IP、网关等和主机名。dnsmasq被配置为向客户端(S)的MAC地址(Es)发送特定的IP和主机名。

我只在sun上对/etc/hosts中的主机名/I进行硬编码:

代码语言:javascript
复制
# 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 (面向广域网)的IP地址是通过DHCP分配的(sun eth0无论何时都分配相同的IP;这是大学的工作方式,但我正在对此进行更改,以允许我分配静态IP)。我在太阳上的/etc/resolv.conf是:

代码语言:javascript
复制
; generated by /sbin/dhclient-script
search biol.uregina.ca
nameserver 142.3.102.202
nameserver 142.3.100.15

它似乎在重新启动时被覆盖,因此我有以下/etc/dnsmasq-resolv.conf

代码语言:javascript
复制
search beowulf.iecs biol.uregina.ca
nameserver 127.0.0.1
nameserver 8.8.8.8

并指示dnsmasq使用它而不是/etc/resolv.conf

代码语言:javascript
复制
# 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都无法解析sun和is的名称,除非我通知这些命令要查询哪个DNS服务器:

代码语言:javascript
复制
# 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输出是:

代码语言:javascript
复制
# 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

如果没有指定要使用的名称服务器,则无法工作:

代码语言:javascript
复制
# 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)/etc/resolv.conf中的第一个DNS服务器,因此在默认情况下,sun似乎在使用这个名称服务器而不是dnsmasq,因为在/etc/dnsmasq.conf中设置了它。

那么,这是个问题吗?我可以平太阳和水星从太阳,并连接到汞从太阳使用SSH。

如果这是一个问题(或者即使不是),是否有一种方法可以配置运行在它上的sun和dnsmasq来自动解决私有主机名?

EN

回答 2

Server Fault用户

回答已采纳

发布于 2014-06-25 19:08:26

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

如果您想在sun主机上强制所有dns查询通过dnsmasq,那么/etc/resolv.conf应该指向dnsmasq,即它应该如下所示:

代码语言:javascript
复制
#/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.该文件应该如下所示:

代码语言:javascript
复制
#/etc/dnsmasq-resolv.conf
search beowulf.iecs biol.uregina.ca
nameserver 8.8.8.8

如果你想使用谷歌的名字服务器。在这里使用大学名称服务器142.3.102.202和142.3.100.15可能是个好主意,因为只有在校园网中才能看到某些资源并不少见。

如果您的水银主机是由DHCP配置的,那么它应该从dnsmasq获得它的配置,/etc/resolv.conf在192.168.42.1上指向dnsmasq服务器。

票数 9
EN

Server Fault用户

发布于 2014-06-25 18:56:32

142.3.102.202和142.3.100.15不了解您的本地专用网络,因此它们正确地返回了NXDOMAIN。这些也是系统的默认名称服务器,因此当您不指定名称服务器时,将使用它们。

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

票数 4
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/607908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档