手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 BIND 外部 DNS – 公開ゾーンと権威 DNS の設計

Ubuntu 22.04 で公開ドメインの DNS を扱う場合、外部に応答する権威 DNS と、内部ネットワーク向けの再帰 DNS は分けて考えます。外部 DNS では、公開ゾーンの応答、NS、SOA、glue、UDP/TCP 53 番の到達性が重要になります。

この記事では、BIND を権威 DNS として構成し、再帰問い合わせを無効化したうえで公開ゾーンを定義し、named-checkconfnamed-checkzonedig で確認します。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 noallow-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; };
};
EOF

secondary 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"
EOF

IPv6 レコードを追加する

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 に入れます。

関連する記事
Ubuntu 22.04 BIND 外部 DNS – 公開ゾーンと権威 DNS の設計

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る