ヘルプ:DNSサーバー構築(BIND)(CentOS Stream)
メインページ > ヘルプ:目次 > ヘルプ:自宅サーバー構築(CentOS Stream) > DNSサーバー構築(BIND)(CentOS Stream)
- 自宅サーバー4号機にインストールし記事修正(2021年04月26日)
- ローカルIPアドレス:192.168.1.4
BINDインストール
bind、bind-chrootインストール
[root@host4 ~]# dnf -y install bind-chroot
BIND設定
BIND設定
[root@host4 ~]# vi /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // // See the BIND Administrator's Reference Manual (ARM) for details about the // configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html options { // listen-on port 53 { 127.0.0.1; }; ← コメントアウト(サーバーの全インターフェースの53番ポートをリスンする) // listen-on-v6 port 53 { ::1; }; ← コメントアウト(IPv6を使わない場合) version "unknown"; ← bindのバージョン情報の非表示化 directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; // allow-query { localhost; localnets; }; ← コメントアウト allow-transfer { none; }; ← 追加(ゾーン情報の転送を禁止) ・ ・ recursion yes; ← 再帰問合せ機能を有効化(内部DNSサーバーとして動作) allow-query { localhost; localnets; }; ← 内部からのみ問合せを許可 allow-recursion { localhost; localnets; }; ← 内部からのみ再帰問合せを許可 allow-query-cache { localhost; localnets; }; ← 内部からのみキャッシュ問合せを許可 forwarders{ 8.8.8.8; 8.8.4.4; }; ← 本DNSサーバー管理外の問合せ先としてGoogleの公開DNSサーバーを指定 ・ ・ dnssec-enable yes; dnssec-validation yes; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; category lame-servers { null; }; ← 追加(error (connection refused) resolvingというエラーログの出力抑止) }; // 内部向け設定開始 view "internal" { match-clients { localnets; }; match-destinations { localnets; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; include "/etc/named/named.localnets.zones"; }; // 内部向け設定終了 // 外部向けの設定開始※固定IPアドレス環境の場合のみ view "external" { match-clients { any; }; match-destinations { any; }; include "/etc/named/named.awanet.jp.zone.wan"; }; // 外部向け設定終了
ゾーン定義ファイル作成
内部向けゾーン定義ファイル作成
[root@host4 ~]# vi /etc/named/named.localnets.zones zone "1.168.192.in-addr.arpa" { type master; file "1.168.192.in-addr.arpa.db"; }; zone "awanet.jp" { type master; file "awnet.jp.db"; }; // 内部向けバーチャルホスト設定開始 zone "sudachi.jp" { type master; file "sudachi.jp.db"; }; zone "awajp.com" { type master; file "awajp.com.db"; // 内部向けバーチャルホスト設定終了
awanet.jpの外部向けゾーン定義ファイル作成※固定IPアドレス環境の場合のみ
[root@host4 ~]# vi /etc/named/named.awanet.jp.zone.wan zone "sudachi.jp" { type master; file "awanet.jp.db.wan"; allow-query { any; }; allow-transfer { XXX.XXX.XXX.XX; ← このゾーン情報の転送先として(セカンダリネームサーバーのIPアドレス)を追加 }; notify yes; ← このゾーン情報変更時は即座に上記セカンダリへ反映させる };
IPv4のみ有効にする
IPv4のみ有効にする(error (network unreachable) resolvingというエラーログの出力抑止)
[root@host4 ~]# echo OPTIONS="-4" >> /etc/sysconfig/named
ルートゾーン最新化
ルートゾーンは世界に13台しかないトップレベルドメインを管理するDNSサーバーのIPアドレスを管理しているファイルで、めったに更新されることはないが、念のため最新化しておく。
[root@host4 ~]# dig . ns @198.41.0.4 +bufsize=1024 > /var/named/chroot/var/named/named.ca
ルートゾーン自動更新
1ヶ月に一度、ルートゾーンが最新かチェックし、更新されていればルートゾーンの最新化及び、BINDの再起動を自動的に行うようにする。
[root@host4 ~]# vi named.root_update ← ルートゾーン最新化スクリプト作成 #!/bin/bash new=`mktemp` errors=`mktemp` dig . ns @198.41.0.4 +bufsize=1024 > $new 2> $errors if [ $? -eq 0 ]; then sort_new=`mktemp` sort_old=`mktemp` diff_out=`mktemp` sort $new > $sort_new sort /var/named/chroot/var/named/named.ca > $sort_old diff --ignore-matching-lines=^\; $sort_new $sort_old > $diff_out if [ $? -ne 0 ]; then ( echo '-------------------- old named.root --------------------' cat /var/named/chroot/var/named/named.ca echo echo '-------------------- new named.root --------------------' cat $new echo '---------------------- difference ----------------------' cat $diff_out ) | mail -s 'named.root updated' root cp -f $new /var/named/chroot/var/named/named.ca chown named. /var/named/chroot/var/named/named.ca chmod 644 /var/named/chroot/var/named/named.ca /etc/rc.d/init.d/named restart > /dev/null fi rm -f $sort_new $sort_old $diff_out else cat $errors | mail -s 'named.root update check error' root fi rm -f $new $errors [root@host4 ~]# chmod 700 named.root_update ← ルートゾーン最新化スクリプトへ実行権限付加 [root@host4 ~]# mv named.root_update /etc/cron.monthly/ ← ルートゾーン最新化スクリプトを毎月自動実行されるディレクトリへ移動
内部向け正引きゾーンデータベース作成
内部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成
[root@host4 ~]# vi /var/named/awanet.jp.db $TTL 86400 @ IN SOA awanet.jp. root.awanet.jp.( 2021051701 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns1.awanet.jp. IN MX 10 awanet.jp. ns1 IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(ns1.awanet.jp用) @ IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(awanet.jp用) www IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(www.awanet.jp用) mail IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(mail.awanet.jp用) host2 IN A 192.168.1.2 ← サーバーのプライベートIPアドレスを指定(host2.awanet.jp用) host3 IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(host3.awanet.jp用) host4 IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(host3.awanet.jp用) * IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(*.awanet.jp用)
内部向け正引きバーチャルホストゾーンデータベース(awajp.com⇒IPアドレス)作成
※バーチャルホストを利用する場合のみ
[root@host4 ~]# vi /var/named/sudachi.jp.db $TTL 86400 @ IN SOA sudachi.jp. root.sudachi.jp.( 2021051701 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns1.awanet.jp. IN MX 10 sudachi.jp. @ IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(awajp.com用) www IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(www.awajp.com用)
[root@host4 ~]# vi /var/named/awajp.com.db $TTL 86400 @ IN SOA awajp.com. root.awajp.com.( 2021051701 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns1.awanet.jp. IN MX 10 awajp.com. @ IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(awajp.com用) www IN A 192.168.1.3 ← サーバーのプライベートIPアドレスを指定(www.awajp.com用)
内部向け逆引きゾーンデータベース作成
内部向け逆引きゾーンデータベース(IPアドレス⇒ドメイン名)作成
[root@host4 ~]# vi /var/named/1.168.192.in-addr.arpa.db $TTL 86400 @ IN SOA awanet.jp. root.awanet.jp.( 2021051701 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns1.awanet.jp. 3 IN PTR ns1.awanet.jp. ← サーバーIPアドレス最下位部(192.168.1.3)とドメイン名を指定 3 IN PTR awanet.jp. ← サーバーIPアドレス最下位部(192.168.1.3)とドメイン名を指定
外部向け正引きゾーンデータベース作成
外部向け正引きゾーンデータベース(ドメイン名⇒IPアドレス)作成
※固定IPアドレス環境の場合のみ
[root@host4 ~]# vi /var/named/awanet.jp.db.wan ← 外部向け正引きゾーンデータベース作成 $TTL 86400 @ IN SOA ns1.awanet.jp. root.awanet.jp.( 2021051701 ; Serial 7200 ; Refresh 7200 ; Retry 2419200 ; Expire 86400 ) ; Minimum IN NS ns1.awanet.jp. IN NS 2nd.dnsv.jp. IN MX 10 awanet.jp. ns1 IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ns1.sudachi.jp用) @ IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(sudachi.jp用) www IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(www.sudachi.jp用) ftp IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(ftp.sudachi.jp用) mail IN A XXX.XXX.XXX.XXX ← サーバーのグローバルIPアドレスを指定(mail.sudachi.jp用) sudachi.jp. IN TXT "v=spf1 ip4:XXX.XXX.XXX.XXX ~all" ← サーバーのグローバルIPアドレスを指定(メールサーバーを構築する場合のみ)
BIND起動
BIND の設定チェック
[root@host4 ~]# named-checkconf
named.conf の記述が正しいければ、何も表示されない。
BIND起動
[root@host4 ~]# systemctl start named-chroot ← BIND起動 [root@host4 ~]# systemctl enable named-chroot ← BIND自動起動設定
BINDをchrootで起動できない
CentOS8のBINDは、namedもnamed-chrootも同じディレクトリに設定ファイルを置きます。
だが、
[root@host4 ~]# systemctl start named
起動するが、
[root@host4 ~]# systemctl start named-chroot
では、エラーが出ることがあります。
[root@host4 ~]# systemctl status named-chroot ・ ・ 9月 20 13:47:19 host4.sudachi.jp named[5745]: using 2 UDP listeners per interface 9月 20 13:47:19 host4.sudachi.jp named[5745]: using up to 4096 sockets 9月 20 13:47:19 host4.sudachi.jp named[5745]: loading configuration from '/etc/named.conf' 9月 20 13:47:19 host4.sudachi.jp named[5745]: /etc/named.conf:71: open: /var/named/named.sudachi.jp.zone: file not found 9月 20 13:47:19 host4.sudachi.jp named[5745]: loading configuration: file not found 9月 20 13:47:19 host4.sudachi.jp named[5745]: exiting (due to fatal error) 9月 20 13:47:19 host4.sudachi.jp systemd[1]: named-chroot.service: control process exited, code=exited status=1 9月 20 13:47:19 host4.sudachi.jp systemd[1]: Failed to start Berkeley Internet Name Domain (DNS). 9月 20 13:47:19 host4.sudachi.jp systemd[1]: Unit named-chroot.service entered failed state. 9月 20 13:47:19 host4.sudachi.jp systemd[1]: named-chroot.service failed.
CentOS8のBIND-chrootは、さきに/etc/named.* とか、/var/named/*.*を、/var/named/chroot以下に自動でマウントします。
上記のエラーを見てみると、ファイルがNotFoundとなっていることから、このマウント処理がうまくいってないようです。
そんな時にチェックして欲しいのが、
[root@host4 ~]# ll /var/named/chroot/var/named [root@host4 ~]# ll /var/named/chroot/etc/named
何かファイルが残ってませんか?
空でなければマウントできないんです。
まとめると、
- chrootディレクトリにはファイルを残さない。
- named-chrootがファイルをchrootディレクトリに自動マウントしてくれるので、chrootでないときと同じ場所にファイルを置く。
- /usr/libexec/setup-named-chroot.sh /var/named/chroot onはnamed-chrootが起動時に自動実行し、終了時に自動解除してくれるので、手動操作をしない。
BIND状態取得
[root@host4 ~]# systemctl status named-chroot ● named-chroot.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2019-10-08 12:45:29 JST; 41min ago Main PID: 22098 (named) CGroup: /system.slice/named-chroot.service └─22098 /usr/sbin/named -u named -t /var/named/chroot 10月 12 13:00:30 host2.sudachi.jp named[964442]: running 10月 12 13:00:30 host2.sudachi.jp systemd[1]: Started Berkeley Internet Name Domain (DNS). 10月 12 13:00:30 host2.sudachi.jp named[964442]: zone 1.168.192.in-addr.arpa/IN/internal: sending notifies> 10月 12 13:00:30 host2.sudachi.jp named[964442]: zone awajp.com/IN/internal: sending notifies (serial 2020> 10月 12 13:00:30 host2.sudachi.jp named[964442]: zone eeljp.net/IN/internal: sending notifies (serial 2020> 10月 12 13:00:30 host2.sudachi.jp named[964442]: zone sudachi.jp/IN/internal: sending notifies (serial 202> 10月 12 13:00:30 host2.sudachi.jp named[964442]: zone sudachi.jp/IN/external: sending notifies (serial 201> 10月 12 13:00:30 host2.sudachi.jp named[964442]: managed-keys-zone/internal: Key 20326 for zone . acceptan> 10月 12 13:00:30 host2.sudachi.jp named[964442]: resolver priming query complete 10月 12 13:00:30 host2.sudachi.jp named[964442]: resolver priming query complete
問合せ先DNSサーバーを自分自身に変更
- nmtui コマンドを使って、DNSサーバーを自分自身[127.0.0.1]に変更する。
[root@host4 ~]# nmtui [root@host4 ~]# systemctl restart NetworkManager.service ← DNSサーバー変更反映