Ubuntu 22.04 で公開ドメインの DNS を扱う場合、外部に応答する権威 DNS と、内部ネットワーク向けの再帰 DNS は分けて考えます。外部 DNS では、公開ゾーンの応答、NS、SOA、glue、UDP/TCP 53 番の到達性が重要になります。
この記事では、BIND を権威 DNS として構成し、再帰問い合わせを無効化したうえで公開ゾーンを定義し、named-checkconf、named-checkzone、dig で確認します。Ubuntu 22.04 の既存環境を保守するための確認記事です。
- 外部 DNS と内部 DNS を分ける理由
- BIND 権威 DNS の基本設定
- 再帰問い合わせの無効化
- 公開ゾーンファイルの作成
- 検査と外部公開時の確認点
書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server の運用項目を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
外部 DNS と内部 DNS を分ける理由
外部 DNS は、インターネットから問い合わせられる公開ゾーンに対して権威応答を返す役割です。内部 DNS は、社内名や private address の名前解決、再帰問い合わせ、forwarder などを扱います。
- 外部 DNS は公開ゾーンの権威応答に限定する
- 外部 DNS で再帰問い合わせを受け付けない
- 内部名や private address を公開ゾーンへ混ぜない
- NS、SOA、MX、A、AAAA、TXT の整合性を確認する
- UDP 53 番だけでなく TCP 53 番も確認する
BIND をインストールする
bind9、管理ツール、確認用の dnsutils を導入します。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y bind9 bind9-utils dnsutils
named -v再帰問い合わせを無効化する
外部向けの権威 DNS では、再帰問い合わせを受け付けません。recursion no と allow-recursion { none; }; を明示します。
sudo tee /etc/bind/named.conf.options >/dev/null <<'EOF'
options {
directory "/var/cache/bind";
recursion no;
allow-recursion { none; };
allow-query { any; };
listen-on { any; };
listen-on-v6 { any; };
dnssec-validation auto;
};
EOF公開ゾーンを定義する
公開する zone を named.conf.local に定義します。例では example.com を primary zone として扱います。
sudo install -d -m 0755 /etc/bind/zones
sudo tee /etc/bind/named.conf.local >/dev/null <<'EOF'
zone "example.com" {
type primary;
file "/etc/bind/zones/db.example.com";
allow-transfer { none; };
};
EOFsecondary DNS へ zone transfer する場合は、allow-transfer に相手の IP アドレスを明示し、TSIG も検討します。
公開ゾーンファイルを作成する
SOA、NS、A、MX、TXT レコードを含む最小構成の zone file を作成します。serial は変更のたびに増やします。
sudo tee /etc/bind/zones/db.example.com >/dev/null <<'EOF'
$TTL 3600
@ IN SOA ns1.example.com. admin.example.com. (
2026070601
3600
900
604800
3600 )
@ IN NS ns1.example.com.
@ IN MX 10 mail.example.com.
ns1 IN A 203.0.113.10
www IN A 203.0.113.20
mail IN A 203.0.113.30
@ IN TXT "v=spf1 mx -all"
EOFIPv6 レコードを追加する
IPv6 で公開する場合は AAAA レコードも追加します。実際に IPv6 で到達できるサーバーだけを登録します。
sudo tee -a /etc/bind/zones/db.example.com >/dev/null <<'EOF'
ns1 IN AAAA 2001:db8::10
www IN AAAA 2001:db8::20
EOF設定を検査する
BIND の設定と zone file を検査してから再起動します。
sudo named-checkconf
sudo named-checkzone example.com /etc/bind/zones/db.example.com
sudo systemctl restart bind9
sudo systemctl status bind9 --no-pager権威応答を確認する
dig でローカルの BIND へ問い合わせ、SOA、NS、A、AAAA、MX の応答を確認します。存在しない別ドメインへの再帰問い合わせが通らないことも見ます。
dig @127.0.0.1 example.com SOA
dig @127.0.0.1 example.com NS
dig @127.0.0.1 www.example.com A
dig @127.0.0.1 www.example.com AAAA
dig @127.0.0.1 example.com MX
dig @127.0.0.1 example.net A待ち受けと firewall を確認する
公開 DNS では UDP/TCP 53 番の両方を確認します。zone transfer、DNSSEC、大きな応答では TCP が必要になります。
ss -lunp | grep ':53' || true
ss -ltnp | grep ':53' || true
sudo ufw status verbose 2>/dev/null || true外部公開時の注意
- レジストラ側の NS 登録を確認する
- ns1 が同じ zone 内にある場合は glue を確認する
- SOA serial を変更ごとに増やす
- 外部監視から SOA と NS を確認する
- 内部名や private address を公開しない
外部 DNS は、サーバー上の BIND 設定だけでは完結しません。上位 DNS からの委任、glue、firewall、サーバーの到達性、監視を合わせて確認します。
BIND と PowerDNS の使い分け
zone file を直接管理したい場合は BIND が分かりやすいです。API や DB バックエンドで zone を扱いたい場合は PowerDNS が向いています。どちらを使う場合でも、権威 DNS と再帰 DNS を分ける考え方は同じです。
まとめ
Ubuntu 22.04 の BIND を外部向け権威 DNS として使う場合は、再帰問い合わせを無効化し、公開 zone file を定義し、設定検査と dig で応答を確認します。
公開 DNS では、NS、SOA serial、glue、UDP/TCP 53 番、外部監視まで含めて確認することが重要です。内部 DNS と役割を混ぜず、公開してよい情報だけを zone に入れます。

