■squeezeにDNSを導入
参考:DNSサーバ(BIND9)の設定
http://www005.upp.so-net.ne.jp/develop-tom/deb/bind-deb.html
■デフォルトではキャッシュサーバとして動作
$ sudo apt-get install -y bind9
■ファイル構成は見たまま。「include」で呼び出す方式の為、「named.conf」は触らない。
$ grep include /etc/bind/named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
■正引き、逆引きの保存場所
「directory」サブステートメントが指すディレクトリ
※フォワード機能は無効のまま、IPv6のリッスンはコメントアウト
この設定は、正常に動作した事を確認してからでも遅く無い。
$ sudo grep -v '//\|^\$' /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
auth-nxdomain no;
};
■「managed-keys.bind」対策
syslogで「managed-keys.bind」が無いというエラーが出る。
これは1,2のどちらかで対応出来る。
$ sudo tail -100 /var/log/syslog | grep managed-keys | cut -c 45-
managed-keys-zone ./IN: loading from master file managed-keys.bind failed: file not found
1.単純に作業ディレクトリにtouchする
$ sudo touch /var/cache/bind/managed-keys.bind && sudo /etc/init.d/bind9 restart
2.「managed-key」のディレクトリを指定、同ファイルをtouchするか作成する
必要になった時の為にコメントアウトで入れておけば忘れずに済む。
options {
// managed-keys-directory "/etc/bind";
};
$ sudo tail -50 /var/log/syslog | grep managed-keys | cut -c 45-
managed-keys-zone ./IN: loaded serial 0
set up managed keys zone for view _default, file 'managed-keys.bind'
■設定チェック
スペルミス等構文エラーが無いことを確認
$ sudo named-checkconf
■ドメインの設定
プライマリDNS
$ hostname -f
vmsqueeze-amd64i.localdomain
セカンダリDNS
$ hostname -f
vmsqueeze-clean.localdomain
■プライマリDNSの最小限の設定
$ sudo vim /etc/bind/named.conf.local
$ grep -v '//' /etc/bind/named.conf.local
zone "localdomain" {
type master;
file "localdomain.zone";
allow-update {127.0.0.1;};
};
zone "72.168.192.in-addr.arpa" {
type master;
file "localdomain.rev";
allow-update {127.0.0.1;};
};
■正引きのゾーンの設定
$ sudo cp /etc/bind/db.local /var/cache/bind/localdomain.zone
$ sudo cat /var/cache/bind/localdomain.zone
$TTL 3600
@ IN SOA vmsqueeze-amd64i.localdomain. root.mail.localdomain. (
2012040301 ; Serial
1800 ; Refresh
900 ; Retry
604800 ; Expire
1200 ) ; Negative Cache TTL
;
@ IN NS vmsqueeze-amd64i.localdomain.
IN A 192.168.72.188
vmsqueeze-amd64i IN A 192.168.72.188
$ sudo named-checkzone localdomain /var/cache/bind/localdomain.zone
zone localdomain/IN: loaded serial 2012040301
OK
■逆引きのゾーンの設定
$ sudo cp /etc/bind/db.127 /var/cache/bind/localdomain.rev
$ cat /var/cache/bind/localdomain.rev
$TTL 3600
@ IN SOA vmsqueeze-amd64i.localdomain. root.mail.localdomain. (
2012040301 ; Serial
1800 ; Refresh
900 ; Retry
604800 ; Expire
1200 ) ; Negative Cache TTL
;
@ IN NS vmsqueeze-amd64i.localdomain.
188 IN PTR vmsqueeze-amd64i.localdomain.
$ sudo named-checkzone 72.168.192.in-addr-arpa /var/cache/bind/localdomain.rev
zone 72.168.192.in-addr-arpa/IN: loaded serial 2012040301
OK
■bind9を再起動、問題があればsyslogをチェック
$ sudo /etc/init.d/bind9 restart
Stopping domain name service...: bind9 waiting for pid 2891 to die.
Starting domain name service...: bind9.
$ sudo grep bind /var/log/syslog | tail -5
■セカンダリDNSのAレコードを追加する。
$ (echo 'server 127.0.0.1';
echo 'update add vmsqueeze-clean.localdomain 3600 IN A 192.168.72.199';
echo 'send'; ) | nsupdate -d
$ nslookup -type=A vmsqueeze-clean 192.168.72.188 Server: 192.168.72.188
Address: 192.168.72.188
Name: vmsqueeze-clean.localdomain
Address: 192.168.72.199
■セカンダリDNSのPTRレコードを追加する
※最後の「.」に注意
$ (echo 'server 127.0.0.1';
echo 'update add 199.72.168.192.in-addr.arpa 3600 IN PTR vmsqueeze-clean.localdomain.';
echo 'send'; ) | nsupdate -d
$ nslookup -type=ptr 192.168.72.199 192.168.72.188
Server: 192.168.72.188
Address: 192.168.72.188
199.72.168.192.in-addr.arpa name = vmsqueeze-clean.localdomain.
■MXレコードを追加する。
$ (echo 'server 127.0.0.1';
echo 'update add mail.localdomain 3600 IN MX 10 192.168.72.188';
echo 'send'; ) | nsupdate -d
■CNAMEレコードを追加する
$ (echo 'server 127.0.0.1';
echo 'update add ns1.localdomain. 3600 IN CNAME vmsqueeze-amd64i.localdomain.';
echo 'send'; ) | nsupdate -d
$ nslookup -type=cname ns1.localdomain 192.168.72.188 Server: 192.168.72.188
Address: 192.168.72.188
ns1.localdomain canonical name = vmsqueeze-amd64i.localdomain.
■追加されたゾーンは以下にある。
「strings」で見れなくも無いが、見ても良く分からないw。
$ ls /var/cache/bind/localdomain.*.jnl
/var/cache/bind/localdomain.rev.jnl /var/cache/bind/localdomain.zone.jnl
■実際には以下が上記のキャッシュに少し遅れて更新される。
※バックアップ対象はここと更新用のスクリプトという事になるはず。
$ ls -l /var/cache/bind/ | grep "zone\$\|rev\$"
-rw-r--r-- 1 bind bind 438 2012-04-03 23:30 localdomain.rev
-rw-r--r-- 1 bind bind 462 2012-04-03 23:47 localdomain.zone
■ACLを定義、セカンダリとLAN内のクエリ、転送を許可する
$ grep -v '//' /etc/bind/named.conf.options
acl vmnatlan {
127.0.0.1;
127.0.1.1;
192.168.72.0/24;
};
options {
directory "/var/cache/bind";
allow-query {
vmnatlan;
};
allow-transfer {
192.168.72.199;
};
auth-nxdomain no;
};
■セカンダリDNS
■syslogエラー対策
$ sudo touch /var/cache/bind/managed-keys.bind
■IPv6無効、転送先をプライマリDNSへ。
$ grep v6 /etc/bind/named.conf.options
//listen-on-v6 { any; };
$ grep "forwarders.*;" /etc/bind/named.conf.options
forwarders {192.168.72.188;};
■「type slave」にし、「masters」を設定
$ grep -v '//' /etc/bind/named.conf.local
zone "localdomain" {
type slave;
masters {192.168.72.188;};
};
zone "72.168.192.in-addr.arpa" {
type slave;
masters {192.168.72.188;};
};
■設定のチェック、再起動
$ sudo named-checkconf
$ sudo /etc/init.d/bind9 restart
■DNSを参照するよう、「resolv.conf」を修正
※プライマリDNS
$ grep nameserver /etc/resolv.conf
nameserver 192.168.72.188
※セカンダリDNS
$ grep nameserver /etc/resolv.conf
nameserver 192.168.72.199
※ホストOS
$ grep nameserver /etc/resolv.conf
nameserver 192.168.72.188
nameserver 192.168.72.199
nameserver 192.168.188.254
■外部も確認
$ nslookup google.co.jp
Server: 192.168.72.188
Address: 192.168.72.188
Non-authoritative answer:
Name: google.co.jp
Address: 74.125.235.95
Name: google.co.jp
Address: 74.125.235.87
Name: google.co.jp
Address: 74.125.235.88
■「forwarders」の設定
ホストの「resolv.conf」にもあるルータを指定
$ grep "forwarders.*;" /etc/bind/named.conf.options
forwarders {192.168.188.254;};
$ sudo named-checkconf
$ sudo /etc/init.d/bind9 restart
■ホストOSの「tcpdump」で待ち受け、ゲストOS内から「dig -x yahoo.co.jp」でチェックしたところ
$ sudo tcpdump -n port 53
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
00:08:44.494499 IP 192.168.188.188.49309 > 192.168.188.254.53: 56920+ [1au] PTR? jp.co.yahoo.in-addr.arpa. (53)
00:08:44.514878 IP 192.168.188.254.53 > 192.168.188.188.49309: 56920 NXDomain 0/1/1 (121)