dnsmasqを使って内部向けDNSサーバを立てる¶
2016/2/17¶
内部向けにDNSサーバを立てる際にdnsmasqで実装したためその記録。
ハードとしてはRaspberry Piを活用。
OSはRaspbianということで、Debian系。
dnsmasqのインストール¶
$ sudo apt-get install dnsmasq
dnsmasqの設定¶
dnsmasqをインストールすると、/etc/dnsmasq.confという設定ファイルが生成されるのでこいつを編集する。
設定ファイルは初期状態はすべてコメントアウトしてあるので、ちょっとだけ書き換えたり、コメントを外すだけで設定が終わる。
設定した箇所は以下の通り
# サービスのポートは53番を使う
port=53
# ドメインの無いホスト名のみ問い合わせの場合、上位DNSサーバに転送しない(※1)
domain-needed
# プライベートIPアドレスの逆引きを上位DNSサーバに転送しない
bogus-priv
# ローカルエリア内のドメインを指定
local=/poppypop.mydns.jp/
# ホスト名で問合せされた時、下記のdomain=で指定されたドメイン名を補完(※2)
expand-hosts
domain=poppypop.mydns.jp
※1
例えばこのブログのURIは
blog.poppypop.mydns.jp
となっているが、動かしているマシン自体のホスト名はblogとなっており、他のマシンからblogで名前を問合せた時、上位のDNSサーバに問合せを転送しない、という意味。
※2
blogというホスト名で問合せされたとき、"domain="で指定している
poppypop.mydns.jpを追加して、blog.poppypop.mydns.jpで返す
dnsmasqを動かしているサーバ自体のDNS問合せ先はgoogle提供のDNSサーバである8.8.8.8を指定したり、プロバイダから教えられているであろう、プロバイダのDNSサーバのアドレスを指定しておく。
そしてローカルエリア内の機器の名前解決の設定は/etc/hostsファイルに記載する。
# [IPアドレス] ホスト名
192.168.1.1 hogehoge
実際の動きは以下の通り
1. 他のマシンからdnsmasqを動かいているサーバへDNSの問合せが来る
2. ホスト名のみだった場合、/etc/hostsを参照し、名前解決をおこなおうとする
3. ドメインがpoppypop.mydns.jpだった場合、/etc/hostsを参照し、名前解決をおこなおうとする
4. google.co.jpみたいな、知らないドメインだった場合、上位のDNSサーバに問合せをフォワードする
動きもわかりやすいし、非常にシンプル。
家庭用のルータでも、製品によってはDNSサーバの指定ができるため、ルータのDNSの指定として、dnsmasqのサーバのIPアドレスを入れると、そちらのサーバで名前解決されるようになるため、いちいちすべての端末にDNSの設定を入れる必要はない。
接続した端末からルータへ名前解決の通信、ルータが指定したDNSサーバにフォワードし、名前解決をする。
小ネタ¶
LinuxのDNS問合せで使えるdigコマンドの基本的な使い方。
# OSに設定されているDNS問合せ先に問合せる
dig [問合せたいホスト名等]
# DNS問合せ先を指定する(@以下のサーバに問合せる)
dig @[DNSサーバのIPアドレス] [問合せたいホスト名等]
# IPアドレスからの逆引き
dix -x [IPアドレス]