我正在我的大学网络内建立一个小型私人网络。我有一个 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
大部分情况下,这个设置是有效的。我遇到的问题(我不确定这是否是一个主要问题,但是......)是nslookup
和dig
都无法解析名称太阳和汞 除非我告诉这些命令要查询哪个 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 名称服务器,而该服务器又应配置为转发其无法向上游回答的查询。