BIND

提供: ArchWiki
ナビゲーションに移動 検索に移動

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 でシンプルなホームネットワーク DNS サーバーを作成するための手順です。この例では "domain.tld" というドメインを使用しています。

もっと詳しい説明が欲しい方は Two-in-one DNS server with BIND9 を参照してください。

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 転送

もし VPN への接続などで問題が生じた場合、転送 DNS サーバーを建てることによって解決することができるでしょう。BIND を使えば簡単です。以下の行を /etc/named.conf のグローバルな options セクションか、特定のゾーンのところに追加してください、IP アドレスは置き換えて下さい。

options {
 listen-on { 192.168.66.1; };
 forwarders { 8.8.8.8; 8.8.4.4; };
};

完了したらデーモンを再起動してください。

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/

必要な 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) してください。

BIND を DNSSEC に対応させる

DNSSEC#BIND (serving signed DNS zones) を見てください。

新しいインターフェイスに自動で接続

デフォルトで bind は新しいインターフェイスをスキャンし、数時間たったらインターフェイスを切断します。以下を追加することでこの値を調整できます:

interface-interval <rescan-timeout-in-minutes>;

named.conf の options セクションにパラメータを追加してください。最大値は28日間 (40320分) です。値を0に設定することで機能を無効にすることもできます。

設定を変更したらサービスを再起動して下さい。

BIND の資料