bind(DNS)のインストール
「DNSサーバー」と言っても役割が2通りあるのです。
コンテンツとキャッシュサーバー(フルリゾルバー)
クライアントが指定しているのはこの内のキャッシュサーバー(フルリゾルバー)の事です。
フルリゾルバーというのは反復問い合わせに対応しているものです。
ルートサーバーから順に検索して目的のホスト(FQDN)のアドレスを返答してくれます。
このことからインターネットに直接アクセスできることが条件になります。
コンテンツサーバーはドメイン名(FQDN)からIPアドレス(正引き)に変換するゾーン情報を持っているものです。
IPアドレスからドメイン名(FQDN)の情報(逆引き)も持っているものもあります。
正式にドメインを取得し、権限が委任されていればグローバルDNSとして機能します。
コンテンツサーバーには機能としてマスターサーバーとスレーブサーバーがあります。
その名の通りマスターサーバーは親サーバーです。スレーブサーバーはマスターサーバーの複製です。複製するにはゾーン転送機能を利用して行われます。
bind4の名残でプライマリー・セカンダリーなどと解説されていますが、bind8.3以降はマスター・スレーブの方が正しいと思います。
マスターは1台ですが、スレーブは何台あってもよいのです。
インターネット側から見たときにはマスター・スレーブの区別はつきません。
分散型データベース構造の利点ですね。
bindでは正引き情報や逆引き情報の管理としてゾーンと言う名前の単位で管理します。
ゾーン情報のなかに管理者情報やシリアルナンバー、有効期間などが定義されます。
これがSOAレコードと言います。
レコードはリソースレコードとよばれ、この他、NS、MX、A、TXT、PTRなどがあります。
インストール例として以下に紹介します。
# yum -y install bind bind-utils bind-libs bind-chroot 読み込んだプラグイン:fastestmirror インストール処理の設定をしています Determining fastest mirrors * base: ftp.tsukuba.wide.ad.jp * extras: ftp.tsukuba.wide.ad.jp * updates: ftp.tsukuba.wide.ad.jp base | 3.7 kB 00:00 base/primary_db | 4.6 MB 00:00 extras | 3.4 kB 00:00 extras/primary_db | 30 kB 00:00 updates | 3.4 kB 00:00 updates/primary_db | 3.3 MB 00:00 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> Package bind.x86_64 32:9.8.2-0.30.rc1.el6_6.2 will be インストール --> 依存性の処理をしています: portreserve のパッケージ: 32:bind-9.8.2-0.30.rc1.el6_6.2.x86_64 ---> Package bind-chroot.x86_64 32:9.8.2-0.30.rc1.el6_6.2 will be インストール ---> Package bind-libs.x86_64 32:9.8.2-0.30.rc1.el6_6.2 will be インストール ---> Package bind-utils.x86_64 32:9.8.2-0.30.rc1.el6_6.2 will be インストール --> トランザクションの確認を実行しています。 ---> Package portreserve.x86_64 0:0.0.4-9.el6 will be インストール --> 依存性解決を終了しました。 ~途中省略 インストール: bind.x86_64 32:9.8.2-0.30.rc1.el6_6.2 bind-chroot.x86_64 32:9.8.2-0.30.rc1.el6_6.2 bind-libs.x86_64 32:9.8.2-0.30.rc1.el6_6.2 bind-utils.x86_64 32:9.8.2-0.30.rc1.el6_6.2 依存性関連をインストールしました: portreserve.x86_64 0:0.0.4-9.el6 完了しました!
Config設定
プライベート IP アドレスの解決を外部に問い合わせしないようにする方法を追加します。
具体的には「empty-zones-enable yes;」指定して有効にすると、bind が空のゾーンを自動的に作成します。
この他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]
# vi /var/named/chroot/named.conf options { directory "/var/named"; pid-file "/var/named/named.pid"; version ""; recursion yes; blackhole { ← 問い合わせを拒否するクライアントのネットワークアドレス 10/8; 172.16/12; }; listen-on { 127.0.0.1; 192.168.10.129; ← 待ち受ける(サービス提供する)I/FのIPアドレス }; allow-query { 127.0.0.1; 192.168.0.0/24; ← 問い合わせを許可するクライアントのネットワークアドレス }; empty-zones-enable yes; ← 空のゾーンを自動的に作成します。 }; allow-recursion { 127.0.0.1; 192.168.0.0/24; ← 再帰問い合わせを許可するクライアントのネットワークアドレス }; zone "." IN { type hint; file "named.root"; ← ルートネームサーバーのアドレス情報が記載されている }; zone "localhost" IN { ← 自分自身の正引き用 type master; file "localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { ← 自分自身の逆引き用 type master; file "named.local"; allow-update { none; }; }; zone "hogehoge.com" IN { ← 管理するドメインの正引き用 type master; file "hogehoge.com"; allow-update { none; }; }; zone "0.168.192.in-addr.arpa" IN { ← 管理するネットワークアドレスの逆引き用 type master; file "0.168.192.in-addr.arpa"; allow-update { none; }; }; channel "default_syslog" { syslog daemon; severity info; }; # Use with the following in named.conf, adjusting the allow list as needed: key "rndc-key" { algorithm hmac-md5; secret "{md5}secret"; }; # controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; };
/etc/rndc.key はbind9では不要なので削除または名前変更しておきます、
rndcコマンドを利用するときに邪魔になるだけです。
(なぜかRPMパッケージに含まれてます。)
/etc/rndc.confはrndcコマンドを利用するときに必要です。
/etc/rndc.conf options { default-server localhost; default-key "rndc-key"; }; key "rndc-key" { algorithm hmac-md5; secret "{md5}secret"; };
Zoneファイルの設定
# vi localhost.zone $TTL 86400 @ IN SOA ns.hogehoge.com. info.hogehoge.com.( ← SOAは「Start Of Authority」の略、MNAME、RNAME 2002091903 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; minimum ) IN NS @ IN A 127.0.0.1
# vi named.local $TTL 86400 @ IN SOA ns.hogehoge.com. info.hogehoge.com.( 2002091903 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; minimum ) IN NS localhost. 1 IN PTR localhost.
# vi hogehoge.com $TTL 86400 ← ゾーンの各レコードの寿命(Time To Live)の値を秒単位で指定 @ IN SOA ns.hogehoge.com. info.hogehoge.com.( 2002091903 ; ← SERIAL ゾーン情報のシリアル番号(ヴァージョン番号) 3600 ; ← REFRESH スレーブサーバがゾーン情報の更新の有無(「SERIAL」の増加)をチェックする周期 900 ; ← RETRY 再試行の周期、原則としてREFRESHの値の整数分の1の値 1209600 ; ← EXPIRE マ スターサーバがダウンした場合、スレーブサーバはこの数値で提示された期間が経過するまで保持する RFC1912は、2~4週間(1209600~2419200)を推奨 43200 ; ← MINIMUM 「存在しないレコード」の保持期間 ) ; ; Name Server Section ; IN NS ns.hogehoge.com. ; ; Mail Server Section ; @ IN MX 10 smtp.hogehoge.com. ; ; Host Section ; router IN A 192.168.0.1 ns IN A 192.168.0.129 smtp IN A 192.168.0.7 pop IN A 192.168.0.7 www IN A 192.168.0.5
# vi 0.168.192.in-addr.arpa $TTL 86400 @ IN SOA ns.hogehoge.com. info.hogehoge.com.( 2002091904 ; serial 3600 ; refresh 900 ; retry 1209600 ; expire 43200 ; minimum ) ; ; Name Server Section ; IN NS ns.hogehoge.com. ; ; Host Section ; 129 IN PTR ns.hogehoge.com. 1 IN PTR router.hogehoge.com. 5 IN PTR www.hogehoge.com. 7 IN PTR smtp.hogehoge.com. 7 IN PTR pop.hogehoge.com.
hint zone
hint zoneはルートサーバーの情報です、キャッシュサーバーで動作させる為に最新情報に入れ替えます。
# cd /var/named/chroot/var/named/ 直接ルートサーバから取得する方法 # dig +norec ns . @a.root-servers.net > named.root 公開情報から取得する方法 # wget ftp://ftp.rs.internic.net/domain/named.root ; This file holds the information on root name servers needed to ; initialize cache of Internet domain name servers ; (e.g. reference this file in the "cache . " ; configuration file of BIND domain name servers). ; ; This file is made available by InterNIC ; under anonymous FTP as ; file /domain/named.cache ; on server FTP.INTERNIC.NET ; -OR- RS.INTERNIC.NET ; ; last update: May 23, 2015 ; related version of root zone: 2015052300 ; ; formerly NS.INTERNIC.NET ;
2015/05/23 に更新されていることが分かります、頻繁に更新されることはありませんがアナウンスされなくてもチェックしておく方がいいでしょう
ちなみに前回2014/11/05の更新ではIPv6の表記が変更になっていましたが、今回は差分がありませんでした。
文法チェック
# named-checkconf -t /var/named/chroot/
bind起動
# /etc/init.d/named start named を起動中: [ OK ]
クライアントPCから実験
# dig any hogehoge.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> any hogehoge.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64747 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 2 ;; QUESTION SECTION: ;hogehoge.com. IN ANY ;; ANSWER SECTION: hogehoge.com. 86400 IN SOA ns.hogehoge.com. info.hogehoge.com. 2002091903 3600 900 1209600 43200 hogehoge.com. 86400 IN NS ns.hogehoge.com. hogehoge.com. 86400 IN MX 10 smtp.hogehoge.com. ;; ADDITIONAL SECTION: ns.hogehoge.com. 86400 IN A 192.168.10.129 smtp.hogehoge.com. 86400 IN A 192.168.0.7 ;; Query time: 3 msec ;; SERVER: 192.168.10.129#53(192.168.10.129) ;; WHEN: Tue May 12 17:55:43 2015 ;; MSG SIZE rcvd: 144
# dig a www.hogehoge.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> a www.hogehoge.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40921 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.hogehoge.com. IN A ;; ANSWER SECTION: www.hogehoge.com. 86400 IN A 192.168.0.5 ;; AUTHORITY SECTION: hogehoge.com. 86400 IN NS ns.hogehoge.com. ;; ADDITIONAL SECTION: ns.hogehoge.com. 86400 IN A 192.168.10.129 ;; Query time: 1 msec ;; SERVER: 192.168.10.129#53(192.168.10.129) ;; WHEN: Tue May 12 17:56:10 2015 ;; MSG SIZE rcvd: 86
# dig -x 192.168.0.5 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.0.5 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24110 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;5.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 5.0.168.192.in-addr.arpa. 86400 IN PTR www.hogehoge.com. ;; AUTHORITY SECTION: 0.168.192.in-addr.arpa. 86400 IN NS ns.hogehoge.com. ;; ADDITIONAL SECTION: ns.hogehoge.com. 86400 IN A 192.168.10.129 ;; Query time: 2 msec ;; SERVER: 192.168.10.129#53(192.168.10.129) ;; WHEN: Tue May 12 17:56:28 2015 ;; MSG SIZE rcvd: 122
Config設定がミスっている場合
0.168.192.in-addr.arpa のゾーンファイル最終行
5 IN PTR www.hogehoge.com
としてしまい最後に「.」ピリオドをつけわすれると
# dig -x 192.168.0.5 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.0.5 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49957 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;5.0.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 5.0.168.192.in-addr.arpa. 86400 IN PTR www.hogehoge.com.0.168.192.in-addr.arpa. ;; AUTHORITY SECTION: 0.168.192.in-addr.arpa. 86400 IN NS ns.hogehoge.com. ;; ADDITIONAL SECTION: ns.hogehoge.com. 86400 IN A 192.168.10.129 ;; Query time: 1 msec ;; SERVER: 192.168.10.129#53(192.168.10.129) ;; WHEN: Tue May 12 17:57:51 2015 ;; MSG SIZE rcvd: 138
FQDNにドメイン名が補完されて返事が返ってくるので、上記のように0.168.192.in-addr.arpa.が
余分についてしまっている。
ルートサーバーIPアドレス変更の主な履歴
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
ルートサーバ
ルートサーバーの一覧・所在地などの情報は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 |