web-dev-qa-db-ja.com

使用する(ローカル)DNSサーバーを指定しない限り、dig&nslookupはローカルホストを解決できません

大学のネットワーク内に小さなプライベートネットワークをセットアップしています。 Centos 6ボックス(Sun)をプライベートネットワークと大学のWANの間に置いています。 Sunのeth0はWANに接続され、eth1はnetgearスマートスイッチ経由でプライベートネットワークに接続されます。-Sunはプライベートネットワークは、NAT iptablesを使用して構成された)を使用してeth1からeth0にトラフィックを転送します。プライベートネットワーク上のクライアント(現時点で存在するmercurySunで実行されるdnsmasqを介してIP、ゲートウェイなどとホスト名が割り当てられます。dnsmasqは、特定のIPとホスト名をクライアントのMACアドレスに送信するように設定されています。

ホスト名/ IPを_/etc/hosts_ Sunのみにハードコードしています:

_# 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を割り当てられるようにするプロセス)。私の_/etc/resolv.conf_ Sunは:

_; 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
_

_/etc/resolv.conf_の代わりにそれを使用するようにdnsmasqに指示しました

_# 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の名前を解決できないということです=とmercuryunless私はこれらのコマンドにどの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 *の代わりにmercuryに対して与えられます。代表的な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が代わりにこのネームサーバーを使用しているようです_/etc/dnsmasq.conf_の設定により、使用するはずのdnsmasqの数。

それで、これは問題ですか? SunからSunおよびmercuryにpingを実行して、mercuryに接続できますSunからSSHを使用します。

これが問題である場合(または問題がない場合でも)、プライベートホスト名を自動的に解決するためにSunおよびdnsmasqを実行するように構成する方法はありますか?

Digdomain information groper)およびnslookupquery Internet Name Servers Interactively)はネームサーバーを照会するツール。特定のネームサーバーがコマンドライン引数として指定されていない限り、それらは/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

ネットワークインターフェースeth0を再起動したときにそのファイルが上書きされないようにするには、/etc/sysconfig/network-scripts/ifcfg-eth0を編集して optionPEERDNS=noを追加します。

/etc/dnsmasq-resolv.confの2番目は、それ自体を上流のネームサーバーとして使用するように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を使用することをお勧めします。

mercuryホストがDHCPによって構成されている場合は、dnsmasqから構成を取得し、/etc/resolv.confが192.168のdnsmasqネームサーバーを指している必要があります。 42.1

9
HBruijn

142.3.102.202と142.3.100.15はローカルプライベートネットワークについて何も知らないため、正しく返されます[〜#〜] nxdomain [〜#〜]。これらはシステムのデフォルトのネームサーバーでもあるため、ネームサーバーを指定しない場合は、それらが使用されます。

/etc/resolv.confの内容を上書きし、ローカルのdnsmasqネームサーバーを指すようにネームサーバーディレクティブを設定する必要があります。ネームサーバーディレクティブは、上流に応答できないクエリを転送するように設定する必要があります。

4
user9517