BIND
Berkeley Internet Name Domain (BIND) は Domain Name System(DNS) プロトコルのリファレンス実装です。
目次
インストール
以下の手順は BIND をインストールしてローカルキャッシュサーバーとして設定する方法です。
公式リポジトリにある bind パッケージをインストールしてください。
必要に応じて /etc/named.conf
を編集してローカルホストからしか接続を受け付けないように、以下のようなセクションを追加してください:
listen-on { 127.0.0.1; };
設定した DNS サーバーを使うために /etc/resolv.conf
を編集します:
nameserver 127.0.0.1
named デーモンを起動します。
設定
BIND は /etc/named.conf
で設定されます。使用可能なオプションについては、named.conf(5) を参照してください。
Reload して named.service
ユニットに構成変更を適用します。
localhost へのアクセスを制限する
デフォルトでは、BIND はすべてのインタフェースと IP アドレスのポート53で待機します。localhost からの接続のみを許可するには、/etc/named.conf
の options セクションに次の行を追加します。
listen-on { 127.0.0.1; };
DNS 転送を設定する
BIND が DNS クエリを別の DNS サーバーに転送するには、forwarders を options セクションに追加します。
BIND を Google DNS サーバに転送する例:
forwarders {8.8.8.8;8.8.4.4;};
デーモンを実行するための設定テンプレート
これは BIND でシンプルなホームネットワーク DNS サーバーを作成するための手順です。この例では "domain.tld" というドメインを使用しています。
もっと詳しい説明が欲しい方は Two-in-one DNS server with BIND9 を参照してください。Linux Home Server HOWTO - Domain name system (BIND) にはすぐに内部ネットワークの名前解決をセットアップする方法が載っています。
1. zone ファイルを作成する
# nano /var/named/domain.tld.zone
$TTL 7200 ; domain.tld @ IN SOA ns01.domain.tld. postmaster.domain.tld. ( 2007011601 ; Serial 28800 ; Refresh 1800 ; Retry 604800 ; Expire - 1 week 86400 ) ; Minimum IN NS ns01 IN NS ns02 ns01 IN A 0.0.0.0 ns02 IN A 0.0.0.0 localhost IN A 127.0.0.1 @ IN MX 10 mail imap IN CNAME mail smtp IN CNAME mail @ IN A 0.0.0.0 www IN A 0.0.0.0 mail IN A 0.0.0.0 @ IN TXT "v=spf1 mx"
$TTL (Time to Live) は全てのレコードのデフォルトのパケットの有効期間を秒単位で定義します。この例では7200秒 (2時間) となっています。
Serial は zone レコードを変更し named デーモンを再起動するたびに手動で増やしてください。忘れるとスレーブサーバーに zone 情報が転送されません。スレーブサーバーへの zone 転送は最後に転送された時間から値が増えていなければ転送されません。
2. マスターサーバーを設定する
/etc/named.conf
に zone を追加してください:
zone "domain.tld" IN { type master; file "domain.tld.zone"; allow-update { none; }; notify no; };
完了したらデーモンを再起動してください。
3. デフォルトの DNS サーバーに設定
DNS サーバーを動かしている場合、全ての DNS ルックアップでそのサーバーを使ってみたいと思うかもしれません。これには recursive なルックアップをできるようにする必要があります。DNS 増幅攻撃 をふせぐため、ほとんどのリゾルバでは recursion はデフォルトでオフになっています。デフォルトの Arch の /etc/named.conf
ファイルではループバックデバイスでだけ recursion を許可しています:
allow-recursion { 127.0.0.1; };
そのため、ホストから一般的な DNS ルックアップを使えるようにするには、/etc/resolv.conf
ファイルに次の行を記述する必要があります:
nameserver 127.0.0.1
/etc/resolv.conf
は生成されるファイルなので、/etc/resolvconf.conf
を編集して次の行をアンコメントしてください:
# name_servers=127.0.0.1
/etc/resolvconf.conf
は再起動時に適当に設定されます。
ローカルネットワーク 192.168.0 などにネームサービスを提供したい場合、IP アドレスの適当な範囲を /etc/named.conf
に追加してください:
allow-recursion { 192.168.0.0/24; 127.0.0.1; };
再帰を許可
自分の DNS サーバを動かしているなら、すべての DNS 検索に使うか、 RFC:7706 に従って自分でルートゾーンをローカルに提供した方がよいでしょう。前者には、 再帰 ルックアップを実行する機能が必要です。DNS Amplification Attacks を防ぐために、ほとんどのリゾルバで再帰はデフォルトでオフになっています。デフォルトの Arch /etc/named.conf
ファイルでは、ループバックインターフェイスでのみ再帰が許可されます。
allow-recursion { 127.0.0.1; };
ローカルネットワークにネームサービスを提供する場合;たとえば、192.168.0.0/24 の場合、適切なIPアドレスの範囲を /etc/named.conf
に追加する必要があります。
allow-recursion { 192.168.0.0/24; 127.0.0.1; };
BIND を DNSSEC に対応させる
- http://www.dnssec.net/practical-documents
- もしくは OpenDNSSEC (自動キーロールオーバー) などを使ってください。
新しいインターフェイスに自動で接続
デフォルトで bind は新しいインターフェイスをスキャンし、数時間たったらインターフェイスを切断します。以下を追加することでこの値を調整できます:
interface-interval <rescan-timeout-in-minutes>;
named.conf
の options セクションにパラメータを追加してください。最大値は28日間 (40320分) です。値を0に設定することで機能を無効にすることもできます。
設定を変更したらサービスを再起動して下さい。
chroot 環境で実行する
chroot で実行することは必須ではありませんが、セキュリティが向上します。
監獄の作成
chroot を使うには、まず監獄を維持するための場所を作成する必要があります。ここでは /srv/named
を使用して、必要なファイルを監獄に追加します:
# mkdir -p /srv/named/{dev,etc,usr/lib/engines,var/{run,log,named}}
必要なシステムファイルをコピー:
# cp -av /etc/{localtime,named.conf} /srv/named/etc/ # cp -av /usr/lib/engines/* /srv/named/usr/lib/engines/ # cp -av /var/named/* /srv/named/var/named/.
必要な dev ノードを設定:
# mknod /srv/named/dev/null c 1 3 # mknod /srv/named/dev/random c 1 8
ファイルの所有者を設定:
# chown -R named:named /srv/named
これで監獄に必要なファイルシステムが作成されます。
サービスファイル
次に、chroot で bind を実行できるようにする新しいサービスファイルを作成します:
# cp -av /usr/lib/systemd/system/named.service /etc/systemd/system/named-chroot.service
サービスが bind を実行する方法を編集してください:
/etc/systemd/system/named-chroot.service
ExecStart=/usr/bin/named -4 -f -u named -t "/srv/named"
そして systemd をリロード (systemctl daemon-reload
) してからサービスを起動 (systemctl start named-chroot.service
) してください。