- 追加された行はこの色です。
- 削除された行はこの色です。
* 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