Contents
概要
外部向けのDNSサーバーを構築します。このDNSサーバーはインターネットから自身が管理しているドメインの名前解決を提供します。
前提条件
OS
CentOS Stream 8を使用します。
SELinux
有効です。無効にする場合はこちらを参照して下さい。
Firewalld
無効です。有効化する場合はこちらを参照して必要な許可設定をして下さい。
標準ポート番号
TCP:53 (DNS), UDP:53 (DNS)
通常はUDPが使われます。TCPはゾーン転送やデータサイズにより使用されるようです。
所感
基本的に内部向けDNSサーバーと同じですが、「recursion no;」で再帰問い合わせを無効にしていることがポイントです。
設定
インストール
BINDをインストールします。bind-chrootが必要ならそれでも構いませんし、後続の設定や手順に変わりはありません。尚、bind-chrootはコンテナ環境ではうまく動きませんでした。
[root@centos ~]# dnf install bind
ゾーンファイル格納用ディレクトリ
デフォルトのゾーンファイル格納先は/var/namedですが、他のファイルも格納されているため、管理上、ディレクトリを分けています。必須ではありませんので、好みに応じて設定して下さい。
[root@centos ~]# mkdir /var/named/myzone [root@centos ~]# chmod 770 /var/named/myzone [root@centos ~]# chgrp named /var/named/myzone
/etc/named.conf
named.confはBINDの設定ファイルです。
named.confのデフォルト値
コメント行等を削除したnamed.confは下記の通りです。
options { listen-on port 53 { 127.0.0.1; }; listen-on-v6 port 53 { ::1; }; 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"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { localhost; }; recursion yes; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; include "/etc/crypto-policies/back-ends/bind.config"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; };
named.confの設定
named.confを編集します。
[root@centos ~]# vi /etc/named.conf options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; 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"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { any; }; recursion no; dnssec-enable yes; dnssec-validation yes; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; include "/etc/crypto-policies/back-ends/bind.config"; version ""; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; zone "si1230.com" { type master; file "myzone/si1230.com.zone"; };
- listen-on port
- デフォルト値は127.0.0.1です。anyに変更します。IPアドレスを指定すれば特定のインターフェイスだけ有効にできます。
- allow-query
- デフォルト値はlocalhostです。anyに変更します。IPアドレス、ネットワークアドレスを指定すれば範囲を限定できます。
- recursion
- デフォルト値はyesです。この設定値は再帰問い合わせの有効有無を制御しており、外部に公開するDNSサーバーでは、リゾルバとして利用されてしまう可能性があるため、リゾルバの要件がなければ必ずnoに変更します。
- version
- 追加です。BINDのバージョン情報を非表示にします。
- zone “si1230.com”
- si1230.com(例)の正引き設定です。デフォルトの格納先の場合はmyzone/が不要です。
本稿ではインターネットに公開するDNSの逆引きは設定していません(必須ではありません)。逆引きの設定可否はISPに依存する為、必要に応じて設定して下さい。
ゾーンファイル
各ゾーンファイルを作成します。
正引き用ゾーンファイル
正引き用ゾーンファイルを作成します。xxx.xxx.xxx.xxxはグローバルIPアドレスです。
[root@centos ~]# vi /var/named/myzone/si1230.com.zone
$TTL 172800
@ IN SOA dns.si1230.com. root.si1230.com. (
2021042701
3600
300
360000
86400
)
IN NS dns.si1230.com.
IN MX 10 smtp.si1230.com.
@ IN A xxx.xxx.xxx.xxx
@ IN TXT [TXT Record]
dns IN A xxx.xxx.xxx.xxx
smtp IN A xxx.xxx.xxx.xxx
www IN A xxx.xxx.xxx.xxx
外部に公開するWebサーバーがGoogleのGoogle Search Consoleと連携する際、DNSサーバーにTXTレコードの追加が必要です。BINDの場合は上記のように[TXT Record]を追加します。[TXT Record]はGoogleから提示されたもので置き換えて下さい。Google Search Consoleは取得したドメイン名である必要があり@で記載します。例えば”www IN TXT [TXT Record]”とした場合はいつまでたってもGoogle Search Consoleの確認は成功しません。
ゾーンファイルのパーミッション変更
ディレクトリを分けているとこういった操作が簡単です。
[root@centos ~]# chmod 640 /var/named/myzone/* [root@centos ~]# chgrp named /var/named/myzone/*
サービス起動設定
DNSサーバーを起動します。
[root@centos ~]# systemctl enable --now named.service [root@centos ~]# systemctl status named.service