大学のネットワーク内に小さなプライベートネットワークをセットアップしています。 Centos 6ボックス(Sun)をプライベートネットワークと大学のWANの間に置いています。 Sunのeth0はWANに接続され、eth1はnetgearスマートスイッチ経由でプライベートネットワークに接続されます。-Sunはプライベートネットワークは、NAT iptablesを使用して構成された)を使用してeth1からeth0にトラフィックを転送します。プライベートネットワーク上のクライアント(現時点で存在するmercury) Sunで実行される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
_
ほとんどの場合、この設定は機能しています。私が抱えている問題(そしてそれが主要なものかどうかはわかりませんが...)は、nslookup
とDig
の両方が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
を実行するように構成する方法はありますか?
Dig
(domain information groper)およびnslookup
(query 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
142.3.102.202と142.3.100.15はローカルプライベートネットワークについて何も知らないため、正しく返されます[〜#〜] nxdomain [〜#〜]。これらはシステムのデフォルトのネームサーバーでもあるため、ネームサーバーを指定しない場合は、それらが使用されます。
/etc/resolv.conf
の内容を上書きし、ローカルのdnsmasqネームサーバーを指すようにネームサーバーディレクティブを設定する必要があります。ネームサーバーディレクティブは、上流に応答できないクエリを転送するように設定する必要があります。