概要
dnsmasq は軽量な DNS サーバです
他の有名な DNS ソフトウェアに bind などがありますが bind のような複雑な知識がなくても簡単に導入できます
今回は Ubuntu 上で dnsmasq を構築してみました
環境
- Ubuntu 16.04 LTS
- dnsmasq 2.75
インストール
sudo apt -y install dnqmasq
Ubuntu の場合は systemctl でデーモンを制御できるようになります
インストールされたファイルの一覧は以下の通りです
/.
/usr
/usr/lib
/usr/lib/resolvconf
/usr/lib/resolvconf/dpkg-event.d
/usr/lib/resolvconf/dpkg-event.d/dnsmasq
/usr/share
/usr/share/doc
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/dnsmasq.service
/etc
/etc/insserv.conf.d
/etc/insserv.conf.d/dnsmasq
/etc/resolvconf
/etc/resolvconf/update.d
/etc/resolvconf/update.d/dnsmasq
/etc/default
/etc/default/dnsmasq
/etc/init.d
/etc/init.d/dnsmasq
/etc/dnsmasq.d
/etc/dnsmasq.d/README
/etc/dnsmasq.conf
/usr/share/doc/dnsmasq
設定
/etc/dnsmasq.conf
を変更します
とりあえず最低限の設定だけ記載します
sudo vim /etc/dnsmasq.conf
domain-needed
bogus-priv
local=/vagrant.local/
expand-hosts
domain=vagrant.local
内部で使用するドメインは「vagrant.local」にしたいと思います
A レコードを登録する
dnsmasq は /etc/hosts
に IP アドレスとホスト名の組み合わせを記載することで A レコードの登録になります
また IPv6 用の AAAA レコードも /etc/hosts
に記載します
127.0.1.1 vm03
172.28.128.2 vm02.vagrant.local vm02
172.28.128.3 vm03.vagrant.local vm03
172.28.128.4 vm04.vagrant.local vm04
172.28.128.5 vm05.vagrant.local vm05
ちなみに dnsmasq をインストールしたのは vm03 になります
今回は Vagrant 上で動作させており .1
は mac になるのでそれも登録しました
あとは必要に応じて適当に登録してください
DNS をクライアントで確認
今回は dig コマンド実行時に構築した DNS サーバを指定して名前から IP アドレスが引けるか確認します
dig の場合は @
のあとに DNS サーバを指定すれば OK です
; <<>> DiG 9.10.6 <<>> mac @172.28.128.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2261
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;mac. IN A
;; ANSWER SECTION:
mac. 0 IN A 172.28.128.1
;; Query time: 0 msec
;; SERVER: 172.28.128.3#53(172.28.128.3)
;; WHEN: Tue Jul 30 11:48:38 JST 2019
;; MSG SIZE rcvd: 48
ちなみに今回はローカルドメイン以外の検索はしないので例えば www.google.com
のようなレコードは引けません
dig www.google.com @172.28.128.3
; <<>> DiG 9.10.6 <<>> www.google.com @172.28.128.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: FORMERR, id: 7891
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: EDNS query returned status FORMERR - retry with '+noedns'
;; QUESTION SECTION:
;www.google.com. IN A
;; Query time: 2 msec
;; SERVER: 172.28.128.3#53(172.28.128.3)
;; WHEN: Tue Jul 30 11:50:59 JST 2019
;; MSG SIZE rcvd: 32
いちいちアットマークで指定するのも面倒なので普通は /etc/resolv.conf
やネットワークの設定ファイルに記載します
PTR (逆引き) もできる
特に何も PTR 用のレコードは設定しませんでしたが引けました
dig -x 172.28.128.1 @172.28.128.3
; <<>> DiG 9.10.6 <<>> -x 172.28.128.1 @172.28.128.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16109
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;1.128.28.172.in-addr.arpa. IN PTR
;; ANSWER SECTION:
1.128.28.172.in-addr.arpa. 0 IN PTR mac.vagrant.local.
;; Query time: 0 msec
;; SERVER: 172.28.128.3#53(172.28.128.3)
;; WHEN: Tue Jul 30 11:54:49 JST 2019
;; MSG SIZE rcvd: 85
おまけ: CNAME を登録してみる
CNAME や MX レコードも登録できるようです
CNAME の場合は以下のような設定を追記してあげれば OK です
sudo vim /etc/dnsmasq.conf
domain-needed
bogus-priv
local=/vagrant.local/
expand-hosts
domain=vagrant.local
cname=alt-vm04,vm04
設定ファイルや hosts ファイルを変更した場合はプロセスを再起動してあげる必要があります
sudo systemctl restart dnsmasq
確認すると以下のような感じで返ってきました
dig alt-vm04 @172.28.128.3
; <<>> DiG 9.10.6 <<>> alt-vm04 @172.28.128.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21908
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;alt-vm04. IN A
;; ANSWER SECTION:
alt-vm04. 0 IN CNAME vm04.
vm04. 0 IN A 172.28.128.4
;; Query time: 0 msec
;; SERVER: 172.28.128.3#53(172.28.128.3)
;; WHEN: Tue Jul 30 11:57:46 JST 2019
;; MSG SIZE rcvd: 71
最後に
Ubuntu で dnsmasq に入門してみました
導入自体はかなり簡単に行えます
あとはこの DNS サーバを外部向けに公開する作業が必要になるかと思います
ルータの DNS 設定に登録したり DHCP サーバの配布設定に入れるのが良いかと思います
また今回は主に内部向けの DNS サーバを構築しましたが外部 DNS として公開する場合はドメインを取得したサービスに DNS を登録したりするのが必要になります
参考サイト