Debian 13 (trixie) - DNS サーバ BIND9 構築!

Updated:


Debian GNU/Linux 13 (trixie) に DNS サーバを構築する方法についての記録です。

以前古いバージョンでの作業時に残していた記録を参考に作業を行い、今回更新した作業記録を貼付する形式の内容となっています。
(当然ながら、興味がなければスルーしてください)

0. 前提条件

  • Debian GNU/Linux 13.0.0 (trixie; 64bit) での作業を想定。
  • サーバのローカル IP アドレスは 192.168.11.3、グローバル IP アドレスは xxx.yyy.zzz.aaa を想定。
  • ドメイン名は mk-mode.com、マシンのホスト名は foo、ネームサーバホスト名は ns を想定。
  • セカンダリ DNS は用意しない。
  • root ユーザでの作業を想定。

1. BIND のインストール

bind9-utilsdig コマンド用)

# apt -y install bind9 bind9-utils

2. BIND 設定ファイルの編集

File: /etc/bind/named.conf

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
//include "/etc/bind/named.conf.root-hints";    # <= 削除(view "internal" 内で設定するので)
include "/etc/bind/named.conf.internal-zones";  # <= 追加
include "/etc/bind/named.conf.external-zones";  # <= 追加

3. 内部向けゾーンファイルの作成

BIND 設定ファイルで指定している内部向けゾーンファイルを以下のように作成する。

File: /etc/bind/named.conf.internal-zones

view "internal" {
    # 内部向け設定の対象範囲定義
    match-clients {
        localhost;
        internal-network;
    };

    # 内部向け正引きゾーン定義
    zone "mk-mode.com" IN {
        type primary;
        file "/etc/bind/mk-mode.com.lan";
        allow-update { none; };
    };

    # 内部向け逆引きゾーン定義
    zone "11.168.192.in-addr.arpa" IN {
        type primary;
        file "/etc/bind/11.168.192.db";
        allow-update { none; };
    };
    include "/etc/bind/named.conf.root-hints";

    empty-zones-enable no;
};

最後の empty-zones-enable no; は、ログに以下のようなメッセージが出力されないための対処。

Warning: view internal: 'empty-zones-enable/disable-empty-zone' not set: disabling RFC 1918 empty zones

4. 外部向けゾーンファイルの作成

BIND 設定ファイルで指定している外部向けゾーンファイルを以下のように作成する。

File: /etc/bind/named.conf.external-zones

view "external" {
    match-clients { any; };  # 全て対象(内部向け範囲以外のホスト)
    allow-query { any; };    # 問合せは全て許可
    recursion no;            # 再帰検索禁止

    # 外部向け正引きゾーン定義
    zone "mk-mode.com" IN {
        type primary;
        file "/etc/bind/mk-mode.com.wan";
        allow-update { none; };
    };

    # 外部向け正引き情報を定義 *注
    zone "zzz.yyy.xxx.in-addr.arpa" IN {
        type primary;
        file "/etc/bind/zzz.yyy.xxx.db";
        allow-update { none; };
    };
};

5. オプション設定ファイルの編集

その他の設定用ファイルを以下のように編集する。

File: /etc/bind/named.conf.options

// ローカルネットワークの定義
acl internal-network {                                     # <= 追加
        192.168.11.0/24;                                   # <= 追加
};                                                         # <= 追加

options {
        // bindのバージョン情報の非表示化
        version         "unknown";                         # <= 追加

        directory "/var/cache/bind";

        // 名前解決の問い合わせを受け付ける範囲
        allow-query { localhost; internal-network; };      # <= 追加

        // ゾーン情報の転送要求を許可する範囲
        allow-transfer { localhost; };                     # <= 追加

        // 再帰的な問合せを許可する範囲
        allow-recursion { localhost; internal-network; };  # <= 追加
        dnssec-validation auto;                            # <= 追加
        listen-on port 53 { any; };                        # <= 追加

        auth-nxdomain no;     # conform to RFC1035

        // IPv6 は使用する場合は "none""any" に
        listen-on-v6 { none; };
};

# EDNS0 の無効化
# "error (unexpected RCODE REFUSED) ..." の出力抑止
server 0.0.0.0 {
        edns no;
};

logging {
        // エラーログ "DNS format error ... invalid response" の出力抑止
        category resolver { null; };
        // エラーログ "error (connection refused) resolving" の出力抑止
        category lame-servers { null; };
};

6. 内部向け正引きゾーン定義ファイルの作成

File: /etc/bind/mk-mode.com.lan

$TTL 86400
@   IN  SOA     ns.mk-mode.com. root.mk-mode.com. (
        2025100201  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)

        IN  NS      ns.mk-mode.com.
        IN  A       192.168.11.101
        IN  MX 10   ns.mk-mode.com.
ns      IN  A       192.168.11.3
foo     IN  A       192.168.11.3
var     IN  A       192.168.11.2
baz     IN  A       192.168.11.101
www     IN  CNAME   ns.mk-mode.com.
ftp     IN  CNAME   ns.mk-mode.com.
mail    IN  CNAME   ns.mk-mode.com.

hoge, fuga はローカルネットワーク内の別のマシン。
www, ftp, mail は別名定義。

7. 外部向け正引きゾーン定義ファイルの作成

File: /etc/bind/mk-mode.com.wan

$TTL 86400
@   IN  SOA     ns.mk-mode.com. root.mk-mode.com. (
        2025100201  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)

        IN  NS      ns.mk-mode.com.
        IN  A       xxx.yyy.zzz.aaa
        IN  MX 10   ns.mk-mode.com.
ns      IN  A       xxx.yyy.zzz.aaa

8. 内部向け逆引きゾーン定義ファイルの作成

File: /etc/bind/11.168.192.db

$TTL 86400
@   IN  SOA     ns.mk-mode.com. root.mk-mode.com. (
        2025100201  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)

        IN  NS      ns.mk-mode.com.
        IN  PTR     mk-mode.com.
        IN  A       255.255.255.0
3       IN  PTR     ns.mk-mode.com.
3       IN  PTR     foo.mk-mode.com.
2       IN  PTR     var.mk-mode.com.
101     IN  PTR     baz.mk-mode.com.

9. 外部向け逆引きゾーン定義ファイルの作成

File: /etc/bind/zzz.yyy.xxx.db

$TTL 86400
@   IN  SOA     ns.mk-mode.com. root.mk-mode.com. (
        2025100201  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)

        IN  NS      ns.mk-mode.com.
        IN  PTR     mk-mode.com.
        IN  A       255.255.255.254
aaa     IN  PTR     ns.mk-mode.com.

255.255.255.254 はグローバル IP が1個のみの場合の設定値)

10. 問合せ先 DNS サーバの追加

DNS サーバー自身も問合せ先に追加する。
最初から記載のあるルータの IP アドレス(インストール・初期設定時のもの)をセカンダリ、今回構築のサーバ自身をプライマリに設定するので、ルータより先に記述する。

File: /etc/resolv.conf

domain localdomain
search localdomain       # <= 追加
nameserver 192.168.11.3  # <= 追加(今設定中のサーバマシンの IP アドレス)
nameserver 192.168.11.1  # ルータの IP アドレス

11. IPv6 の無効化設定

システムとして IPv6 を無効にしている場合は、以下のように /etc/default/named を編集する。 (/var/log/syslog... named[9999]: error (network unreachable) resolving ... のようなエラーが出力されないようにするため)

File: /etc/default/named

OPTIONS="-u bind -4"

12. BIND の再起動

設定を有効化するために BIND を再起動する。

# systemctl restart bind9

もし、この際に次のようなエラーとなる場合、

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: ホストが落ちています

これは、 SystemD が正常に起動していない(SystemCtl がインストールされていない)ためなので、 SystemCtl をインストールする。

13. 動作確認

DNS サーバが正常に機能する(正引きで IP アドレス、逆引きでホスト名が返ってくる)か、確認してみる。 ・内部向け正引きテスト

# dig ns.mk-mode.com.

; <<>> DiG 9.20.11-4-Debian <<>> ns.mk-mode.com.
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20348
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 5bb4de70b01c8ee30100000068dddea4377d61e260c26d68 (good)
;; QUESTION SECTION:
;ns.mk-mode.com.                        IN      A

;; ANSWER SECTION:
ns.mk-mode.com.         86400   IN      A       192.168.11.3

;; Query time: 0 msec
;; SERVER: 192.168.11.3#53(192.168.11.3) (UDP)
;; WHEN: Thu Oct 02 11:08:36 JST 2025
;; MSG SIZE  rcvd: 87

・内部向け逆引きテスト

# dig -x 192.168.11.3

; <<>> DiG 9.20.11-4-Debian <<>> -x 192.168.11.3
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6826
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: a4f16205a483276c0100000068dddec471ff09e6e2099c01 (good)
;; QUESTION SECTION:
;3.11.168.192.in-addr.arpa.     IN      PTR

;; ANSWER SECTION:
3.11.168.192.in-addr.arpa. 86400 IN     PTR     p183.mk-mode.com.
3.11.168.192.in-addr.arpa. 86400 IN     PTR     ns.mk-mode.com.

;; Query time: 0 msec
;; SERVER: 192.168.11.3#53(192.168.11.3) (UDP)
;; WHEN: Thu Oct 02 11:09:08 JST 2025
;; MSG SIZE  rcvd: 129

・外部向け正引きテスト

# dig www.isc.org

; <<>> DiG 9.20.11-4-Debian <<>> www.isc.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44769
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 168a1f252af84ee90100000068dddedc0d138d056d655a3f (good)
;; QUESTION SECTION:
;www.isc.org.                   IN      A

;; ANSWER SECTION:
www.isc.org.            300     IN      CNAME   isc.map.fastlydns.net.
isc.map.fastlydns.net.  60      IN      A       151.101.90.217

;; Query time: 780 msec
;; SERVER: 192.168.11.3#53(192.168.11.3) (UDP)
;; WHEN: Thu Oct 02 11:09:32 JST 2025
;; MSG SIZE  rcvd: 119

・外部向け逆引きテスト

# dig -x 151.101.90.217

; <<>> DiG 9.20.11-4-Debian <<>> -x 151.101.90.217
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43324
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE: 80fbf217b53192350100000068dddef63efa7ab5a357e24e (good)
;; QUESTION SECTION:
;217.90.101.151.in-addr.arpa.   IN      PTR

;; AUTHORITY SECTION:
151.in-addr.arpa.       3600    IN      SOA     pri.authdns.ripe.net. dns.ripe.net. 1758790516 3600 600 864000 3600

;; Query time: 2452 msec
;; SERVER: 192.168.11.3#53(192.168.11.3) (UDP)
;; WHEN: Thu Oct 02 11:09:58 JST 2025
;; MSG SIZE  rcvd: 144

14. ファイアウォール (ufw) の設定

実際に運用する場合は、外部からのTCP/UDP53番ポート(DNS)へのアクセスを許可する必要がある。

# ufw allow 53
Rule added

# ufw status
Status: active

To                         Action      From
--                         ------      ----
9999/tcp                   ALLOW       192.168.11.0/24
53                         ALLOW       Anywhere

以上。





 

Sponsored Link

 

Comments