#目的
開発環境用にDNSサーバを構築する。
#方法
Bindを使用し、接続を限定的にする。
#環境
- Amazon Linux AMI release 2015.03
- bind-9.8.2-0.30.rc1.38.amzn1.x86_64
#設定
##named.confバックアップ
# cp /etc/named.conf /etc/named.conf.bak
##named.conf設定
###named.confはBind全体の設定ファイルです。
- ”hosts”というaclを作成し、問い合わせ・再帰的問い合わせを限定的にする。(FWでも53番ポートは限定的開放にする。)
- zoneステートメントでは動的更新を明示的に無効としておき、zoneファイルをフルパスで記述。
- notifyオプションではゾーンファイルが更新された場合、SOAレコードに記述したrefresh間隔とは別に、マスターサーバからスレーブサーバにNOTITYメッセージを出し、NOTITYメッセージを受信したスレーブサーバはマスターサーバに対してゾーン転送要求する。マスターサーバはスレーブサーバからの要求を確認し、ゾーン転送を行う。also-notifyオプションはNSレコードに記述していないサーバへのゾーン転送を行う。
acl "hosts" { localhost; localnets; IPアドレス; };
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { hosts; };
allow-recursion { none; };
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "example.com" IN {
type master;
file "/var/named/hoge.example.com.zone";
allow-update { none; };
notify { yes; };
also-notify { NSレコードに記述していないDNSサーバのIPアドレス; };
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
##zoneファイル設定
###zoneファイルはBindが管理するゾーンの情報を記述されたファイルです。
1.zoneファイル作成(非省略形)
# touch /var/named/hoge.example.com.zone
$TTL 1D
example.com. IN SOA ns.example.com. root.example.com. (
2015081101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
example.com. IN NS ns.example.com.
ns.example.com. IN A ***.***.***.***
hoge.example.com. IN A ***.***.***.***
- SOAはこのゾーンの権限を持つことを宣言している。それに続いて管理者のメールアドレスを[@]を[.]に置換して記述する。
- シリアルは年/月/日/番号で記述し、同日にファイル更新した場合、番号をインクリメントすること。
- NSレコードにマスターサーバを指定。(スレーブがある場合はその台数分記述する)
- DNSサーバと名前解決したいサーバのAレコードを記述
- ドメインの記述はルートを指す(.)を書く。
2.zoneファイル作成(省略形)
# touch /var/named/hoge.example.com.zone
$TTL 1D
$ORIGIN example.com
@ IN SOA ns.example.com. root.example.com. (
2015081101 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
@ IN NS ns
ns IN A ***.***.***.***
hoge IN A ***.***.***.***
- ORIGINも省略可能。その場合はnamed.confで指定したゾーン名がORIGINになる。
- ドメインの記述はルートを指す(.)を書かない。
##フルサービスリゾルバ設定
Bindにはスタブリゾルバ機能はないので、Linuxのスタブリゾルバを利用する。
自分自身がフルサービスリゾルバになるようにローカル・ループバック・アドレスを記述する。
; generated by /sbin/dhclient-script
search ap-northeast-1.compute.internal
#nameserver ***.***.***.***
nameserver 127.0.0.1
##構文チェック
# /usr/sbin/named-checkconf /etc/named.conf
# /usr/sbin/named-checkzone example.com /var/named/hoge.example.com.zone
zone hoge.example.com/IN: loaded serial 2015081101
OK
##サービス起動
# service named start
##動作確認
- DNSサーバが機能しているか
- 同じネットワークに存在するクライアントから正引きできるか
- 異なるネットワークに存在するクライアントから正引きできるか。
###DNSサーバが機能しているか
# dig @127.0.0.1 hoge.example.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.38.amzn1 <<>> @127.0.0.1 hoge.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18457
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;hoge.example.com. IN A
;; ANSWER SECTION:
hoge.example.com. 86400 IN A ***.***.***.***
;; AUTHORITY SECTION:
example.com. 86400 IN NS ns.example.com.
;; ADDITIONAL SECTION:
ns.example.com. 86400 IN A ***.***.***.***
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Aug 11 04:07:37 2015
;; MSG SIZE rcvd: 85
###同じネットワークに存在するクライアントから正引きできるか
$ dig @***.***.***.*** hoge.example.com
; <<>> DiG 9.9.5-3ubuntu0.4-Ubuntu <<>> @***.***.***.*** hoge.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12828
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;hoge.example.com. IN A
;; ANSWER SECTION:
hoge.example.com. 86400 IN A hoge.example.com
;; AUTHORITY SECTION:
example.com. 86400 IN NS ns.example.com.
;; ADDITIONAL SECTION:
ns.example.com. 86400 IN A ***.***.***.***
;; Query time: 3 msec
;; SERVER: ***.***.***.***#53(***.***.***.***)
;; WHEN: Tue Aug 11 13:33:53 JST 2015
;; MSG SIZE rcvd: 96
###異なるネットワークに存在するクライアントから正引きできるか。
C:>nslookup
既定のサーバー: ****.***.ne.jp
Address: ***.***.***.***
> server ***.***.***.***
既定のサーバー: ec2-***.***.***.***.ap-northeast-1.compute.amazonaws.com
Address: ***.***.***.***
> hoge.example.com
サーバー: ec2-***.***.***.***.ap-northeast-1.compute.amazonaws.com
Address: ***.***.***.***
名前: hoge.example.com
Address: ***.***.***.***
- インターネットDNSとして運用するのであれば、レジストラに構築したDNSサーバを登録する。