BINDの設定ファイルをしっかり書いたと思ったのに反映されなかった原因
BINDの設定書き換え
BINDの設定ファイルの書き方を含めた、自分が過去に書いたBIND関連記事を見ながらBINDの設定を変更しました。しかし、全く反映されない。正確に言うと、変更前の設定は確かに無効になっているのに、新しい設定が読み込まれない状態でした。
原因
原因は、「BIND導入記04 設定ファイル編 後編」でも触れていた、データベースファイルの3行目にある設定ファイルの通し番号を更新していなかったことが原因でした。リンク先の記事でしっかりと
また、2009010701という数字は、このファイルの更新のたびに増加するようにしてください。
のように注意を促しておきながら、自分が見事にはまってしまいました。
まとめ
BINDの設定はミスしやすい。
DNS & BIND 第5版
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
BIND9によるDNSサーバ構築
BINDインストールTIPS hosts.allow, hosts.deny 編
BINDをインストールする最中に気がついたことをインストールTIPSとして紹介します
hosts.allow, hosts.deny ファイル
BINDの動作をnslookupで確認しようとしたとき、
No response from serverと表示されてしまったので、アクセスすらできていないことから、「hosts.allow」「hosts.deny」が思い浮かびました。
結論から言うと
結論から言うと、「BINDに関してはhosts.allowファイルもhosts.denyファイルも関係ありません」ということです。
なぜ関係ないのか
そもそも、hosts.allow,hosts.denyは、TCP Wrapperを利用するプログラムの通信を制限する設定ファイルなので、TCP Wrapperを利用していないBINDの通信には何の関係もないのです。
hosts.allow, hosts.denyが関係するプログラムとは
ずばりhosts.allow, hosts.denyが関係してくるプログラムは、TCP Wrapperを利用しているプログラムのことです。そして、TCP Wrapperの実態はlibwwrapという共有ライブラリです。つまり、hosts.allow, hosts.denyで通信相手を制限できるのは、libwrapを利用しているプログラムのみということになります。
共有ライブラリの利用状況を調べるには
つまり、プログラムが共有ライブラリlibwrapを利用しているかどうかが分かれば、hosts.allow, hosts.denyを設定する必要があるかどうかが判断できるわけです。
そのためには、lddコマンドを利用します。 たとえば、代表的なhosts.allow, hosts.denyを利用するプログラムであるsshdについてlddコマンドを利用してみます。
すると、このようにsshdが利用しているライブラリの一覧を取得することができます。そして、この中に確かに「libwrap」があることが確認できます。よって、sshdはhosts.allow, hosts.denyの制御の影響を受けるわけです。$ ldd /usr/sbin/sshd libwrap.so.0 => /lib64/libwrap.so.0 (0x00002ae70961f000) libpam.so.0 => /lib64/libpam.so.0 (0x00002ae709828000) libdl.so.2 => /lib64/libdl.so.2 (0x00002ae709a33000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002ae709c38000) libaudit.so.0 => /lib64/libaudit.so.0 (0x00002ae709e50000) libfipscheck.so.1 => /usr/lib64/libfipscheck.so.1 (0x00002ae70a06a000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002ae70a26d000) libutil.so.1 => /lib64/libutil.so.1 (0x00002ae70a5be000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002ae70a7c1000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00002ae70a9d6000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00002ae70abee000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002ae70ae26000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002ae70b03c000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002ae70b26a000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002ae70b4ff000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002ae70b725000) libnss3.so => /usr/lib64/libnss3.so (0x00002ae70b927000) libc.so.6 => /lib64/libc.so.6 (0x00002ae70bc52000) /lib64/ld-linux-x86-64.so.2 (0x00002ae709402000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002ae70bfaa000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002ae70c1f0000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002ae70c3f9000) libnssutil3.so => /usr/lib64/libnssutil3.so (0x00002ae70c5fb000) libplc4.so => /usr/lib64/libplc4.so (0x00002ae70c818000) libplds4.so => /usr/lib64/libplds4.so (0x00002ae70ca1d000) libnspr4.so => /usr/lib64/libnspr4.so (0x00002ae70cc20000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002ae70ce5a000)
BINDデーモンnamedについて確認する
では、BINDはどうかというと、
を見ての通り、libwrapがありません。つまり、BINDにhosts.allow, hosts.denyの設定は無意味という訳です。$ ldd /usr/sbin/named liblwres.so.9 => /usr/lib64/liblwres.so.9 (0x00002b819e041000) libdns.so.26 => /usr/lib64/libdns.so.26 (0x00002b819e252000) libbind9.so.0 => /usr/lib64/libbind9.so.0 (0x00002b819e573000) libisccfg.so.1 => /usr/lib64/libisccfg.so.1 (0x00002b819e77c000) libcrypto.so.6 => /lib64/libcrypto.so.6 (0x00002b819e996000) libgssapi_krb5.so.2 => /usr/lib64/libgssapi_krb5.so.2 (0x00002b819ece7000) libisccc.so.0 => /usr/lib64/libisccc.so.0 (0x00002b819ef16000) libisc.so.15 => /usr/lib64/libisc.so.15 (0x00002b819f11e000) libnsl.so.1 => /lib64/libnsl.so.1 (0x00002b819f360000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b819f579000) libdbus-1.so.3 => /lib64/libdbus-1.so.3 (0x00002b819f794000) libc.so.6 => /lib64/libc.so.6 (0x00002b819f9cf000) libdl.so.2 => /lib64/libdl.so.2 (0x00002b819fd27000) libz.so.1 => /usr/lib64/libz.so.1 (0x00002b819ff2b000) libkrb5.so.3 => /usr/lib64/libkrb5.so.3 (0x00002b81a013f000) libk5crypto.so.3 => /usr/lib64/libk5crypto.so.3 (0x00002b81a03d5000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00002b81a05fa000) libkrb5support.so.0 => /usr/lib64/libkrb5support.so.0 (0x00002b81a07fc000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00002b81a0a05000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00002b81a0c07000) /lib64/ld-linux-x86-64.so.2 (0x00002b819de24000) libcap.so.1 => /lib64/libcap.so.1 (0x00002b81a0e1c000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00002b81a1021000) libsepol.so.1 => /lib64/libsepol.so.1 (0x00002b81a1239000)
まとめ
今回のまとめはこんな感じ
- BINDに対するhost.allow, hosts.denyの設定は無意味
-
hosts.allow, hosts.denyがプログラムに対して有効かどうかを判定するためには
$ ldd (プログラム) | grep libwrap
としてみればよい
BIND導入記06 動作確認編
前回まででBINDの起動が終了しました。続いて、BIND正しく動作しているかの確認を行います。
動作確認環境
今回は、BINDサーバの動作確認をWindowsから行います。今回利用したのはWindows Vistaですが、ほかでもたいし変わりません。
DNSサーバの指定方法
DNSサーバは、DHCPを利用している環境では、プライベートIPアドレスの割り当てと同時に指定されるので、DNSサーバの指定を変更するためには、DHCPを行っているサーバもしくはブロードバンドルータの設定を変更します。
しかし、ルータの再起動が必要になるなど、動作確認で利用するにはめんどくさい方法です。
そこで今回は、特定のWindows PCのDNSサーバを直接指定することにします。
利用するDNSサーバを直接指定する
まず、コントロールパネルもしくはスタートから、「ネットワーク接続(コントロールパネル>ネットワークとインターネト>ネットワーク接続)」を開きます。そして、利用している回線(普通はローカルエリア接続もしくはワイヤレスネットワーク接続)を右クリックし、「状態」を表示します。状態表示の中の「プロパティ」をクリックし、プロパティを表示します。
続いて、「この接続は次の項目を使用します」の中から、「インターネット プロトコル バージョン4(TCP/IPv4)」を選択した状態で「プロパティ(R)」をクリックします。
「全般>次のDNSサーバーのアドレスを使う(E)」を選択して、「優先DNSサーバ」に、BINDをインストールしたサーバのIPアドレスを指定します。指定したらOKをクリックし、開いていたウィンドウを閉じて設定完了です。
この設定を戻すときは、「DNSサーバのアドレスを自動的に取得する」を選択し直せばOKです。
DNSキャッシュをフラッシュ(消去)する
動作確認をする前に、今までのDNSサーバの履歴があると問題解決に不都合が生じることがあるので、履歴(キャッシュ)を消去します。
コマンドプロンプトを右クリックで「管理者として実行」を選択して起動します。
起動したら、
>ipconfig /flushdnsを実行します。これで
DNS リゾルバ キャッシュは正常にフラッシュされました。と表示されれば、キャッシュが消去されたことになります。
登録したアドレスが取得できるか確認する
引き続きコマンドプロンプトを利用します。example.netに192.168.1.21というIPアドレスを登録していたとすると、コマンドプロンプトで、
>nslookup example.netを実行し、
サーバー: example.netと表示されればOKです。登録されていたIPアドレスを正しく取得できました。
Address: 192.168.1.21
名前: example.net
Address: 192.168.1.21
登録されていないアドレスが取得できるか確認する
登録したアドレスexample.net以外も取得できるはずなので、コマンドプロンプトで
>nslookup yahoo.co.jpを実行し、ただしくIPアドレスが返ってくることを確認してください。
結果
以上の動作確認が完了すれば、BINDサーバをとりあえず正しく設定できていることになります。
次回
ここまででインストール・設定・起動・動作確認までが終了しましたが、そうそううまくいきません。自分がそうでした。
そこで、BINDをインストールするに当たってつまづいたポイントを以降の記事で紹介しておこうと思います。
BIND9によるDNSサーバ構築
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
DNS & BIND 第5版
BIND導入記05 起動編
前回までに、BINDの設定ファイルを作成し終えました。あとは起動するだけです。
namedの起動
BINDの実態は、「named」というデーモンです。これを起動するためには、
# /etc/rc.d/init.d/named startを実行すればOKです。
namedを起動中 [OK]となれば正常起動です。また、OSの起動時に自動的に実行するためには、
# chkconfig named onとすればOKです。
次回
次回は、動作確認編です。正しく動作しているかを確認します。
BIND9によるDNSサーバ構築
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
DNS & BIND 第5版
BIND導入記04 設定ファイル編 後編
前回に引き続き、設定ファイルを作成していきます。
ゾーン定義ファイル作成
まず、
/var/named/chroot/etc/named.example.zoneを作成します。内容は、DDNSで取得したアドレスをexample.netとすると、
となります。 ここでのポイントは、example.netと結びつけたいプライベートアドレスを192.168.1.21としたときに、この設定ファイル中で「file "21.1.168.192.in-addr.arpa"」などにしないことです。21はいりません。zone "example.net" { type master; file "example.net.db"; allow-update { none; }; }; zone "1.168.192.in-addr.arpa" { type master; file "1.168.192.in-addr.arpa.db"; allow-update { none; }; };
ゾーンデータベース作成
いよいよ、DNSらしく、アドレス変換テーブルを作成します。今回作成するのは、正引き用・逆引き用の2種類です。
正引き用データベース
とりあえず、
/var/named/chroot/var/named/example.net.dbに、以下のような内容でファイルを作成してください。これは、DDNSで取得したexample.netというアドレスを、192.168.1.21というアドレスに結びつける場合です。
ポイントですが、まず$TTLの項目を忘れないこと。また、現在あるSOA,NS,Aはどれも必須です。こう見えて最低限です。確実にすべて入力してください。また、何カ所かよくわからない数字があると思いますが、2009010701が2009年01月07日01番目という意味であることをのぞき、そのままの数値にしてください。また、2009010701という数字は、このファイルの更新のたびに増加するようにしてください。$TTL 86400 @ IN SOA example.net. root.example.net. ( 2009010701 28800 14400 3600000 86400 ) IN NS example.net. @ IN A 192.168.1.21
注意点として、example.net.は、netの後にドットが付いています。その他のアドレスにもドットが付いています。必要だったか忘れましたが、付ける方が正式なので付けておいてください。また、root.example.net.は、何かあったときに通知がいくメールアドレスで、root.example.netは、@をドットに置き換えたメールアドレスとなっています。
逆引き用データベース
正引き用と同じように、
/var/named/chroot/var/named/1.168.192.in-addr.arpa.dbに、以下のような内容で設定ファイルを作成してください。
正引き用との違いに注意して作成してください。「21」の部分は、「192.168.1.21」の「21」を示しています。また、正引きの時のAレコードの代わりにPTRレコードとなっています。その他は正引き用と一緒です。$TTL 86400 @ IN SOA example.net. root.example.net. ( 2009010701 28800 14400 3600000 86400 ) IN NS example.net. 21 IN PTR example.net.
次回
次回は、いよいよBINDの起動・実行についてです。
BIND9によるDNSサーバ構築
DNS & BINDクックブック―ネームサーバ管理者のためのレシピ集
DNS & BIND 第5版