手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 BIND 内部 DNS – 内部名前解決と再帰問い合わせを構成する

この記事の位置づけ

内部 DNS を BIND で構成する記事です。LAN 内の名前解決、再帰問い合わせ、内部向けゾーンを整理し、DHCP や hosts ファイルとの役割分担を確認します。

Ubuntu 22.04 の関連記事

Ubuntu 22.04 で BIND を使い、内部ネットワーク向け DNS サーバーを構築する手順です。内部 DNS は、サーバー、LDAP、メール、Web、Kubernetes などを内部名で扱うための名前解決基盤です。

この記事では、内部向けの権威ゾーンと再帰問い合わせを扱います。外部公開 DNS とは責務を分け、内部ネットワークからだけ再帰問い合わせを受ける構成として BIND を設定します。

内部 DNS で最も避けたいのは、意図せず外部へ再帰問い合わせを提供する open resolver になることです。allow-recursionallow-query-cache、待ち受け範囲を内部ネットワークに限定します。

この記事で扱う内容は次の通りです。

  • 内部 DNS と外部 DNS の責務分離
  • BIND のインストール
  • 内部ネットワークに限定した再帰問い合わせ
  • 内部正引きゾーンと逆引きゾーンの作成
  • named-checkconf / named-checkzone / dig による確認
対象 OSUbuntu 22.04
サービスbind9.service
用途内部名前解決、内部ゾーン管理、内部向け再帰問い合わせ
設定ファイル/etc/bind/named.conf.options, /etc/bind/named.conf.local
検査コマンドnamed-checkconf, named-checkzone, dig
STEP 1BIND をインストールする
STEP 2内部ネットワークだけ再帰問い合わせを許可する
STEP 3内部ゾーンを定義する
STEP 4正引き・逆引きゾーンファイルを作成する
STEP 5設定検査と dig による確認を行う
参考
書籍
参考書籍

DNS がよくわかる教科書 第 2 版

DNS の基本、名前解決、権威 DNS、キャッシュ DNS、DNSSEC などを体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。

Amazon で見る

このリンクは Amazon アソシエイトリンクです。

内部 DNS の位置づけ

内部 DNS は、内部ホスト名や内部サービス名を解決するための基盤です。外部公開 DNS と同じ BIND を使うことはできますが、公開する情報、問い合わせを許可する相手、再帰問い合わせの扱いは別物です。

要素役割
内部 DNS内部ホスト名、内部サービス名、逆引きを解決する
外部 DNSインターネットから参照される公開レコードを管理する
権威 DNS自分が管理するゾーンの正しい答えを返す
キャッシュ DNS他の DNS へ問い合わせた結果をキャッシュする
split-horizon同じ名前でも内部と外部で異なる答えを返す設計

メール、証明書、LDAP、Kubernetes、監視などは名前解決に依存します。内部 DNS は地味ですが、他の基盤を安定させる前提になります。

BIND をインストールする

BIND と確認用の DNS ツールをインストールします。

コマンド
sudo apt update
sudo apt install -y bind9 bind9-utils dnsutils

サービスの状態を確認します。

コマンド
systemctl status bind9.service --no-pager

内部向けの options を設定する

内部 DNS では、再帰問い合わせを内部ネットワークに限定します。次の例では、IPv4 の 10.1.0.0/16 と IPv6 の fd00::/8 を内部ネットワークとして扱います。

設定ファイル例
sudo cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bak.$(date +%Y%m%d%H%M%S)
sudo tee /etc/bind/named.conf.options >/dev/null <<'EOF'
acl internal_networks {
    127.0.0.0/8;
    ::1/128;
    10.1.0.0/16;
    fd00::/8;
};

options {
    directory "/var/cache/bind";

    recursion yes;
    allow-query { internal_networks; };
    allow-recursion { internal_networks; };
    allow-query-cache { internal_networks; };

    listen-on { 127.0.0.1; 10.1.0.10; };
    listen-on-v6 { ::1; fd00::a01:10; };

    forwarders {
        1.1.1.1;
        8.8.8.8;
    };

    dnssec-validation auto;
    auth-nxdomain no;
};
EOF

allow-query は問い合わせを許可する相手、allow-recursion は再帰問い合わせを許可する相手、allow-query-cache はキャッシュ応答を許可する相手です。内部 DNS では、これらを内部ネットワークに絞ります。

forwarder は環境に合わせて変更します。閉域環境では外部 DNS ではなく、上位の内部 DNS やプロキシされた DNS 基盤へ向けます。

内部ゾーンを定義する

named.conf.local に内部向けゾーンを定義します。ここでは example.internal を正引きゾーン、10.1.0.0/24 を逆引きゾーンとして扱います。

設定ファイル例
sudo cp /etc/bind/named.conf.local /etc/bind/named.conf.local.bak.$(date +%Y%m%d%H%M%S)
sudo tee /etc/bind/named.conf.local >/dev/null <<'EOF'
zone "example.internal" {
    type master;
    file "/etc/bind/zones/db.example.internal";
    allow-query { internal_networks; };
};

zone "0.1.10.in-addr.arpa" {
    type master;
    file "/etc/bind/zones/db.10.1.0";
    allow-query { internal_networks; };
};
EOF

ゾーンファイルを置くディレクトリを作成します。

コマンド
sudo mkdir -p /etc/bind/zones

正引きゾーンを作成する

内部ホスト名を解決する正引きゾーンを作成します。

設定ファイル例
sudo tee /etc/bind/zones/db.example.internal >/dev/null <<'EOF'
$TTL 3600
@   IN SOA ns1.example.internal. admin.example.internal. (
        2026061701
        3600
        900
        604800
        3600 )

@       IN NS   ns1.example.internal.
ns1     IN A    10.1.0.10
ns1     IN AAAA fd00::a01:10

mail    IN A    10.1.0.25
mail    IN AAAA fd00::a01:25
web     IN A    10.1.0.30
web     IN AAAA fd00::a01:30
EOF

SOA のシリアル値は、ゾーンを変更するたびに増やします。日付形式にしておくと管理しやすくなります。

逆引きゾーンを作成する

ログやメールサーバー、監視で逆引きが必要になる場合があります。内部 DNS でも、主要サーバーの PTR を用意しておくと運用しやすくなります。

設定ファイル例
sudo tee /etc/bind/zones/db.10.1.0 >/dev/null <<'EOF'
$TTL 3600
@   IN SOA ns1.example.internal. admin.example.internal. (
        2026061701
        3600
        900
        604800
        3600 )

@       IN NS  ns1.example.internal.
10      IN PTR ns1.example.internal.
25      IN PTR mail.example.internal.
30      IN PTR web.example.internal.
EOF

設定を検査する

設定ファイルとゾーンファイルを検査します。

コマンド
sudo named-checkconf
sudo named-checkzone example.internal /etc/bind/zones/db.example.internal
sudo named-checkzone 0.1.10.in-addr.arpa /etc/bind/zones/db.10.1.0

問題がなければ BIND を再起動します。

コマンド
sudo systemctl restart bind9.service
systemctl status bind9.service --no-pager

名前解決を確認する

dig で正引き、逆引き、再帰問い合わせを確認します。

コマンド
dig @127.0.0.1 ns1.example.internal A
dig @127.0.0.1 mail.example.internal AAAA
dig @127.0.0.1 -x 10.1.0.25
dig @127.0.0.1 www.iana.org A

外部名の問い合わせが成功する場合、再帰問い合わせが動作しています。これが内部クライアントからだけ許可されることが重要です。

open resolver ではないことを確認する

許可していない外部ネットワークから、再帰問い合わせができないことを確認します。確認は、内部ネットワーク外の端末から行います。

コマンド
dig @dns.example.com www.iana.org A

許可外の端末から外部名を再帰解決できる場合は、allow-recursionallow-query-cache、ファイアウォール、待ち受けアドレスを見直します。

BIND の設定だけでなく、ネットワーク ACL やファイアウォールでも DNS の到達範囲を制御します。内部 DNS であっても、外部から UDP/TCP 53 が到達する設計は避けます。

運用上の注意

  • 内部 DNS と外部 DNS のゾーン責務を混ぜない
  • 再帰問い合わせは内部ネットワークだけに許可する
  • ゾーン変更時はシリアルを更新する
  • 正引きと逆引きの対応を維持する
  • IPv4 と IPv6 のレコードを同時に確認する
  • メール、証明書、LDAP、監視の名前解決に影響することを意識する

メール基盤では、内部 DNS の名前解決が Postfix や Dovecot の到達性に影響します。内部向け Postfix は Ubuntu 22.04 Postfix 内部向けメールサーバー で扱っています。

まとめ

Ubuntu 22.04 で BIND を内部 DNS として使う場合は、内部向けの権威ゾーンと再帰問い合わせの範囲を分けて考えます。内部ホスト名を返すだけでなく、再帰問い合わせをどのネットワークに許可するかが重要です。

allow-queryallow-recursionallow-query-cache を内部ネットワークに限定し、named-checkconfnamed-checkzonedig で確認します。内部 DNS は、メール、証明書、認証、監視など多くの基盤に影響するため、単独の設定ではなく運用基盤として扱うのが良いです。

次に読む記事
Ubuntu 22.04 BIND 内部 DNS – 内部名前解決と再帰問い合わせを構成する

コメントを残す

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

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

トップへ戻る