dnsmasq(8) 便利かも

dnsmasq(8) というのを知って,便利そうだったので入れてみた.まだ使い始めなので思わぬ失敗をしてるかもだが... 様子見中.
いわゆるヘアピンNAT機能のない箱物ルータ使ってると,同じLAN内のサーバがThe Internetに公開されていても,普通にはアクセスできない.代わりにLAN内に自前DNSサーバ立てる必要が出てくるが... 貴重な人生をBINDやらdjbdnsの設定なんぞに費やしたくないのですお.てな訳で「しゃあねぇ,とりあえずこのマシンの /etc/hosts に直書き... いずれあのマシンと,あとあっちもね... はぁ面倒」とか思ってたら,同じ思いを抱え,さらにそれを解決する意欲と技術力に溢れた人がいたらしく,dnsmasq という便利なツールが作られていた.これはキャッシングDNSサーバなんだが,設定を自ホストの /etc/hosts から取ってくるお手軽な奴.これをLAN内のサーバのどれかで上げて(そもそもThe Internetにwebサーバか何かを公開してる前提だから,同じサーバで上げちゃっていいだろ),あとは箱物ルータのDHCP設定でネームサーバ (primary*1 ) をそこに指定するだけ.そうすると普通の名前解決は

  • DHCPクライアントPC → dnsmasq → 箱物ルータDNS → プロバイダDNS

という委譲委譲で無事成功する.ついでに dnsmasq はデフォルトでキャッシュするらしい((複数回 dig(1) すると2回目からレスポンスが 1 ms に短縮されるとの同時に,帰ってくる内容が短い(QUESTIONとANSWER SECTIONしか無くてAUTHORITYとADDITIONAL SECTIONが欠けてる)が,大丈夫か?)).dnsmasq から箱物ルータへの委譲は,/etc/dnsmasq.conf で細かく制御できるようだが,基本的には他のリゾルバ同様に /etc/host.conf/etc/resolv.conf で制御されるみたい.
次に実体がLAN内にあるサーバの名前は

  • DHCPクライアントPC → dnsmasq/etc/hosts

となって,万事OK.

*1:Secondaryは箱物ルータにするのがいいと思う.箱物ルータのDNSサーバは通常通り動かしっぱなしにしてる前提でね.