ローカル DNS サーバとして Dnsmasq を設定した

ntpq の結果が返ってくるのが遅かった件で原因が名前解決にあったので、じゃあ DNS サーバー置くかという勢いで設定しました。

とはいえ BIND を設置するのもコスト高いよなと思ったので、簡単に設置できそうな Dnsmasq を設定することにしたわけです。

今回 DNS サーバーにしたマシンには既に NTP サーバーとして chrony、 Web サーバーとして Apache2、監視サーバーとして Zabbix、Zabbix のデータ保存用データベースとして MySQL が動いていますが、それ以外はなんの変哲もない debian 8.4 の x86 が動く ThinkPad X60s です。

手抜き設定です。

まずはインストール、apt-get で入れていきます。

$ sudo apt-get install dnsmasq -y

設定ファイルを編集して DNS サーバー自身の名前解決では /etc/resolv.conf の順番通りに問い合わせをするように変更します。

$ sudo vi /etc/dnsmasq.conf
static-order

/etc/resolv.conf を編集して外部 DNS サーバーよりもローカル DNS サーバーが上になるようにします。

$ sudo vi /etc/resolv.conf
nameserver 127.0.0.1
nameserver 8.8.8.8

LAN 内の名前解決には Dnsmasq のマシンの hosts ファイルが利用されるのでこれを編集して適当にマシン名と ip アドレスを書き込む。

$ sudo vi /etc/hosts
192.168.10.11   X60s
192.168.10.12   X40
192.168.10.14   debian
192.168.10.109  rpi

最初の 192.168.10.11 X60sDNS サーバー自身のアドレスです。 hosts ファイルの編集が終わったら Dnsmasq を再起動させる。

$ sudo service dnsmasq restart

試しに ThinkPad X40 (ホスト名は X40)の名前解決をしてみます。

$ nslookup x40
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   x40
Address: 192.168.10.12

ちゃんと返ってきました。
普通のドメインを名前解決できるか確認します。

$ nslookup www.yahoo.co.jp
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
www.yahoo.co.jp canonical name = www.g.yahoo.co.jp.
Name:   www.g.yahoo.co.jp
Address: 183.79.231.182
Name:   www.g.yahoo.co.jp
Address: 182.22.59.229
Name:   www.g.yahoo.co.jp
Address: 182.22.63.230
Name:   www.g.yahoo.co.jp
Address: 124.83.235.204

大丈夫そうです。

いくらサーバーを設定しても他のマシンが参照してくれないので、他のマシンを設定して回ります。
なお、今回設定するのは全部 debian です。8系と7系が混じってますが、同じ設定でイケそうです。

$ sudo vi /etc/resolvconf.conf
name_servers=192.168.10.11 

もしくは

$ sudo vi /etc/network/interfaces
dns-nameservers 192.168.10.11

ついでに

$ sudo vi /etc/resolv.conf
nameserver 192.168.10.11
nameserver 8.8.8.8

今後マシンを増やしたりしたら NIC の設定でローカル DNS を見に行くように設定すれば大丈夫でしょう。