複数のマシンを持っていたりVM環境を管理していると内部ネットワークのIPアドレスとホスト名の管理が煩雑になってきます。
そこでDHCPサーバとDNSサーバを用いるのですが、IPアドレスを配布されたクライアント側でresolv.confがDNSサーバを適切に参照する必要があります。
ここではDHCPサーバから配布されたDNSサーバをクライアント側のresolv.confへ自動反映させる方法について記載します。
Table of Contents
1 目指すresolv.confの内容
192.168.11.2は内部ネットワーク(hiroom2.com)向けのDNS情報を管理し、192.168.11.1は外部ネットワークのDNS情報を管理しつつ外部ネットワーク向けのルーターとなっています。
これらの要求を満たすresolv.confは以下のようになります。
search hiroom2.com nameserver 192.168.11.2 nameserver 192.168.11.1
2 DHCPサーバの設定
dhcpd.confにてIPアドレスや経路情報だけでなく、domain-nameでドメイン名を、domain-name-serversでDNSサーバのアドレスを配布します。
subnet 192.168.11.0 netmask 255.255.255.0 { option domain-name "hiroom2.com"; option domain-name-servers 192.168.11.2, 192.168.11.1; option routers 192.168.11.1; }
dhcpd.confとresolv.confの対応は以下にようにになります。
dhcpd.conf | resolv.conf |
---|---|
option domain-name | serach |
option domain-name-servers | nameserver |
3 Fedora/CentOSのクライアントの設定
ifcfg-xxxにてPEERDNSをyesに設定することで、DHCPサーバから配布されたDNS情報を用いるようになります。
インストールした状態で以下の設定になっていると思います。
# cat /etc/sysconfig/network-scripts/ifcfg-eth0 TYPE="Ethernet" BOOTPROTO="dhcp" DEFROUTE="yes" PEERDNS="yes" PEERROUTES="yes" DEVICE="eth0" ONBOOT="yes" NAME="eth0"
なおifup-postスクリプトにてPEERDNS、DNS1、DNS2等を判定してresolv.confを作成しています。
/etc/sysconfig/network-scripts/ifup-post
4 Debianのクライアントの設定
インストールしたままのNetworkManager.confで問題ないはずです。
$ sudo cat /etc/NetworkManager/NetworkManager.conf [main] plugins=ifupdown,keyfile [ifupdown] managed=false
5 Ubuntuのクライアントの設定
インストールしたままのNetworkManager.confだとdnsmasqを用いるようになっており、DHCPサーバから配布されたDNSサーバが反映されません。
$ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by # resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE # OVERWRITTEN nameserver 127.0.1.1 search hiroom2.com
以下のようにdnsmasqをコメントアウトし、network-managerを再起動します。
$ sudo diff -uprN /etc/NetworkManager/NetworkManager.conf{.org,} --- /etc/NetworkManager/NetworkManager.conf.org 2016-04-28 01:07:32.015679999 +0900 +++ /etc/NetworkManager/NetworkManager.conf 2016-04-28 01:07:45.307679999 +0900 @@ -1,6 +1,6 @@ [main] plugins=ifupdown,keyfile,ofono -dns=dnsmasq +#dns=dnsmasq [ifupdown] managed=false $ sudo systemctl restart network-manager
目指していたresolv.confになりました。
$ cat /etc/resolv.conf # Dynamic resolv.conf(5) file for glibc resolver(3) generated by # resolvconf(8) # DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE # OVERWRITTEN nameserver 192.168.11.2 nameserver 192.168.11.1 search hiroom2.com