我正在大学networking内build立一个小型私人networking。 我有一个Centos 6盒子( 太阳 )坐在我的私人networking和大学广域网之间。 eth0通过netgear智能交换机连接到WAN和eth1到我的专用networking。 sun作为专用networking的路由器,使用iptablesconfiguration的NAT将stream量从eth1转发到eth0。 专用networking(目前只有水银 )上的客户端通过在sun上运行的dnsmasq被分配IP,网关等和主机名。 dnsmasqconfiguration为将特定的IP和主机名发送到客户端的MAC地址。
我只对sun上的/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进行分配( sun eth0始终都被分配了相同的IP;这是大学如何做的事情,但是我正在把这个改为允许我分配一个静态IP)。 我在sun上的/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)是/etc/resolv.conf的第一个DNS服务器,所以默认情况下sun似乎使用这个名称服务器而不是dnsmasq,由于/etc/dnsmasq.conf中的设置,预计会使用它。
那么这是一个问题吗? 我可以用阳光照射太阳和水银 ,并使用SSH连接太阳中的 水银 。
如果这是一个问题(甚至不是),有没有办法configurationsun和dnsmasq运行它来自动parsing私有主机名?
dig ( 域信息groper )和nslookup ( 交互式查询Internet名称服务器 )是查询名称服务器的工具。 除非特定的名称服务器被指定为命令行参数,否则他们将查询/etc/resolv.conf中的名称服务器。 他们根本不会查看主机信息的替代来源,如/etc/hosts文件或/etc/nsswitch.conf指定的其他来源。
如果你想通过你的sun主机上的dnsmasq来强制所有的dns查询,那么/etc/resolv.conf应该指向dnsmasq,即它应该看起来像:
#/etc/resolv.conf on sun nameserver 127.0.0.1
要防止在重新启动networking接口eth0时覆盖该文件,请编辑/etc/sysconfig/network-scripts/ifcfg-eth0并添加选项 PEERDNS=no
其次,在/etc/dnsmasq-resolv.conf你正在尝试configurationdnsmasq来使用自己作为上游名称服务器nameserver 127.0.0.1 …该文件应该是这样的:
#/etc/dnsmasq-resolv.conf search beowulf.iecs biol.uregina.ca nameserver 8.8.8.8
如果你想使用谷歌的名字服务器。 在那里使用大学名称服务器142.3.102.202&142.3.100.15可能是一个好主意,因为从校园networking中只能看到某些资源并不罕见。
如果你的水银主机是通过DHCPconfiguration的,它应该从dnsmasq获得configuration,而/etc/resolv.conf则指向192.168.42.1上的dnsmasq名称服务器
142.3.102.202和142.3.100.15不知道你的本地专用networking,所以他们正确地返回NXDOMAIN 。 这些也是系统的默认名称服务器,因此当您不指定名称服务器时,将使用它们。
您将需要覆盖/etc/resolv.conf的内容,并将nameserver指令configuration为指向您的本地dnsmasq名称服务器,而该名称服务器又应configuration为转发无法向上游应答的查询。