Bind DNSサーバ
コンテンツとキャッシュサーバー(フルリゾルバー)
- クライアントが指定しているのはこの内のキャッシュサーバー(フルリゾルバー)の事です。
フルリゾルバーというのは反復問い合わせに対応しているものです。
ルートサーバーから順に検索して目的のホスト(FQDN)のアドレスを返答してくれます。
このことからインターネットに直接アクセスできることが条件になります。
コンテンツサーバーはドメイン名(FQDN)からIPアドレス(正引き)に変換するゾーン情報を持っているものです。 IPアドレスからドメイン名(FQDN)の情報(逆引き)も持っているものもあります。
正式にドメインを取得し、権限が委任されていればグローバルDNSとして機能します。
コンテンツサーバーには機能としてマスターサーバーとスレーブサーバーがあります。
その名の通りマスターサーバーは親サーバーです。スレーブサーバーはマスターサーバーの複製です。
複製するにはゾーン転送機能を利用して行われます。
マスターは1台ですが、スレーブは何台あってもよいのです。
インターネット側から見たときにはマスター・スレーブの区別はつきません。
分散型データベース構造の利点ですね。
bindでは正引き情報や逆引き情報の管理としてゾーンと言う名前の単位で管理します。
ゾーン情報のなかに管理者情報やシリアルナンバー、有効期間などが定義されます。
これがSOAレコードと言います。
レコードはリソースレコードとよばれ、この他、NS、MX、A、TXT、PTRなどがあります。 - インストール例
-
# apt -y install bind9 bind9utils
Config設定
オープンリゾルバーとならないようにviewを設定します。
プライベート IP アドレスの解決を外部に問い合わせしないようにする方法を追加します。
具体的には「empty-zones-enable yes;」指定して有効にすると、bind が空のゾーンを自動的に作成します。
※bind9.18では指定しなくてもDefualt有効になって空のゾーンを自動的にロードします。
この他RFC1819等に指定されているネットワークアドレスに対してemptyゾーン宣言して設定する方法もあります。
自動的に作成されるものには以下のようなものがあります。
・ループバックアドレス (例:127, ::1) [RFC 1122]
・ブロードキャストアドレス (例:255.255.255.255, 0) [RFC 1122]
・プライベートネットワーク (例:10, 172.16, 192.168) [RFC 1918]
・リンクローカルアドレス (例:169.254) [RFC 3927]
・テストネットワーク (例:192.0.2, 198.51.100, 203.0.113) [RFC 5737]
・シェアードアドレススペース (例:100.64縲鰀100.127) [RFC 6598]
- CentOSの設定例はこちらを参照ください。
hint zone
- hint zoneはルートサーバーの情報です、キャッシュサーバーで動作させる為に最新情報に入れ替えます。
ルートサーバーから順に検索して目的のホスト(FQDN)のアドレスを取得するわけですから、
これが正しくないと名前解決できないなどの不具合が発生する可能性がありますので定期的にチェックしてみてください。
基本ゾーンファイルのある場所に移動
# cd /etc/bind/
直接ルートサーバから取得する方法
# dig +norec ns . @a.root-servers.net > named.root
公開情報から取得する方法
# wget https://www.internic.net/domain/named.cache Zoneファイルの設定
-
ゾーンファイルを置く場所に移動
# cd /var/cache/bind/master/
管理するドメインのゾーンファイルをドメイン名で作成します。
ホスト名の最後に「.」ピリオドを忘れずに付けます、付け忘れると自動補完されてしまい
「www.hogehoge.com」のはずが「www.hogehoge.com.hogehoge.com」の様になってしまいます。
誤って設定してしまうと元に戻すのに時間がかかってしまう事があります。
相手側のDNSにその情報がキャッシュされキャッシュ期限が切れるまで更新されないからです。 - 文法チェック
- # named-checkconf
- bind起動
- # systemctl start named
DNSSEC 権威DNSサーバの構築
-
[STEP1]KSK、ZSKを作成する
[STEP2]ゾーンへ署名を行う
[STEP3]namedの設定を変更する
[STEP4]DSレコードの登録依頼を行う
の順に行います。
[STEP1]KSK、ZSKを作成する
ここでは藤原氏が作成くださった便利なツール「dnsseczonetool」を利用して作成します。
dnsseczonetool,v 1.27 2013/06/24を利用しています。
/path/dnsseczonetool keygen [zone name] /usr/bin/dnssec-keygen -n zone -a RSASHA1 -b 2048 -f ksk [zone name] Generating key pair.......+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+.+......+...+........+...+.+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*...+.........+..+.............+..+....+.....+.+..+.......+.....+...+......+......+......+.......+........+...+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...+.....+...+....+..+....+..+............+.............+..+......+.+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+......+.......+...............+.....+...+.+...+..+.+.....+.......+...+..+.+.........+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*.+...+......+.+.....+.+............+..+...+...+...................+........+...+...+....+...+........+.+......+.....+..........................................+...+....+........+.+.....+.+....................+...+......+.+......+........+.+...+...+..+...+...............+...+....+..+....+...........+...+...+.......+...+..+.+..............+......+.+......+..............+..........+...+......+...........+.+..+.+..+.......+..+......+....+...+........+.............+.....+..........+.....+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ /usr/bin/dnssec-keygen -n zone -a RSASHA1 -b 1024 [zone name] Generating key pair...............................................++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ .++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ [zone name]'s KSK = K[zone name].+005+41918 [zone name]. IN DS 41918 5 2 62AB1E.............. [zone name]'s ZSK = K[zone name].+005+53340
[STEP2]ゾーンへ署名を行う
/path/dnsseczonetool sign [zone name] /usr/bin/dnssec-signzone -N unixtime -o [zone name] -k /var/cache/bind/master/config/keydir/K[zone name].+005+24007.private -f [zone name].signed [zone name].tmp /var/cache/bind/master/config/keydir/K[zone name].+005+58416.private dnssec-signzone: warning: Serial number would not advance, using increment method instead Verifying the zone using the following algorithms: - RSASHA1 Zone fully signed: Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked [zone name].signed signzone returns 0
[STEP3]namedの設定を変更する
zoneのファイル名を変更します。
file "master/[zone name]"; → file "master/[zone name].signed";
systemctl restart named
[STEP4]DSレコードの登録依頼を行う
[zone name]. IN DS 41918 5 2 62AB1E..............
先ほど表示されたDSレコードをレジストラに登録します。
又はdnssec-dsfromkeyコマンドを使ってKSK公開鍵ファイルから表示させてレジストラに登録します。
dnssec-dsfromkey K[zone name].+005+41918.key
[zone name]. IN DS 41918 5 2 62AB1E..............
レジストラへのDSレコード登録の例
whoisコマンドで確認します。
DNSSEC: signedDelegation となっていれば登録されています。
digコマンドで確認してみましょう。
例) $ dig ishige-jp.com DNSKEY ; <<>> DiG 9.16.48-Debian <<>> ishige-jp.com DNSKEY ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34051 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 1232 ; COOKIE: 40d0e31cbb4db52c010000006684fe7b28eb37171cf4a66b (good) ;; QUESTION SECTION: ;ishige-jp.com. IN DNSKEY ;; ANSWER SECTION: ishige-jp.com. 771 IN DNSKEY 256 3 5 AwEAAeGtWaCiwXCmiXkABHdv+4F2uFvWdc4vOIwNTHpxJpy2ONQtRgS4 gTdI335j91+YBUSlwuvykSk9GwA4GsKUCmPMEOS4zaQIHtaGPu5OUmaB 8sgP5VsDdQsD6Lx2kbAplVS37gSCAUBJlH9vBGcdECjMCgQcazOH5cgb Lbxlk3Az ishige-jp.com. 771 IN DNSKEY 257 3 5 AwEAAdkEfGdrE7Gom5QnceXGRx3r8RWdHKE26XQc7CotrK4s3nYbQyX5 elKl+LPB+rnITQRynCw1MMCYZzWz1RIirT+JzwSaEqwx80vnjhPPiBOD PkB3V7vGCOuqqe1nCJRn5jGFaG+UaGQNd6LKZ60ZqhS6uV51Fy2WPZUj jDdDFt8X9VHr5yTPw398LNpWn8uRAbL/Ba3LVq4X/Svu6Vh4dBjwVMoA /43TqvD/jGdNcrXGLsiEHR/B5YWme9kayMSfeaw9QLqJk4t6dkHdhut7 kRIZWVk/58zZoEo5Kp62bYL0U5Ypwf8eDnqynKNu62gnRZqEJZAVnj4I Y0qSWyu7K/0=
DNSKEYが表示されればOKです。
スレーブサーバー
-
スレーブサーバーとして動作させるにはマスターサーバー側で予めスレーブサーバーのIPアドレスを許可登録する必要があります。
zone "hogehoge.com" IN { type slave; masterfile-format text; ← テキスト形式で保存 masters { xxx.xxx.xxx.xxx; }; file "slaves/hogehoge.com"; notify no; };
従来はこの受け取ったゾーンファイルはテキスト形式でしたが 9.9.1 以降はraw format形式に変更になってました
「masterfile-format text;」を指定すると従来と同等にテキスト形式で保存することが出来るようですが
起動パフォーマンスが低下するようですので、多くのゾーンを管理しているサーバではraw形式の方が良いようです。
このraw format形式からテキスト形式に戻して確認するには以下の様にします。
# named-checkzone -D -f raw [ドメイン名] [ゾーンファイル名]
-
2017年10月24日(協定世界時)B.ROOT-SERVERS.NETのIPv4アドレスが変更されました。
旧IPv4アドレス: 192.228.79.201
新IPv4アドレス: 199.9.14.201
2017年7月26日(協定世界時)L.ROOT-SERVERS.NETのIPv6アドレスが変更されました。
旧IPv6アドレス: 2001:500:3::42
新IPv6アドレス: 2001:500:9f::42
2015年12月1日(協定世界時)H.ROOT-SERVERS.NETのIPv4/IPv6アドレスが変更されました。
旧IPv4アドレス: 128.63.2.53
旧IPv6アドレス: 2001:500:1::803f:235
新IPv4アドレス: 198.97.190.53
新IPv6アドレス: 2001:500:1::53
2013年1月3日(協定世界時)D.ROOT-SERVERS.NETのIPv4アドレスが変更されました。
旧IPv4アドレス: 128.8.10.90
新IPv4アドレス: 199.7.91.13
2007年11月1日(協定世界時)L.ROOT-SERVERS.NETのIPv4アドレスが変更されました。
旧IPv4アドレス: 198.32.64.12
新IPv4アドレス: 199.7.83.42
ルートサーバーのIPアドレス変更履歴
ルートサーバ
ルートサーバーの一覧・所在地などの情報はhttp://root-servers.org/で確認できます。エニーキャストによる負荷分散を行っているので13台ということではありません。
例)l.rootは161サイトのサーバーを世界中に分散配置して耐障害性と負荷分散を実現しています。
頭文字 | IPv4アドレス | IPv6アドレス | 管理者 | ソフトウェア |
A | 198.41.0.4 | 2001:503:BA3E::2:30 | VeriSign | BIND |
B | 199.9.14.201 | 2001:500:84::b | 南カリフォルニア大学情報科学研究所 | BIND |
C | 192.33.4.12 | 2001:500:2::c | Cogent Communications | BIND |
D | 199.7.91.13 | 2001:500:2d::d | メリーランド大学カレッジパーク校 | BIND |
E | 192.203.230.10 | 2001:500:a8::e | アメリカ航空宇宙局 | BIND |
F | 192.5.5.241 | 2001:500:2f::f | Internet Systems Consortium | BIND9 |
G | 192.112.36.4 | 2001:500:12::d0d | アメリカ国防情報システム局 | BIND |
H | 198.97.190.53 | 2001:500:1::53 | アメリカ陸軍研究所 | NSD |
I | 192.36.148.17 | 2001:7fe::53 | Autonomica(スウェーデン) | BIND |
J | 192.58.128.30 | 2001:503:C27::2:30 | VeriSign | BIND |
K | 193.0.14.129 | 2001:7fd::1 | RIPE NCC(オランダ) | NSD |
L | 199.7.83.42 | 2001:500:3::42 | ICANN | NSD |
M | 202.12.27.33 | 2001:dc3::35 | WIDEプロジェクト(日本) | BIND |