ヘプタゴンの技術ブログ

サーバ/ネットワーク/linux/AWSとか青森を拠点でやってます

dnsmasqで簡単DNSキャッシュサーバ

dnsmasqでDNSキャッシュサーバを構築します。
DNSといえばBINDですが、めんどくさいので嫌いです。
nsd+dnsmasqが素晴らしいです。
dnsmasqはdnsキャッシュサーバの機能だけでなくdhcpサーバやtftpサーバの機能まであります。素晴らしい!(使わないけど。
Route53はもっと素晴らしいですけどね!!

  • 環境
$ cat /etc/system-release
 Amazon Linux AMI release 2013.09

$ uname -a
 Linux ip-172-31-0-248 3.4.73-64.112.amzn1.x86_64 #1 SMP Tue Dec 10 01:50:05 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

$ dnsmasq -v
Dnsmasq version 2.48 Copyright (C) 2000-2009 Simon Kelley


  • Install
$ sudo yum install dnsmasq


  • 設定 & 起動

今回はDNSキャッシュサーバとしてのみ使用します。
ローカルからの接続のみ許可します。
そのうえで/etc/resolv.confに追加してあげます。

$ sudo vim /etc/dnsmasq.conf
-----------------------------------------
listen-address=127.0.0.1
bind-interfaces
-----------------------------------------

$ sudo vim /etc/resolv.conf
-----------------------------------------
nameserver 127.0.0.1
nameserver 172.31.0.2
-----------------------------------------

$ sudo service dnsmasq start
$ sudo netstat -nlp|grep :53
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 17586/dnsmasq
udp 0 0 127.0.0.1:53 0.0.0.0:* 17586/dnsmasq


  • 確認

適当にdigします。
1回目は外部サーバに聞きにいくので遅いですが、2回目以降はキャッシュから返してくれるので速いです!
dnsラウンドロビンの機能も持っているので複数のレコードを持つ場合なども順番に返してくれるので安心です。

$ dig google.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.30.amzn1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 173.194.126.238
google.com. 300 IN A 173.194.126.224
google.com. 300 IN A 173.194.126.225
google.com. 300 IN A 173.194.126.226
google.com. 300 IN A 173.194.126.227
google.com. 300 IN A 173.194.126.228
google.com. 300 IN A 173.194.126.229
google.com. 300 IN A 173.194.126.230
google.com. 300 IN A 173.194.126.231
google.com. 300 IN A 173.194.126.232
google.com. 300 IN A 173.194.126.233

;; Query time: 44 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Feb 16 14:28:39 2014
;; MSG SIZE rcvd: 204

$ dig google.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.30.amzn1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 297 IN A 173.194.126.233
google.com. 297 IN A 173.194.126.232
google.com. 297 IN A 173.194.126.231
google.com. 297 IN A 173.194.126.230
google.com. 297 IN A 173.194.126.229
google.com. 297 IN A 173.194.126.228
google.com. 297 IN A 173.194.126.227
google.com. 297 IN A 173.194.126.226
google.com. 297 IN A 173.194.126.225
google.com. 297 IN A 173.194.126.224
google.com. 297 IN A 173.194.126.238

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Feb 16 14:28:42 2014
;; MSG SIZE rcvd: 204

$ dig google.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.30.amzn1 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<;; flags: qr rd ra; QUERY: 1, ANSWER: 11, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com.     295 IN  A   173.194.126.224
google.com.     295 IN  A   173.194.126.238
google.com.     295 IN  A   173.194.126.233
google.com.     295 IN  A   173.194.126.232
google.com.     295 IN  A   173.194.126.231
google.com.     295 IN  A   173.194.126.230
google.com.     295 IN  A   173.194.126.229
google.com.     295 IN  A   173.194.126.228
google.com.     295 IN  A   173.194.126.227
google.com.     295 IN  A   173.194.126.226
google.com.     295 IN  A   173.194.126.225

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Feb 16 14:28:43 2014
;; MSG SIZE rcvd: 204