「BIND」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「[[zh-CN:」を「[[zh-hans:」に置換)
 
(5人の利用者による、間の15版が非表示)
1行目: 1行目:
[[Category:Domain Name System]]
+
[[Category:ドメインネームシステム]]
 
[[de:BIND]]
 
[[de:BIND]]
 
[[en:BIND]]
 
[[en:BIND]]
  +
[[es:BIND]]
 
[[fr:BIND]]
 
[[fr:BIND]]
 
[[zh-hans:BIND]]
 
[[zh-hans:BIND]]
9行目: 10行目:
 
{{Related|Pdnsd}}
 
{{Related|Pdnsd}}
 
{{Related|Unbound}}
 
{{Related|Unbound}}
  +
{{Related|PowerDNS}}
 
{{Related articles end}}
 
{{Related articles end}}
Berkeley Internet Name Domain (BIND) は Domain Name System(DNS) プロトコルのリファレンス実装です。
+
Berkeley Internet Name Domain (BIND) はドメインネームシステム (DNS) プロトコルのリファレンス実装です。
  +
  +
{{Note|BIND を開発している団体は Linux ディストリビューションよりも最大で4日間早く顧客にセキュリティ情報を提供しています [https://kb.isc.org/article/AA-00861/0/ISC-Software-Defect-and-Security-Vulnerability-Disclosure-Policy.html]。}}
   
 
== インストール ==
 
== インストール ==
24行目: 28行目:
   
 
'''named''' デーモンを[[デーモン#デーモンの管理|起動]]します。
 
'''named''' デーモンを[[デーモン#デーモンの管理|起動]]します。
  +
  +
== 設定 ==
  +
  +
BIND は {{ic|/etc/named.conf}} で設定されます。使用可能なオプションについては、{{man|5|named.conf}} を参照してください。
  +
  +
[https://wiki.archlinux.jp/index.php/Systemd#.E3.83.A6.E3.83.8B.E3.83.83.E3.83.88.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB Reload] して {{ic|named.service}} ユニットに構成変更を適用します。
  +
  +
=== localhost へのアクセスを制限する ===
  +
  +
デフォルトでは、BIND はすべてのインタフェースと IP アドレスのポート53で待機します。localhost からの接続のみを許可するには、{{ic|/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;};
  +
  +
=== TLS または HTTPS で DNS を提供する ===
  +
  +
BIND 9.18で DNS over TLS または HTTPS のサービスを有効にするには、証明書を指定して [https://downloads.isc.org/isc/bind9/9.18.0/doc/arm/html/reference.html#tls tls] ブロックを定義し、DNS over TLS および HTTPS リスナー (標準 DNS リスナーと同様) を有効にする [https://downloads.isc.org/isc/bind9/9.18.0/doc/arm/html/reference.html#interfaces listen-on] を追加してください。
  +
  +
{{hc|/etc/named.conf|<nowiki>
  +
tls mycert {
  +
cert-file "<path>.crt";
  +
key-file "<path>.key";
  +
};
  +
  +
options {
  +
// Standard port 53 listeners need to be re-added explicitly
  +
listen-on { any; };
  +
listen-on-v6 { any; };
  +
  +
// Add a DNS over TLS listener on standard port 853
  +
listen-on tls mycert { any; };
  +
listen-on-v6 tls mycert { any; };
  +
  +
// Add a DNS over HTTPS listener on custom port
  +
listen-on port 9443 tls mycert http default { any; };
  +
listen-on-v6 port 9443 tls mycert http default { any; };
  +
  +
// If needed, add a cleartext HTTP listener for a reverse proxy
  +
//listen-on port 8443 tls none http default { 127.0.0.1; };
  +
//listen-on-v6 port 8443 tls none http default { ::1; };
  +
};
  +
...</nowiki>}}
  +
  +
{{ic|tls{}<nowiki/>}} はトップレベルで定義されており、{{ic|options{}<nowiki/>}} ブロック内では定義されていないことに注意してください。
   
 
== デーモンを実行するための設定テンプレート ==
 
== デーモンを実行するための設定テンプレート ==
29行目: 83行目:
 
これは BIND でシンプルなホームネットワーク DNS サーバーを作成するための手順です。この例では "domain.tld" というドメインを使用しています。
 
これは BIND でシンプルなホームネットワーク DNS サーバーを作成するための手順です。この例では "domain.tld" というドメインを使用しています。
   
もっと詳しい説明が欲しい方は [http://www.howtoforge.com/two_in_one_dns_bind9_views Two-in-one DNS server with BIND9] を参照してください。
+
もっと詳しい説明が欲しい方は [https://www.howtoforge.com/two_in_one_dns_bind9_views Two-in-one DNS server with BIND9] を参照してください。[http://www.brennan.id.au/08-Domain_Name_System_BIND.html Linux Home Server HOWTO - Domain name system (BIND)] にはすぐに内部ネットワークの名前解決をセットアップする方法が載っています
   
 
=== 1. zone ファイルを作成する ===
 
=== 1. zone ファイルを作成する ===
70行目: 124行目:
 
完了したらデーモンを再起動してください。
 
完了したらデーモンを再起動してください。
   
  +
== 再帰を許可 ==
=== 3. デフォルトの DNS サーバーに設定 ===
 
   
DNS サーバを動かしている場合ての DNS ルックアップそのサーを使ってみたいと思うかもれませんこれには ''recursive'' ルックアップをできるようにする必要があります。[https://www.us-cert.gov/ncas/alerts/TA13-088A DNS 増幅攻撃] をふせぐため、ほとんどのリゾルバでは recursion はデフォルトでオフになっています。デフォルトの Arch {{ic|/etc/named.conf}} ファイルではループバックデバイスでだけ recursion を許可しています:
+
自分の DNS サーバを動かしているならすべての DNS 検索に使うか、[[RFC:7706]] に従って自分で [[#ルートゾーンをローカルで提供する|ルトゾローカルで提供し方がよょう]] 前者には ''再帰'' ルックアップを実行する機能が必要す。[https://www.us-cert.gov/ncas/alerts/TA13-088A DNS Amplification Attacks] をぐため、ほとんどのリゾルバで再帰はデフォルトでオフになっています。デフォルトの Arch {{ic|/etc/named.conf}} ファイルではループバックインターフェイスでのみ再帰が許可されます
   
 
allow-recursion { 127.0.0.1; };
 
allow-recursion { 127.0.0.1; };
   
  +
{{Accuracy|LAN ネットワーキングは再帰的ではありません。}}
そのため、ホストから一般的な DNS ルックアップを使えるようにするには、{{ic|/etc/resolv.conf}} ファイルに次の行を記述する必要があります:
 
   
  +
ローカルネットワークにネームサービスを提供する場合;たとえば、192.168.0.0/24 の場合、適切なIPアドレスの範囲を {{ic|/etc/named.conf}} に追加する必要があります。
nameserver 127.0.0.1
 
   
  +
{{bc|
{{ic|/etc/resolv.conf}} は生成されるファイルなので、{{ic|/etc/resolvconf.conf}} を編集して次の行をアンコメントしてください:
 
  +
allow-recursion {
# name_servers=127.0.0.1
 
  +
192.168.0.0/24;
{{ic|/etc/resolvconf.conf}} は再起動時に適当に設定されます。
 
  +
fd01:2345:6789::/64;
  +
127.0.0.1;
  +
::1;
  +
};
  +
}}
   
  +
== DNSSEC 署名ゾーンを処理するための BIND の設定 ==
ローカルネットワーク 192.168.0 などにネームサービスを提供したい場合、IP アドレスの適当な範囲を {{ic|/etc/named.conf}} に追加してください:
 
   
  +
[[DNSSEC]] 検証はデフォルトで有効になっています。"edns" が無効になっていないことを必ず確認してください。
allow-recursion { 192.168.0.0/24; 127.0.0.1; };
 
   
  +
マスター DNS サーバ:
== 簡単な DNS 転送 ==
 
  +
* KSK キーと ZSK キーを生成する
   
  +
$ dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE example.com
もし VPN への接続などで問題が生じた場合、転送 DNS サーバーを建てることによって解決することができるでしょう。BIND を使えば簡単です。以下の行を {{ic|/etc/named.conf}} のグローバルな options セクションか、特定のゾーンのところに追加してください、IP アドレスは置き換えて下さい。
 
  +
$ dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com
   
  +
* ゾーン構成を変更します。
options {
 
listen-on { 192.168.66.1; };
 
forwarders { 8.8.8.8; 8.8.4.4; };
 
};
 
   
  +
zone "example.com" {
完了したらデーモンを再起動してください。
 
  +
type master;
  +
allow-transfer { ... };
  +
auto-dnssec maintain;
  +
inline-signing yes;
  +
key-directory "master/";
  +
file "master/example.com.zone";
  +
};
  +
  +
これで BIND が自動的にゾーンに署名します。(この例では、必要なすべてのファイルが {{ic|/var/named/master/}} にあることを前提としています)
  +
  +
次に、レジスター Web サイトを使用して、DS レコード ({{ic|dsset-example.com}} から。) ファイルを親ゾーン所有者に渡す必要があります。親ゾーンを KSK で接続します。
  +
  +
KSK (および対応する DS レコード) は、手動による介入が必要なため、変更しないでください。ZSK は、署名チェックを高速化するために通常はこのキーが短いため、頻繁に変更できます。
  +
  +
以下を使用して、古い ZSK キーの有効期限をスケジュールし、新しい有効期限を生成できます。
  +
  +
$ dnssec-settime -I +172800 -D +345600 Kexample.com.+000+111111.key
  +
$ dnssec-keygen -S Kexample.com.+000+111111.key -i 152800
  +
  +
Bind は適切なタイミングで自動的に新しい ZSK キーを使用します。
  +
  +
OpenDNSSEC のような、完全に自動化された鍵のロールオーバーが可能な外部メカニズムもあります。
  +
  +
== 新しいインターフェイスに自動で接続 ==
  +
  +
デフォルトで bind は新しいインターフェイスをスキャンし、数時間たったらインターフェイスを切断します。以下を追加することでこの値を調整できます:
  +
interface-interval <rescan-timeout-in-minutes>;
  +
{{ic|named.conf}} の options セクションにパラメータを追加してください。最大値は28日間 (40320分) です。値を0に設定することで機能を無効にすることもできます。
  +
  +
設定を変更したらサービスを再起動して下さい。
   
 
== chroot 環境で実行する ==
 
== chroot 環境で実行する ==
108行目: 196行目:
 
# cp -av /etc/{localtime,named.conf} /srv/named/etc/
 
# cp -av /etc/{localtime,named.conf} /srv/named/etc/
 
# cp -av /usr/lib/engines/* /srv/named/usr/lib/engines/
 
# cp -av /usr/lib/engines/* /srv/named/usr/lib/engines/
  +
# cp -av /var/named/* /srv/named/var/named/.
 
必要な dev ノードを設定:
 
必要な dev ノードを設定:
 
# mknod /srv/named/dev/null c 1 3
 
# mknod /srv/named/dev/null c 1 3
130行目: 219行目:
 
そして systemd をリロード ({{ic|systemctl daemon-reload}}) してからサービスを起動 ({{ic|systemctl start named-chroot.service}}) してください。
 
そして systemd をリロード ({{ic|systemctl daemon-reload}}) してからサービスを起動 ({{ic|systemctl start named-chroot.service}}) してください。
   
  +
== ルートゾーンをローカルで提供する ==
== BIND を DNSSEC に対応させる==
 
[[en2:DNSSEC#BIND (serving signed DNS zones)|DNSSEC#BIND (serving signed DNS zones)]] を見てください。
 
   
  +
[[ドメイン名前解決#サードパーティの DNS サービス|サードパーティ DNS サービス]] に依存したくない場合は、[[RFC:7706]] に従ってローカルでルートゾーンを提供できます。これは、DNS 再帰リゾルバーとして BIND を使用することで実現できます。
== 新しいインターフェイスに自動で接続 ==
 
   
  +
再帰リゾルバーを管理するには、通常、''root hints file'' を設定する必要があります。このファイルには、ルートゾーンの権威ネームサーバーの名前と IP アドレスが含まれています。
デフォルトで bind は新しいインターフェイスをスキャンし、数時間たったらインターフェイスを切断します。以下を追加することでこの値を調整できます:
 
interface-interval <rescan-timeout-in-minutes>;
 
{{ic|named.conf}} の options セクションにパラメータを追加してください。最大値は28日間 (40320分) です。値を0に設定することで機能を無効にすることもできます。
 
   
  +
[https://www.iana.org/domains/root/files IANA Web サイト] からファイルを取得し、{{ic|/var/named}} に配置します。
設定を変更したらサービスを再起動して下さい。
 
  +
  +
サーバー設定を編集して、それぞれのファイルを追加します。
  +
  +
{{hc|/etc/named.conf|
  +
zone "." IN {
  +
type hint;
  +
file "named.root";
  +
};
  +
}}
  +
  +
設定内でも再帰を許可する必要があります。[[#再帰を許可]] を参照してください。
   
 
== 参照 ==
 
== 参照 ==
  +
  +
* [https://www.isc.org/downloads/bind/doc/ BIND 9 Administrator Reference Manual]
 
* [http://www.reedmedia.net/books/bind-dns/ BIND 9 DNS Administration Reference Book]
 
* [http://www.reedmedia.net/books/bind-dns/ BIND 9 DNS Administration Reference Book]
 
* [http://shop.oreilly.com/product/9780596100575.do DNS and BIND by Cricket Liu and Paul Albitz]
 
* [http://shop.oreilly.com/product/9780596100575.do DNS and BIND by Cricket Liu and Paul Albitz]

2024年10月20日 (日) 08:34時点における最新版

関連記事

Berkeley Internet Name Domain (BIND) はドメインネームシステム (DNS) プロトコルのリファレンス実装です。

ノート: BIND を開発している団体は Linux ディストリビューションよりも最大で4日間早く顧客にセキュリティ情報を提供しています [1]

インストール

以下の手順は 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;};

TLS または HTTPS で DNS を提供する

BIND 9.18で DNS over TLS または HTTPS のサービスを有効にするには、証明書を指定して tls ブロックを定義し、DNS over TLS および HTTPS リスナー (標準 DNS リスナーと同様) を有効にする listen-on を追加してください。

/etc/named.conf
tls mycert {
    cert-file "<path>.crt";
    key-file "<path>.key";
};

options {
    // Standard port 53 listeners need to be re-added explicitly
    listen-on    { any; };
    listen-on-v6 { any; };
    
    // Add a DNS over TLS listener on standard port 853
    listen-on    tls mycert { any; };
    listen-on-v6 tls mycert { any; };
    
    // Add a DNS over HTTPS listener on custom port
    listen-on    port 9443 tls mycert http default { any; };
    listen-on-v6 port 9443 tls mycert http default { any; };
    
    // If needed, add a cleartext HTTP listener for a reverse proxy
    //listen-on    port 8443 tls none http default { 127.0.0.1; };
    //listen-on-v6 port 8443 tls none http default { ::1; };
};
...

tls{} はトップレベルで定義されており、options{} ブロック内では定義されていないことに注意してください。

デーモンを実行するための設定テンプレート

これは 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;
};

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

再帰を許可

自分の DNS サーバを動かしているなら、すべての DNS 検索に使うか、RFC:7706 に従って自分で ルートゾーンをローカルで提供した方がよいでしょう。 前者には、 再帰 ルックアップを実行する機能が必要です。DNS Amplification Attacks を防ぐために、ほとんどのリゾルバで再帰はデフォルトでオフになっています。デフォルトの Arch /etc/named.conf ファイルでは、ループバックインターフェイスでのみ再帰が許可されます。

allow-recursion { 127.0.0.1; };
この記事またはセクションの正確性には問題があります。
理由: LAN ネットワーキングは再帰的ではありません。 (議論: トーク:BIND#)

ローカルネットワークにネームサービスを提供する場合;たとえば、192.168.0.0/24 の場合、適切なIPアドレスの範囲を /etc/named.conf に追加する必要があります。

allow-recursion {
    192.168.0.0/24;
    fd01:2345:6789::/64;
    127.0.0.1;
    ::1;
};

DNSSEC 署名ゾーンを処理するための BIND の設定

DNSSEC 検証はデフォルトで有効になっています。"edns" が無効になっていないことを必ず確認してください。

マスター DNS サーバ:

  • KSK キーと ZSK キーを生成する
 $ dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE example.com
 $ dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com
  • ゾーン構成を変更します。
 zone "example.com" {
       type master;
       allow-transfer { ... };
       auto-dnssec maintain;
       inline-signing yes;
       key-directory "master/";
       file "master/example.com.zone";
 };

これで BIND が自動的にゾーンに署名します。(この例では、必要なすべてのファイルが /var/named/master/ にあることを前提としています)

次に、レジスター Web サイトを使用して、DS レコード (dsset-example.com から。) ファイルを親ゾーン所有者に渡す必要があります。親ゾーンを KSK で接続します。

KSK (および対応する DS レコード) は、手動による介入が必要なため、変更しないでください。ZSK は、署名チェックを高速化するために通常はこのキーが短いため、頻繁に変更できます。

以下を使用して、古い ZSK キーの有効期限をスケジュールし、新しい有効期限を生成できます。

 $ dnssec-settime -I +172800 -D +345600 Kexample.com.+000+111111.key
 $ dnssec-keygen -S Kexample.com.+000+111111.key -i 152800

Bind は適切なタイミングで自動的に新しい ZSK キーを使用します。

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

ルートゾーンをローカルで提供する

サードパーティ DNS サービス に依存したくない場合は、RFC:7706 に従ってローカルでルートゾーンを提供できます。これは、DNS 再帰リゾルバーとして BIND を使用することで実現できます。

再帰リゾルバーを管理するには、通常、root hints file を設定する必要があります。このファイルには、ルートゾーンの権威ネームサーバーの名前と IP アドレスが含まれています。

IANA Web サイト からファイルを取得し、/var/named に配置します。

サーバー設定を編集して、それぞれのファイルを追加します。

/etc/named.conf
zone "." IN {
    type hint;
    file "named.root";
};

設定内でも再帰を許可する必要があります。#再帰を許可 を参照してください。

参照