内部ネットワークにあるマシンのホスト名解決のためのDNSサーバを立ち上げます。
外部ネットワークの再起問い合わせは実行しません。
Debian 8でも同様の手順で立ち上げることができます。
Table of Contents
1 本項の環境
内部ネットワークのネットワークアドレスは192.168.11.0/24、DNSサーバを立ち上げるマシンのアドレスは192.168.11.67、内部ネットワークのクライアントは192.168.11.70です。
内部ネットワーク名はmy.netです。
2 bindのインストール
aptでbind9をインストールします。
sudo apt-get install -y bind9
3 bindの設定
Ubuntu 16.04のbindでは設定ファイルが/etc/bind/に、zoneファイルがデフォルトで/var/cache/bindに格納されます。
3.1 /etc/bind/named.conf
ここでは/etc/bind/named.conf.default-zonesを用いずに内部ネットワーク向けの/etc/bind/named.conf.my-zonesを読み込むようにします。
$ diff -uprN /etc/bind/named.conf{.org,} --- /etc/bind/named.conf.org 2016-04-30 04:54:33.437692485 +0900 +++ /etc/bind/named.conf 2016-04-30 05:33:38.114870069 +0900 @@ -8,4 +8,5 @@ include "/etc/bind/named.conf.options"; include "/etc/bind/named.conf.local"; -include "/etc/bind/named.conf.default-zones"; +include "/etc/bind/named.conf.my-zones"; +// include "/etc/bind/named.conf.default-zones";
3.2 /etc/bind/named.conf.options
ここでは内部ネットワークからの問い合わせに答え、再帰的問い合わせをしないようにします。デフォルトでは動作しておりませんが、ufwが動作している場合は53/tcp、53/udpを開ける必要があります。
$ diff -uprN /etc/bind/named.conf.options{.org,} --- /etc/bind/named.conf.options.org 2016-04-30 05:05:15.885386136 +0900 +++ /etc/bind/named.conf.options 2016-04-30 05:16:45.325945144 +0900 @@ -1,5 +1,8 @@ options { directory "/var/cache/bind"; + listen-on port 53 { localhost; 192.168.11.0/24; }; + allow-query { localhost; 192.168.11.0/24; }; + recursion no; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple
3.3 /etc/bind/named.conf.my-zones
ここではmy.netというzoneを定義します。
$ cat /etc/bind/named.conf.my-zones zone "my.net" IN { type master; file "my.net.zone"; };
3.4 /var/cache/bind/my.net.zone
自身が持つ192.168.11.67をubuntu-16.04というホスト名でNSとして登録し、内部ネットワーク内にある192.168.11.70のマシンをubuntu-14.04というホスト名で登録します。内部ネットワーク内にある他のマシンを登録するにはAレコードを適時追加していきます。
$ cat /var/cache/bind/my.net.zone $TTL 86400 @ IN SOA my.net root.my.net ( 2016043008 3600 900 604800 86400 ) @ IN NS ubuntu-16.04 ubuntu-16.04 IN A 192.168.11.67 ubuntu-14.04 IN A 192.168.11.70
3.5 設定の検証
named-checkconfで/etc/bind/named.confを検証します。
$ named-checkconf
named-checkzoneでzoneファイルを検証します。
$ named-checkzone my.net /var/cache/bind/my.net.zone zone my.net/IN: loaded serial 2016043008 OK
4 bindの起動
systemctlで起動します。
sudo systemctl enable bind9 sudo systemctl start bind9
5 動作確認
/etc/resolv.confでDNSサーバを参照します。
内部ネットワーク向けのDNSサーバ192.168.11.67とは別に、外部ネットワーク向けのDNSサーバとして192.168.11.1を利用しています。
$ 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 search my.net nameserver 192.168.11.67 nameserver 192.168.11.1
pingで応答を確認します。/etc/resolv.confにsearchがあるので.my.netは省略可能です。
$ ping -c 4 ubuntu-14.04.my.net PING ubuntu-14.04.my.net (192.168.11.70) 56(84) bytes of data. 64 bytes from 192.168.11.70: icmp_seq=1 ttl=64 time=0.370 ms 64 bytes from 192.168.11.70: icmp_seq=2 ttl=64 time=0.273 ms 64 bytes from 192.168.11.70: icmp_seq=3 ttl=64 time=0.388 ms 64 bytes from 192.168.11.70: icmp_seq=4 ttl=64 time=0.406 ms --- ubuntu-14.04.my.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3001ms rtt min/avg/max/mdev = 0.273/0.359/0.406/0.053 ms hiroom2@ubuntu-16:~$ ping -c 4 ubuntu-16.04.my.net PING ubuntu-16.04.my.net (192.168.11.67) 56(84) bytes of data. 64 bytes from 192.168.11.67: icmp_seq=1 ttl=64 time=0.020 ms 64 bytes from 192.168.11.67: icmp_seq=2 ttl=64 time=0.043 ms 64 bytes from 192.168.11.67: icmp_seq=3 ttl=64 time=0.038 ms 64 bytes from 192.168.11.67: icmp_seq=4 ttl=64 time=0.038 ms --- ubuntu-16.04.my.net ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 2999ms rtt min/avg/max/mdev = 0.020/0.034/0.043/0.011 ms