DHCPサーバから配布されたDNSサーバのIPアドレスを/etc/resolv.confに自動反映する

複数のマシンを持っていたりVM環境を管理していると内部ネットワークのIPアドレスとホスト名の管理が煩雑になってきます。

そこでDHCPサーバとDNSサーバを用いるのですが、IPアドレスを配布されたクライアント側でresolv.confがDNSサーバを適切に参照する必要があります。

ここではDHCPサーバから配布されたDNSサーバをクライアント側のresolv.confへ自動反映させる方法について記載します。 

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