* BINDのインストール [#f9f18659] #contents ** ダウンロード [#o5039f88] 以下のURLから、最新版のパッケージをダウンロードする。2005年6月11日現在は、bind-9.3.1 が最新であるので、そちらを使用する。 [[ダウンロード:ftp://ftp.isc.org/isc/bind9/]] ** インストール [#c29d7237] ダウンロードが完了したら、パッケージを展開する。 $ tar zxpvf bind-9.3.1.tar.gz configure、make、make install を行なう。特に設定すべきオプションもなく、簡単にインストールは完了する。 $ cd bind-9.3.1 $ ./configure (中略) $ make (中略) # make install それなりに時間が掛かる。5分くらいで終了する。 ** BIND用のユーザー [#d972a1f1] BINDを操作するためのユーザーを作成する。既に作成済みの場合は、不要である。 # groupadd named # useradd -g named -d /var/named -s /bin/false named ** BINDのホームディレクトリ [#e2f6e325] BINDのホームディレクトリを作成する。BINDのユーザー同様、作成済みの場合は不要である。OSインストール時に、DNSサーバがインストールされていれば、この辺りは全て設定されていると思われる。 # mkdir /var/named/ # chown named.named /var/named/ ** 内部向けDNS設定 [#haa539eb] BINDの肝は、全て設定にある。参考にしたサイトを紹介する。 :[[内部向けDNSサーバの構築(自宅でLinuxサーバ):http://www.miloweb.net/bind.html]]|主に設定はここを参考にした :[[BIND9で作るDNSサーバ(@IT):http://www.atmarkit.co.jp/flinux/index/indexfiles/bind9index.html]]|一番最初に見たところ。前述サイトと合わせて見ると良いかも *** named.conf [#obc26469] 全ての基本。各設定ファイルの名前や場所を記載する。場所は、/etc/named.conf となる。セミコロンの付け忘れには、注意する。セミコロンを付け忘れた箇所の設定内容は、反映されない。 options { directory "/var/named"; // 自分で解決出来ない場合は、プロバイダのDNSへ尋ねに行く forwarders { 210.XXX.XX.XX; 210.XXX.XX.XX; }; }; zone "." IN { // キャッシュサーバの設定 type hint; file "named.ca"; }; 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 "omoshiro-joho.com" IN { // omoshiro-joho.comの正引き設定 type master; file "omoshiro-joho.com"; }; zone "0.168.192.in-addr.arpa" IN { // omoshiro-joho.comの逆引き設定 type master; file "0.168.192.in-addr.arpa"; }; *** 正引き設定 [#f34a7757] ドメイン名以下の各ホストに対し、IPアドレスを設定する。設定するファイルは、/var/named/omoshiro-joho.com である。ドメイン名は、最後をドットで終えることに注意する。 $TTL 86400 // ネームサーバと管理者のメールアドレス(@を.に変えている) @ IN SOA pokota.omoshiro-joho.com. root.pokota.omoshiro-joho.com. ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS pokota.omoshiro-joho.com. // ネームサーバ IN A 192.168.0.3 // サブドメインを付けない場合の対応IPアドレス router IN A 192.168.0.1 // IPアドレスとホスト名の対応付け pokota IN A 192.168.0.3 miyu IN A 192.168.0.5 princess IN A 192.168.0.4 ftp IN CNAME pokota // 別名 dns IN CNAME pokota |A|実際のアドレスを表している| |NS|ネームサーバを表している| |CNAME|別名を表している| *** 逆引き設定 [#c4a03876] IPアドレスからホスト名を設定する。設定するファイルは、/var/named/0.168.192.in-addr.arpa である。ドメイン名は、最後をドットで終えることに注意する。 $TTL 86400 @ IN SOA pokota.omoshiro-joho.com. root.pokota.omoshiro-joho.com. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS pokota.omoshiro-joho.com. // ネームサーバ IN PTR omoshiro-joho.com. // 解決するドメイン IN A 255.255.255.0 // サブネットマスク 1 IN PTR router.omoshiro-joho.com. // 192.168.0.1 のホスト名を設定 3 IN PTR pokota.omoshiro-joho.com. // 192.168.0.3 のホスト名を設定 5 IN PTR miyu.omoshiro-joho.com. // 192.168.0.5 のホスト名を設定 4 IN PTR princess.omoshiro-joho.com. // 192.168.0.4 のホスト名を設定 |PTR|逆引きを表す| *** 既存設定ファイルの変更 [#d13d041e] 既存設定ファイルの内容が、DNSの内容と衝突しないように、変更を行なう。特にhostsファイルでは、自身のホスト名の設定を取り消す。詳細な内容については、上述で紹介したリンク先参照とする。 - /etc/hosts - /etc/resolv.conf - /etc/nsswitch.conf - /etc/host.conf ** 起動 [#nda07f10] マシンを再起動して、設定内容を確実に反映させる。その後、BINDを起動する。そういえば、結局 named ユーザーではなく、root で起動してる(汗。 # service named start もしくは、 # /usr/local/sbin/named これで、試しにブラウザから、miyu.omoshiro-joho.com と打ってみて、対象ホストのWebサイトが表示されたら成功である。外部のページも見れるか確認をする。見れない場合は、named.conf の forwarders 箇所を見直す。 もし、うまく行った場合も、/var/log/messages の出力を見て、問題がないか確認する。 - 正しいバージョンのbindが起動しているか(プリインストール済のbindでないか?) - 設定ファイルの記載に誤りはないか(多少誤りがあっても、動作してしまうので、見落とさないように) 続いて別ホストから、このDNSサーバを参照できるようにする。各クライアントから直接DNSサーバを指定しても良いが、ルータに指定して各クライアントがそれを参照する形の方が、後々便利である。 この際、既存のDNSサーバは、プライマリ・セカンダリ共に、削除をしておく(まだセカンダリDNSを作成していないので、空白にしておく)。プライマリが生きていれば、セカンダリの指定が何であろうが問題ないと思ったが、そうでもないようだ。ルータのDNSに、プライマリを自前のDNS、セカンダリを既存のDNSにしたところ、DNSサーバ以外の内部クライアントから、内部DNSが参照できなくなった(外部は参照できる)。ルータ上のセカンダリDNS指定を削除することで、この現象は解決した。 ** 動作テスト [#f0edd4f4] DNSの動作テストには、dig (/usr/local/bin/dig) というコマンドを利用する。 まずは、内部DNSで、ドメインを正引きできるか確認する。 [bokupi@pokota bokupi]$ /usr/local/bin/dig miyu.omoshiro-joho.com ; <<>> DiG 9.3.1 <<>> miyu.omoshiro-joho.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35250 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;miyu.omoshiro-joho.com. IN A ;; ANSWER SECTION: miyu.omoshiro-joho.com. 86400 IN A 192.168.0.5 ;; AUTHORITY SECTION: omoshiro-joho.com. 86400 IN NS pokota.omoshiro-joho.com. ;; ADDITIONAL SECTION: pokota.omoshiro-joho.com. 86400 IN A 192.168.0.3 ;; Query time: 5 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 18 13:45:37 2005 ;; MSG SIZE rcvd: 93 続いて、内部DNSで、IPアドレスを逆引きできるか確認する。 [bokupi@pokota bokupi]$ /usr/local/bin/dig -x 192.168.0.5 ; <<>> DiG 9.3.1 <<>> -x 192.168.0.5 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2330 ;; 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 miyu.omoshiro-joho.com. ;; AUTHORITY SECTION: 0.168.192.in-addr.arpa. 86400 IN NS pokota.omoshiro-joho.com. ;; ADDITIONAL SECTION: pokota.omoshiro-joho.com. 86400 IN A 192.168.0.3 ;; Query time: 2 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 18 13:48:25 2005 ;; MSG SIZE rcvd: 115 続いては、外部のドメインを正引きできるか確認する。これは、forwarder が正しく機能していることの確認となる。 [bokupi@pokota bokupi]$ /usr/local/bin/dig www.yahoo.co.jp ; <<>> DiG 9.3.1 <<>> www.yahoo.co.jp ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61227 ;; flags: qr rd ra; QUERY: 1, ANSWER: 14, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;www.yahoo.co.jp. IN A ;; ANSWER SECTION: www.yahoo.co.jp. 125 IN A 202.93.91.214 www.yahoo.co.jp. 125 IN A 202.93.91.215 www.yahoo.co.jp. 125 IN A 202.93.91.216 www.yahoo.co.jp. 125 IN A 202.93.91.217 www.yahoo.co.jp. 125 IN A 202.93.91.218 www.yahoo.co.jp. 125 IN A 202.93.91.219 www.yahoo.co.jp. 125 IN A 202.229.198.216 www.yahoo.co.jp. 125 IN A 202.229.199.136 www.yahoo.co.jp. 125 IN A 202.229.199.147 www.yahoo.co.jp. 125 IN A 203.141.35.113 www.yahoo.co.jp. 125 IN A 210.80.242.236 www.yahoo.co.jp. 125 IN A 210.80.243.14 www.yahoo.co.jp. 125 IN A 210.81.3.241 www.yahoo.co.jp. 125 IN A 210.81.150.5 ;; AUTHORITY SECTION: yahoo.co.jp. 880 IN NS dnsg01.yahoo.co.jp. yahoo.co.jp. 880 IN NS dnsn201.yahoo.co.jp. ;; ADDITIONAL SECTION: dnsg01.yahoo.co.jp. 15541 IN A 211.14.12.10 dnsn201.yahoo.co.jp. 48601 IN A 202.229.198.120 ;; Query time: 46 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 18 13:50:31 2005 ;; MSG SIZE rcvd: 332 続いては、外部のIPを逆引きできるか確認する。これは、forwarder が正しく機能していることの確認となる。 [bokupi@pokota bokupi]$ /usr/local/bin/dig -x 202.93.91.214 ; <<>> DiG 9.3.1 <<>> -x 202.93.91.214 ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12601 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2 ;; QUESTION SECTION: ;214.91.93.202.in-addr.arpa. IN PTR ;; ANSWER SECTION: 214.91.93.202.in-addr.arpa. 900 IN PTR i.top.vip.bbt.yahoo.co.jp. ;; AUTHORITY SECTION: 91.93.202.in-addr.arpa. 900 IN NS dnsg01.yahoo.co.jp. 91.93.202.in-addr.arpa. 900 IN NS dnsn201.yahoo.co.jp. ;; ADDITIONAL SECTION: dnsg01.yahoo.co.jp. 900 IN A 211.14.12.10 dnsn201.yahoo.co.jp. 900 IN A 202.229.198.120 ;; Query time: 33 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sat Jun 18 13:51:44 2005 ;; MSG SIZE rcvd: 158 ** 外部向け設定 [#j7f097d3] 参考にしたサイトは以下の通り。 - [[外部/内部向けDNSサーバー構築(BIND):http://fedorasrv.com/bind-wan.shtml]] - [[DNS(BIND)の設定(外向き):http://64.233.179.104/search?q=cache:HOWp-T3X3ZEJ:acorn.zive.net/~oyaji/dns/bind_linux_out.htm+view+lan+wan+bind&hl=ja&lr=lang_ja&client=firefox-a]] 内部向けの設定に、外部向け正引きの設定を追加する。具体的に必要となるのは、次の3点。 - named.confの修正 - 外部向け正引きの設定 - ドメインのネームサーバ指定変更 *** named.conf 修正 [#s2db6a37] // generated by named-bootconf.pl // ローカルネットの範囲を指定する acl localnet { 192.168.0.0/24; 127.0.0.1; }; options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; // 問い合わせ元制限(デフォルとして指定) allow-query { localnet; // 冒頭で指定している }; // 再帰検索制限(キャッシュサーバ利用) allow-recursion { localnet; }; // 転送先制限 allow-transfer { localnet; }; forwarders { 192.168.0.1; // ルータ 210.135.90.1; // プロバイダのプライマリDNS 210.135.65.2; // プロバイダのセカンダリDNS }; }; logging { // 所定のエラーログの出力を、抑制する category lame-servers { null; }; }; // 内部向けの設定(view に続く文字列は、何でも良い) view "lan" { // マッチするのは、LAN環境のクライアントのみ match-clients { localnet; }; // // a caching only nameserver config // zone "." IN { type hint; file "named.ca"; }; 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 "omoshiro-joho.com" IN { type master; file "omoshiro-joho.com"; }; zone "0.168.192.in-addr.arpa" IN { type master; file "0.168.192.in-addr.arpa"; }; }; // 外部向けの設定 view "wan" { // 全てのクライアントにマッチ // (ただし、LAN環境のクライアントは、先に書かれた"lan"viewで処理される) match-clients { any; }; // 外部向けドメイン正引きの設定 zone "omoshiro-joho.com" IN { type master; file "omoshiro-joho.com.global"; allow-query { any; }; }; }; 上側に記述されたviewから順番に、match-clients で指定された条件にマッチする view を探していく。 *** 外部向けの正引き設定 [#a5df34a4] $TTL 86400 @ IN SOA omoshiro-joho.com. root.pokota.omoshiro-joho.com. ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS omoshiro-joho.com. @ IN A 61.122.77.57 基本的に内部向けの正引き設定と同じである。今回は、サブドメインを何も指定しないため、A レコードは、@(ホスト名なしを意味する)に対して、グローバルIPを割り当てればOK。 *** 外部向けDNSの動作テスト [#r908d413] DNSの動作テストには、dig (/usr/local/bin/dig) というコマンドを利用する。特に外部向けDNSは、正しく動作しないと自ドメインへのアクセスが不能になり、多大な影響をもたらすため、確実に動作テストを履行する。 $ /usr/local/bin/dig @61.122.77.57 omoshiro-joho.com しかし、ルータなどを介して NAT を行なっている場合、正しい結果は得られない。ルータのWAN側IPアドレスである 61.122.77.57 を、LAN側IPアドレスとしてしまうためである。そこで、このコマンドは、外部から発行する必要がある。無料でそのようなサービスを実施しているサイトがあるので、下記に紹介しておく。 - [[nslookup(dig)テスト【DNSサーバ接続確認】:http://www.cman.jp/network/support/nslookup.html]] 上記のサイトで、実行すると、下記のような結果レポートが出力される。 発行コマンド 「dig @61.122.77.57 omoshiro-joho.com」 ------------------------------------------------------------------------ ; <<>> DiG 9.2.4 <<>> @61.122.77.57 omoshiro-joho.com ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36430 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;omoshiro-joho.com. IN A ;; ANSWER SECTION: omoshiro-joho.com. 86400 IN A 61.122.77.57 ;; AUTHORITY SECTION: omoshiro-joho.com. 86400 IN NS omoshiro-joho.com. ;; Query time: 158 msec ;; SERVER: 61.122.77.57#53(61.122.77.57) ;; WHEN: Sat Jun 18 16:10:59 2005 ;; MSG SIZE rcvd: 65 digの実行ボタンの横の欄にドメイン名を、DNSサーバを指定場合の欄に、今回設定したDNSサーバのIPアドレスを入力する。すると、今回設定したDNSサーバが自身のドメイン名に関する問い合わせに対し、正しく応答しているかを確認できる。 *** ドメインのネームサーバ指定変更 [#h93889ef] レジストラのサイトなどに用意されている、ドメイン管理ツールにて、自ドメインのネームサーバを変更する。うちでは、ネットグルーヴ社からドメインを取得したので、そこの管理ツールをベースにした内容を、記載する。 まず、取得したドメインと同じドメインベースのDNSサーバを指定する場合は、先に「ホスト登録」を行なう必要がある。ここでサブドメインを何も指定しないとエラーになるので、適当に ns など入れて、次の画面で ns を消すことで、サブドメインなしのドメイン名で登録できる。 最後に、ホスト登録したネームサーバを、ドメインのプライマリネームサーバとして、設定する。 ** セカンダリサーバの設定 [#la82c198] セカンダリサーバとは、プライマリサーバに障害が起きた場合の、予備用のDNSサーバである。プライマリサーバの情報を、逐次コピーしている。セカンダリサーバは自前で用意するのではなく、無料で公開されているサービスを利用する。 *** zoneedit で登録 [#u332c439] これまで利用していた無料DNSサービスの、zoneeditを利用する。zoneedit では、セカンダリDNSサービスも提供している。登録方法については、やや分かりづらいので、下記サイトを参照する。 - [[kousukeの自宅サーバ:http://www.koro.info/web/index.asp]] 単純に設定の流れを述べると、上部メニューから「Advanced」と選択し、下部にある「Make this Zone a Slave/Secondary」を選択する。すると、セカンダリサーバの設定画面となるので、マスターDNSを自宅サーバに変更する。 *** named.conf の修正 [#a72c0130] 以下に、修正部分を抜粋する。 view "wan" { match-clients { any; }; zone "omoshiro-joho.com" IN { type master; file "omoshiro-joho.com.global"; allow-query { any; }; // セカンダリDNS の IPアドレスを指定 allow-transfer { 216.122.4.160; }; // 変更したら、セカンダリDNSサーバへ通知する notify yes; }; *** 外部向け正引きの設定の修正 [#y51e1de2] NSレコードに、セカンダリDNSサーバを追加する。 $TTL 86400 @ IN SOA omoshiro-joho.com. root.pokota.omoshiro-joho.com. ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS omoshiro-joho.com. // セカンダリDNSサーバを指定する IN NS ns13.zoneedit.com. IN A 61.122.77.57 *** ドメインのネームサーバ指定変更 [#r3e22bf0] セカンダリネームサーバとして、zoneeditで設定した内容を、指定する。zoneeditで表示された NameServer1 を指定すればよい。 ドメインレジストラのサイトへ行き、セカンダリネームサーバを設定する、zoneeditで表示された NameServer1 を指定すればよい。 *** 動作テスト [#lbb39a05] これまでと同様に、dig コマンドを利用する。NS レコードに、zoneeditのネームサーバと、自身のネームサーバが表示されていることを確認する。反映されるまで、しばらく時間がかかるので、注意すること。 [bokupi@pokota bokupi]$ /usr/local/bin/dig @216.122.4.160 omoshiro-joho.com ; <<>> DiG 9.3.1 <<>> @216.122.4.160 omoshiro-joho.com ; (1 server found) ;; global options: printcmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44658 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 0 ;; QUESTION SECTION: ;omoshiro-joho.com. IN A ;; ANSWER SECTION: omoshiro-joho.com. 86400 IN A 61.122.77.57 ;; AUTHORITY SECTION: omoshiro-joho.com. 86400 IN NS ns13.zoneedit.com. omoshiro-joho.com. 86400 IN NS omoshiro-joho.com. ;; Query time: 179 msec ;; SERVER: 216.122.4.160#53(216.122.4.160) ;; WHEN: Sat Jun 18 22:58:54 2005 ;; MSG SIZE rcvd: 93 ** 更にドメインの追加 [#d8db5929] 複数のドメインを管理することもできる。 *** named.conf [#o0e17a29] まず、named.conf に、追加したいドメインについて記述する。 view "wan" { match-clients { any; }; (中略) // 追加したいドメイン zone "tv-senshi.net" IN { type master; file "tv-senshi.net.global"; allow-query { any; }; }; }; *** 外部向け正引きの設定 [#fda01ea2] tv-senshi.net.global というファイルを作成する。 TTL 86400 @ IN SOA tv-senshi.net. root.pokota.omoshiro-joho.com. ( 42 ; serial (d. adams) 3H ; refresh 15M ; retry 1W ; expiry 1D ) ; minimum IN NS tv-senshi.net. @ IN A 61.122.77.57 *** ドメインのネームサーバ指定変更 [#n931745b] これまでと同様に、ネームサーバの登録を行なう。なお "tv-senshi.net" は、メインで使うドメインではないため、セカンダリDNSは設けていない。 ** 問題点 [#k3ed4163] インストールや運用のさいに遭遇した問題点を書いておきます。 *** 内部向けと外部向けが正しく分岐処理されない [#we52faaa] view による分岐処理が成功せず、常に最初の view の中身を実行してしまうため、外部からの問い合わせに対し、"192.168.0.3" といったローカルアドレスを返していた。 原因は、bind9 ではなく、既存の bind8 を起動していたためであった。bind8 は view には対応しておらず、起動時に文法エラーのメッセージが出ていた。実際の動作においては、view を無視する形で動作していた模様である。 *** 起動に失敗 [#f159a33f] 以下のようなログが出て、起動に失敗。これは、/var/run の所有者が root なのに、named ユーザーで起動したため、pid ファイルを作成する(deamon)ことができずに、発生している。kernel2.2 系で bind9 を利用時に起きる問題のようだが、応急処置として、/var/run のパーミッションを 0777 とした。 couldn't open pid file '/var/run/named.pid' : Permission denied