サーバー管理者の立場で、WindowsにあってLinuxにないものは、なかなか見当たりませんが、クライアントPC側にDNSキャッシュがWindowsにしか無いということを最近知りました。最近のルーターならば、キャッシュDNSつまりnameserverとしてはルーターにお任せできるので、ルーター配下のサーバーがわざわざISP指定のnameserverを指すこともないと思いますが、ローカルキャッシュがないとは、意外にLinux(Unixも?)、エコじゃない。
そこでdnsmasqという、DNSキャッシュだけで無く、DHCPもできるという多機能ツールを使ってみました。とても簡単に使えるので、ローカルでBIND建てるのめんどくさいという人にもおすすめです。
さくっと yumでインストールできます。
$ yum install dnsmasq
設定無しでも動きますが、自分専用のキャッシュで使いたいなら /etc/dnsmasq.confをの #listen-address=127.0.0.1 のコメントを外せばOK。あとは、/etc/resolv.confを下記のように編集します
; generated by /sbin/dhclient-scriptsearch ap-northeast-1.compute.internal
nameserver 127.0.0.1
nameserver 8.8.8.8
元々のnameserverは残しておいてください。今回は例として、8.8.8.8の外部DNSを指して、問い合わせ時間の短縮を確認します。
$dig goga.co.jp;; QUESTION SECTION:
;goga.co.jp. IN A
;; ANSWER SECTION:
goga.co.jp. 86400 IN A 173.45.234.63
;; Query time: 22 msec
$dig goga.co.jp
;; QUESTION SECTION:
;goga.co.jp. IN A
;; ANSWER SECTION:
goga.co.jp. 86398 IN A 173.45.234.63
;; Query time: 0 msec
1発目の問い合わせは 127.0.0.1は当然知らないので、 8.8.8.8 に聞きに行きます。ですので、 22msecかかってます。 2発目は 127.0.0.1のキャッシュが効いてるので、 0 msecとなります。なお、AWSを含め、DHCPを使用している場合は、/etc/resolv.confが再起動時に変わらないように、/etc/sysconfig/network-scripts/ifcfg-eth0を変更しましょう
PEERDNS=no
ローカルキャッシュとしての役目はこのぐらいですが、ローカルのお手軽DNSとしても活躍できます。dnsmsgが動いているサーバーに対して、別サーバーがレゾルバで指します。そうすると、/etc/hostsに記載してあるものが、そのままAレコードとして問い合わせ出来ます。すごい楽!
dig imaoka.imadomain;; QUESTION SECTION:
;imaoka.imadomain. IN A
;; ANSWER SECTION:
imaoka.imadomain. 0 IN A 172.31.66.4
;; Query time: 0 msec
新規インスタンスが追加された場合は、hostsに書き足せばいいだけなので、お手軽です。consulなどのツールと組み合わせるのがよいです。