dnsmasqを活用する

Linux ハードウェア 2009-08-11 05:19:07
「ヘアピンNAT」という、ややマイナーな言葉がある。

自宅にWebサーバを置いて、外部にexample.rhiz.jpというドメイン名で公開したとしよう。
自宅から、example.rhiz.jpにアクセスすると、DNSはグローバルIPアドレスを返してくれる。
なのでクライアントはWANに向かってホストを探しにいってしまう。もちろん見つからない。

これを見つかるようにするためには、次のような方法がある。
  • 自宅内にDNSサーバを置く
  • 「ヘアピンNAT」に対応したルータに取り替える
  • 自宅の端末ひとつひとつのhostsファイルにIPアドレスを定義する
DNSサーバは設定も運用も難しい。
「ヘアピンNAT」は俗称で、ルータのメーカーが仕様表に書いている機能ではないので、
お店で「ヘアピンNAT対応ルータ」を探すのは困難だ。店員さんも答えられないと思う。
そして、沢山のhostsファイルを書き換えるのは馬鹿げているとしか言いようが無い。

この問題を解決するのが、dnsmasqという、設定も運用も簡単なDNSサーバだ。
なんとCentOS 5.3には標準でインストールされている。

使い方も簡単。
  • ルータのPPPoE設定のプライマリDNSサーバを、dnsmasqを設置するサーバのIPアドレスにする。
    • セカンダリDNSサーバは念のためプロバイダのプライマリDNSサーバを指定しておく。
  • /etc/host.confを開き、order hosts,bindと書いて閉じる。
  • /etc/resolv.confを開き、nameserver xxx.xxx.xxx.xxxと、プロバイダのDNSサーバのIPアドレスを書いて閉じる。
    • 複数ある場合は複数行に渡って書く事が出来る。
  • /etc/hostsに思いのたけをぶつける。
  • /usr/sbin/dnsmasqを起動する。
  • tail /var/log/messageで起動を確認する。
  • てっとりばやく自動起動したければ /etc/rc.d/rc.local に /usr/sbin/dnsmasq と書いておく。
あー簡単。
つまりは一台のLinuxに書いたhostsをDNSサーバに見立てて共有してくれるわけですな。これは便利。
ちなみにWindowsでやりたいなら、こんなソフトがあった。

Private Local DNS Server for Windows
http://senta.s112.xrea.com/senta/product/pldns/pldns.html

コンセプトは素晴らしい。dnsmasqに匹敵するシンプルさ。
ただし、サブドメインしか設定が出来なかったので残念ながら実用は出来なかった。

ちなみにdnsmasqにはdhcpdの機能もあるらしいが、今回はルータのdhcpdを使ったので触れていない。

■ 参考サイト

Dnsmasq構築方法
http://www.tm-site.net/linuxroom/DnsMasq.htm