Ubuntu 16.04 / Debian 8: bindをインストールして内部ネットワーク向けのDNSサーバを立ち上げる

内部ネットワークにあるマシンのホスト名解決のためのDNSサーバを立ち上げます。

外部ネットワークの再起問い合わせは実行しません。

Debian 8でも同様の手順で立ち上げることができます。

 

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