「BIND」の版間の差分
(chroot 環境で実行するの項目を英語版と同期して移動) |
(→再帰を許可: 同期) |
||
(2人の利用者による、間の8版が非表示) | |||
1行目: | 1行目: | ||
− | [[Category: |
+ | [[Category:ドメインネームシステム]] |
[[de:BIND]] |
[[de:BIND]] |
||
[[en:BIND]] |
[[en:BIND]] |
||
12行目: | 12行目: | ||
{{Related|PowerDNS}} |
{{Related|PowerDNS}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
− | Berkeley Internet Name Domain (BIND) は |
+ | 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]。}} |
{{Note|BIND を開発している団体は Linux ディストリビューションよりも最大で4日間早く顧客にセキュリティ情報を提供しています [https://kb.isc.org/article/AA-00861/0/ISC-Software-Defect-and-Security-Vulnerability-Disclosure-Policy.html]。}} |
||
47行目: | 47行目: | ||
forwarders {8.8.8.8;8.8.4.4;}; |
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/>}} ブロック内では定義されていないことに注意してください。 |
||
== デーモンを実行するための設定テンプレート == |
== デーモンを実行するための設定テンプレート == |
||
93行目: | 124行目: | ||
完了したらデーモンを再起動してください。 |
完了したらデーモンを再起動してください。 |
||
+ | == 再帰を許可 == |
||
− | === 3. デフォルトの DNS サーバーに設定 === |
||
− | DNS サーバ |
+ | 自分の 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 サーバ: |
||
− | == 再帰を許可 == |
||
+ | * KSK キーと ZSK キーを生成する |
||
+ | $ dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE example.com |
||
− | 自分の DNS サーバを動かしているなら、すべての DNS 検索に使うか、 [[RFC:7706]] に従って自分でルートゾーンをローカルに提供した方がよいでしょう。前者には、 ''再帰'' ルックアップを実行する機能が必要です。[https://www.us-cert.gov/ncas/alerts/TA13-088A DNS Amplification Attacks] を防ぐために、ほとんどのリゾルバで再帰はデフォルトでオフになっています。デフォルトの Arch {{ic|/etc/named.conf}} ファイルでは、ループバックインターフェイスでのみ再帰が許可されます。 |
||
+ | $ dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE example.com |
||
+ | * ゾーン構成を変更します。 |
||
− | allow-recursion { 127.0.0.1; }; |
||
+ | zone "example.com" { |
||
− | {{Accuracy|LAN ネットワーキングは再帰的ではありません。}} |
||
+ | type master; |
||
+ | allow-transfer { ... }; |
||
+ | auto-dnssec maintain; |
||
+ | inline-signing yes; |
||
+ | key-directory "master/"; |
||
+ | file "master/example.com.zone"; |
||
+ | }; |
||
+ | これで BIND が自動的にゾーンに署名します。(この例では、必要なすべてのファイルが {{ic|/var/named/master/}} にあることを前提としています) |
||
− | ローカルネットワークにネームサービスを提供する場合;たとえば、192.168.0.0/24 の場合、適切なIPアドレスの範囲を {{ic|/etc/named.conf}} に追加する必要があります。 |
||
+ | |||
+ | 次に、レジスター 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 キーを使用します。 |
||
− | allow-recursion { 192.168.0.0/24; 127.0.0.1; }; |
||
+ | OpenDNSSEC のような、完全に自動化された鍵のロールオーバーが可能な外部メカニズムもあります。 |
||
− | == BIND を DNSSEC に対応させる== |
||
− | * http://www.dnssec.net/practical-documents |
||
− | ** http://www.cymru.com/Documents/secure-bind-template.html (設定テンプレート) |
||
− | ** http://www.bind9.net/manuals |
||
− | ** http://www.bind9.net/BIND-FAQ |
||
− | * もしくは OpenDNSSEC (自動キーロールオーバー) などを使ってください。 |
||
== 新しいインターフェイスに自動で接続 == |
== 新しいインターフェイスに自動で接続 == |
||
169行目: | 218行目: | ||
そして systemd をリロード ({{ic|systemctl daemon-reload}}) してからサービスを起動 ({{ic|systemctl start named-chroot.service}}) してください。 |
そして systemd をリロード ({{ic|systemctl daemon-reload}}) してからサービスを起動 ({{ic|systemctl start named-chroot.service}}) してください。 |
||
+ | |||
+ | == ルートゾーンをローカルで提供する == |
||
+ | |||
+ | [[ドメイン名前解決#サードパーティの DNS サービス|サードパーティ DNS サービス]] に依存したくない場合は、[[RFC:7706]] に従ってローカルでルートゾーンを提供できます。これは、DNS 再帰リゾルバーとして BIND を使用することで実現できます。 |
||
+ | |||
+ | 再帰リゾルバーを管理するには、通常、''root hints file'' を設定する必要があります。このファイルには、ルートゾーンの権威ネームサーバーの名前と IP アドレスが含まれています。 |
||
+ | |||
+ | [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] |
* [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] |
2024年10月20日 (日) 08:34時点における最新版
Berkeley Internet Name Domain (BIND) はドメインネームシステム (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;};
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; };
ローカルネットワークにネームサービスを提供する場合;たとえば、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"; };
設定内でも再帰を許可する必要があります。#再帰を許可 を参照してください。