Skip to content

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アドレス]