ProxmoxにBIND9 DNSサーバーを構築する手順|LXC・正引き・逆引きまで解説

当ページのリンクには広告が含まれています。

自宅ラボを構築していると、サーバーやネットワーク機器へIPアドレスではなくFQDNでアクセスしたくなります。

例えば、

172.31.255.100

ではなく、

proxmox01.lab.home.arpa

という名前でアクセスできれば、管理がかなり分かりやすくなります。

そこで今回は、Proxmox VE上にDebian 13のLXCコンテナを作成し、BIND9を使った自宅ラボ用DNSサーバーを構築します。

実際に今回構築した環境をもとに、

LXC作成
↓
BIND9インストール
↓
Forwarder設定
↓
正引きゾーン作成
↓
逆引きゾーン作成
↓
Windows PCから確認
↓
dns01自身もBIND9を利用

というところまで紹介します。


目次

今回構築する環境

今回使用する環境は以下です。

項目設定
仮想化基盤Proxmox VE 9.2
Proxmoxホストproxmox01
Proxmox IP172.31.255.100/24
Proxmox FQDNproxmox01.lab.home.arpa
LXCDebian 13
DNSサーバー名dns01
DNSサーバーIP172.31.255.101/24
DNSサーバーFQDNdns01.lab.home.arpa
DNSゾーンlab.home.arpa
逆引きゾーン255.31.172.in-addr.arpa
デフォルトゲートウェイ172.31.255.1

今回のDNSサーバーは、Proxmox本体へBIND9を直接インストールするのではなく、専用のLXCコンテナとして構築します。

構成イメージは以下です。

Proxmox VE
172.31.255.100
proxmox01.lab.home.arpa
        │
        └─ LXC:dns01
           172.31.255.101
           dns01.lab.home.arpa
                  │
                  └─ BIND9

Debian 13のLXCテンプレートをダウンロードする

まず、Proxmoxへログインします。

https://172.31.255.100:8006

Proxmoxの左メニューから、

local
↓
CTテンプレート
↓
テンプレート

と進みます。

今回は、

debian-13-standard_13.6-1_amd64.tar.zst

を使用しました。


BIND9用LXCコンテナを作成する

画面右上の、

CTを作成

をクリックします。

今回は以下のように設定しました。

CT ID:100
ホスト名:dns01
非特権コンテナ:有効

非特権コンテナにしておくことで、LXC内部のrootとProxmoxホスト側のrootを分離できます。


テンプレートを選択する

先ほどダウンロードした、

debian-13-standard_13.6-1_amd64.tar.zst

を指定します。


ディスクを設定する

今回は以下の設定にしました。

ストレージ:local-lvm
ディスク:8 GiB

BIND9だけを動かすのであれば、8GiBでも十分な容量です。


CPUを設定する

CPUは、

1 Core

としました。

BIND9は非常に軽量なので、自宅ラボ用途であれば1コアから始めても問題ありません。


メモリを設定する

今回は、

メモリ:512 MiB
Swap:512 MiB

としました。

こちらも必要になれば、後からProxmox側で増やせます。


dns01のネットワークを設定する

DNSサーバーは常に同じIPアドレスで利用するため、DHCPではなく固定IPアドレスを設定します。

今回は、

Interface:eth0
Bridge:vmbr0
IPv4:静的
IPv4/CIDR:172.31.255.101/24
Gateway:172.31.255.1

としました。

今回、VLANタグは使用していません。


LXC作成時点のDNS設定

LXCを作成している段階では、まだBIND9は存在していません。

そのため、最初から、

127.0.0.1

をDNSサーバーに指定してしまうと、BIND9をインストールするための名前解決すらできなくなります。

LXC作成時は、

DNSドメイン:ホスト設定を使用
DNSサーバー:ホスト設定を使用

の状態で進めました。

BIND9完成後に、dns01自身のDNSを127.0.0.1へ変更します。


LXCコンテナを作成する

最後に設定内容を確認します。

今回の設定は、

CPU:1 Core
Memory:512 MiB
Swap:512 MiB
Disk:8 GiB
IP:172.31.255.101/24
Gateway:172.31.255.1

です。

「作成後に起動」にチェックを入れて作成しました。


Debian 13でSystemd 257の警告が表示された

今回、LXC作成時に次の警告が表示されました。

WARN: Systemd 257 detected. You may need to enable nesting.

ただし、今回の環境ではLXCコンテナ自体は正常に作成・起動できました。

実際にProxmoxのサマリー画面でも、

状態:running
IP:172.31.255.101

となっています。

環境によってsystemd関連のサービスに問題が発生する場合は、LXCのNesting設定を確認するとよいでしょう。


dns01へログインする

Proxmoxから、

100 (dns01)
↓
コンソール

を開きます。

rootユーザーでログインします。

dns01 login: root

ログイン後、

root@dns01:~#

と表示されればOKです。


IPアドレスとルーティングを確認する

まずホスト名を確認します。

hostname

結果:

dns01

IPアドレスを確認します。

ip addr

eth0に、

172.31.255.101/24

が設定されていることを確認します。

続いて、

ip route

を確認します。

今回の環境では、

default via 172.31.255.1 dev eth0
172.31.255.0/24 dev eth0

となっています。

さらに、

cat /etc/resolv.conf

を確認しました。

構築前は、

search lab.home.arpa
nameserver 172.31.255.1

となっていました。


ネットワーク疎通を確認する

BIND9をインストールする前に、ネットワークが正常に使えることを確認します。

まずデフォルトゲートウェイへPingします。

ping -c 4 172.31.255.1

続いてインターネットへの疎通です。

ping -c 4 8.8.8.8

最後に、DNS名前解決も含めて確認します。

ping -c 4 deb.debian.org

今回すべて、

0% packet loss

となりました。

これで、

LAN疎通
↓
Internet疎通
↓
DNS名前解決

まで正常であることを確認できました。


Debianをアップデートする

パッケージ情報を更新します。

apt update

続いて、

apt upgrade -y

を実行します。

必要なツールもインストールしておきます。

apt install curl wget ca-certificates -y

BIND9をインストールする

BIND9をインストールします。

apt install bind9 bind9-utils bind9-dnsutils -y

インストール後、サービス状態を確認します。

systemctl status named

正常であれば、

Active: active (running)

と表示されます。


BIND9起動時にIPv6のnetwork unreachableが表示された

今回、BIND9起動直後のログに、

network unreachable resolving ...
2001:...

というログが表示されました。

BIND9がIPv6のDNSサーバーへ問い合わせようとしたものの、今回の環境ではIPv6ルーティングを使用していないためです。

そこで今回は、BIND9自体の通信をIPv4のみに制限しました。


BIND9をIPv4のみで起動する

次のファイルを編集します。

nano /etc/default/named

初期状態では、

OPTIONS="-u bind"

となっていました。

今回はこれをコメントアウトして、

#OPTIONS="-u bind"
OPTIONS="-u bind -4"

としました。

保存後、

systemctl restart named

を実行します。

状態を確認します。

systemctl status named

今回の環境では、

/usr/sbin/named -f -u bind -4

となり、-4付きで起動していることを確認できました。


TCP/UDP 53番ポートを確認する

DNSではTCP/UDPの53番ポートを使用します。

以下で確認します。

ss -lntup | grep ':53'

今回、

UDP 172.31.255.101:53
UDP 127.0.0.1:53
TCP 172.31.255.101:53
TCP 127.0.0.1:53

で待ち受けていることを確認できました。


BIND9の基本設定を行う

まず設定ファイルをバックアップします。

cp /etc/bind/named.conf.options /etc/bind/named.conf.options.bak

続いて、

nano /etc/bind/named.conf.options

を開きます。

今回は以下のように設定しました。

acl "trusted" {
    127.0.0.1;
    172.31.255.0/24;
    192.168.255.0/24;
};

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

    recursion yes;

    allow-query {
        trusted;
    };

    allow-recursion {
        trusted;
    };

    allow-transfer {
        none;
    };

    listen-on {
        127.0.0.1;
        172.31.255.101;
    };

    forwarders {
        172.31.255.1;
    };

    forward first;
};

trusted ACLについて

trustedでは、DNS問い合わせを許可するネットワークを指定しています。

今回、

172.31.255.0/24

はサーバー側ネットワークです。

さらに、

192.168.255.0/24

を追加しています。

これは、実際にDNSをテストしたWindows PCが、

192.168.255.110

だったためです。

この設定が今回かなり重要なポイントになりました。


Forwarderを設定する

今回、

forwarders {
    172.31.255.1;
};

を設定しました。

これにより、

lab.home.arpa

はdns01自身が回答し、

google.com

など、自分が管理していないドメインについては、

172.31.255.1

へ問い合わせを転送します。

イメージは以下です。

Client
  │
  ▼
dns01
172.31.255.101
  │
  ├─ lab.home.arpa
  │      └─ 自分で回答
  │
  └─ google.com
         ↓
     172.31.255.1
         ↓
      Internet

設定ファイルをチェックする

BIND9を再起動する前に、

named-checkconf

を実行します。

何も表示されなければ、構文上の問題はありません。

その後、

systemctl restart named

を実行します。

確認:

systemctl status named
Active: active (running)

であればOKです。


Forwarder経由の名前解決を確認する

まずループバックアドレスへ問い合わせます。

dig @127.0.0.1 google.com

続いて、LAN側IPへ問い合わせます。

dig @172.31.255.101 google.com

今回どちらも、

status: NOERROR

となり、GoogleのIPアドレスが返りました。

これで、

dns01
↓
BIND9
↓
Forwarder
↓
外部DNS

まで正常に動作していることが確認できました。


lab.home.arpaゾーンを作成する

続いて、自宅ラボ用のDNSゾーンを作成します。

nano /etc/bind/named.conf.local

以下を設定します。

zone "lab.home.arpa" {
    type master;
    file "/etc/bind/db.lab.home.arpa";
};

zone "255.31.172.in-addr.arpa" {
    type master;
    file "/etc/bind/db.172.31.255";
};

正引きゾーンファイルを作成する

nano /etc/bind/db.lab.home.arpa

今回の内容は以下です。

$TTL 86400

@   IN  SOA dns01.lab.home.arpa. admin.lab.home.arpa. (
        2026092801
        3600
        1800
        604800
        86400
)

@           IN  NS      dns01.lab.home.arpa.

proxmox01   IN  A       172.31.255.100
dns01       IN  A       172.31.255.101
dhcp01      IN  A       172.31.255.102
db01        IN  A       172.31.255.103
ldap01      IN  A       172.31.255.104
radius01    IN  A       172.31.255.105
log01       IN  A       172.31.255.106
zabbix01    IN  A       172.31.255.107

今後構築する予定のサーバーも、あらかじめ登録しています。


正引きゾーンをチェックする

named-checkzone lab.home.arpa /etc/bind/db.lab.home.arpa

正常であれば、

zone lab.home.arpa/IN: loaded serial 2026092801
OK

と表示されます。


逆引きゾーンを作成する

nano /etc/bind/db.172.31.255

以下を設定します。

$TTL 86400

@   IN  SOA dns01.lab.home.arpa. admin.lab.home.arpa. (
        2026092801
        3600
        1800
        604800
        86400
)

@       IN  NS      dns01.lab.home.arpa.

100     IN  PTR     proxmox01.lab.home.arpa.
101     IN  PTR     dns01.lab.home.arpa.
102     IN  PTR     dhcp01.lab.home.arpa.
103     IN  PTR     db01.lab.home.arpa.
104     IN  PTR     ldap01.lab.home.arpa.
105     IN  PTR     radius01.lab.home.arpa.
106     IN  PTR     log01.lab.home.arpa.
107     IN  PTR     zabbix01.lab.home.arpa.

チェックします。

named-checkzone 255.31.172.in-addr.arpa /etc/bind/db.172.31.255

正常ならOKとなります。


BIND9へゾーンを読み込ませる

最後に、

named-checkconf

を実行します。

問題がなければ、

systemctl restart named

を実行します。

systemctl status named

今回、

zone lab.home.arpa/IN: loaded serial 2026092801
zone 255.31.172.in-addr.arpa/IN: loaded serial 2026092801
all zones loaded

となり、正引き・逆引きとも正常にロードされました。


正引きを確認する

Proxmoxを問い合わせます。

dig @172.31.255.101 proxmox01.lab.home.arpa

結果:

proxmox01.lab.home.arpa.  IN A 172.31.255.100

dns01自身も確認します。

dig @172.31.255.101 dns01.lab.home.arpa

結果:

dns01.lab.home.arpa. IN A 172.31.255.101

逆引きを確認する

dig @172.31.255.101 -x 172.31.255.100

結果:

100.255.31.172.in-addr.arpa.
    IN PTR proxmox01.lab.home.arpa.

正引き・逆引きとも正常です。


Windows PCからDNSを確認する

最後に、別のWindows PCから確認しました。

Windows PCのIPアドレスは、

192.168.255.110/24

です。

以下を実行します。

nslookup proxmox01.lab.home.arpa 172.31.255.101

ところが最初は、

*** UnKnown が proxmox01.lab.home.arpa を見つけられません:
Query refused

となりました。


Query refusedになった原因

原因はnamed.conf.optionsのACLでした。

当初は、

acl "trusted" {
    127.0.0.1;
    172.31.255.0/24;
};

としていました。

しかし、Windows PCは、

192.168.255.110

です。

そのためBIND9から見ると、許可されていないネットワークからの問い合わせとなり、

Query refused

が返っていました。

そこで、

acl "trusted" {
    127.0.0.1;
    172.31.255.0/24;
    192.168.255.0/24;
};

へ変更しました。

再起動後、Windows PCからもう一度実行します。

nslookup proxmox01.lab.home.arpa 172.31.255.101

今度は、

サーバー: dns01.lab.home.arpa
Address: 172.31.255.101

名前:    proxmox01.lab.home.arpa
Address: 172.31.255.100

と正常に応答しました。

このトラブルは、BIND9を構築する際にACLを設定している場合に確認したいポイントです。


Windows PCから外部ドメインも確認する

続いて、

nslookup google.com 172.31.255.101

を実行しました。

GoogleのIPv4/IPv6アドレスが正常に返りました。

ここで表示される、

権限のない回答

はエラーではありません。

dns01はlab.home.arpaについては権威DNSですが、google.comの権威DNSではないためです。

Forwarderなどを通して取得した情報を返しているため、非権威応答となります。


dns01自身のDNSを127.0.0.1へ変更する

ここまででBIND9が正常に動作することを十分確認できました。

そこで最後に、dns01自身も自分のBIND9を利用するようにします。

Proxmoxから、

100 (dns01)
↓
DNS
↓
編集

を開き、

DNSドメイン:lab.home.arpa
DNSサーバ:127.0.0.1

に変更しました。


DNS設定変更後はLXCを再起動する

今回、この設定を変更しただけでは、

cat /etc/resolv.conf

の内容がすぐには変わりませんでした。

そこでLXCコンテナを再起動しました。

再起動後、

cat /etc/resolv.conf

を確認すると、

# --- BEGIN PVE ---
search lab.home.arpa
nameserver 127.0.0.1
# --- END PVE ---

へ変更されました。

# --- BEGIN PVE ---とあることから、このresolv.confはProxmoxによって管理されています。

そのため、この環境では/etc/resolv.confを直接書き換えるのではなく、Proxmox側のDNS設定から変更する方が分かりやすいでしょう。


dns01自身が自分のBIND9を使っていることを確認する

最後に、

dig proxmox01.lab.home.arpa

を実行します。

結果の下部が、

SERVER: 127.0.0.1#53

となりました。

そして、

proxmox01.lab.home.arpa
→ 172.31.255.100

も正常に返っています。

さらに、

dig google.com

も実行します。

こちらも、

SERVER: 127.0.0.1#53

から正常に応答しました。

これで、

dns01
  │
  │ DNS Query
  ▼
127.0.0.1
  │
  ▼
BIND9
  │
  ├─ lab.home.arpa
  │      └─ dns01自身で回答
  │
  └─ 外部ドメイン
          ↓
      172.31.255.1
          ↓
       Internet

という構成が完成しました。


今回構築したBIND9 DNSサーバー

最終的な構成は以下です。

                       Internet
                           ▲
                           │
                     172.31.255.1
                      Forwarder
                           ▲
                           │
Windows PC ───────────→ dns01
192.168.255.110         172.31.255.101
                           │
                         BIND9
                           │
                     lab.home.arpa
                           │
       ┌───────────────┬───┴──────────────┐
       │               │                  │
   proxmox01         dns01             dhcp01
172.31.255.100   172.31.255.101   172.31.255.102

自宅ラボ内では、

proxmox01.lab.home.arpa
dns01.lab.home.arpa
dhcp01.lab.home.arpa
db01.lab.home.arpa
ldap01.lab.home.arpa
radius01.lab.home.arpa
log01.lab.home.arpa
zabbix01.lab.home.arpa

というFQDNを利用できるようになりました。


今回ハマったポイント

今回の構築では、単純にBIND9をインストールするだけではなく、いくつか実際のトラブルにも遭遇しました。

特に重要だったのは次の内容です。

事象原因・対応
Debian 13 LXC作成時にSystemd 257警告LXC自体は起動。必要に応じてNestingを確認
BIND9ログにIPv6 network unreachable/etc/default/namedへ-4を追加
Windows PCからQuery refusedWindows側NWがACLに入っていなかった
UnKnownと表示逆引きを含むDNS問い合わせがACLで拒否されていた
ProxmoxのDNS変更がすぐ反映されないLXC再起動後に/etc/resolv.confへ反映
google.comが「権限のない回答」正常。dns01はgoogle.comの権威DNSではない

単純な構築手順だけではなく、このあたりまで確認しておくと、BIND9の動作がかなり理解しやすくなります。


まとめ

今回はProxmox VE上へDebian 13のLXCコンテナを作成し、BIND9を使った自宅ラボ用DNSサーバーを構築しました。

DNSサーバーは、

dns01.lab.home.arpa
172.31.255.101

です。

内部DNSとして、

proxmox01.lab.home.arpa
↓
172.31.255.100

という正引きと、

172.31.255.100
↓
proxmox01.lab.home.arpa

という逆引きの両方を実装しました。

また、Forwarderを設定したことで、

Client
↓
dns01
↓
172.31.255.1
↓
Internet

という形で外部ドメインの名前解決もできます。

最後にdns01自身のDNSサーバーを127.0.0.1へ変更し、DNSサーバー自身も自分のBIND9を使用する構成にしました。

これで、今後構築するDHCP、LDAP、RADIUS、Zabbixなども、IPアドレスではなくlab.home.arpa配下のFQDNを使って構築できるようになります。

自宅ラボ・Proxmox環境の構築におすすめの機材と書籍

今回のようにProxmox上へBIND9などのインフラサービスを構築していくと、仮想化やProxmoxそのものについて、もう少し詳しく知りたくなる場面も出てきます。

ここでは、今回の自宅ラボ構築で参考になるProxmox関連書籍と、ミニPCを紹介します。

仮想化環境の構築から運用まで Proxmox VE 実践ガイド

Proxmox VEをこれから本格的に触ってみたい方におすすめの一冊です。

Proxmoxのインストールだけでなく、仮想マシンやコンテナ、ストレージ、ネットワークなど、Proxmoxを使った仮想化環境の構築から運用まで体系的に学びたい場合に役立ちます。

今回の記事ではLXCコンテナ上へBIND9を構築しましたが、Proxmoxにはほかにもさまざまな機能があります。

「自宅ラボをもう少し本格的に作り込みたい」という方は、手元に1冊あると便利です。


Proxmox VEサーバー仮想化 導入実践ガイド エンタープライズシステムをOSSベースで構築

こちらもProxmox VEについて詳しく解説されている書籍です。

Proxmoxを単なる自宅サーバー用途だけでなく、OSSを利用したサーバー仮想化基盤として理解したい方に向いています。

今回のような、

Proxmox
 ├─ DNS
 ├─ DHCP
 ├─ DB
 ├─ LDAP
 ├─ RADIUS
 └─ Zabbix

といった複数のインフラサービスを構築していく場合、仮想化基盤そのものの理解も重要になります。

Proxmoxを使った環境を長く運用していきたい方は、参考書としてチェックしてみてください。


GMKtec ミニPC G3S

自宅でProxmox環境を構築する場合、通常のデスクトップPCやサーバーを用意する方法もありますが、省スペース・低消費電力なミニPCも非常に使いやすいです。

今回のような、

BIND9
Kea DHCP
OpenLDAP
FreeRADIUS
Zabbix

などの自宅ラボ用途であれば、LXCを中心に構築することで比較的少ないリソースでも複数サービスを動かせます。

GMKtecのミニPCは、Proxmoxを使った自宅サーバーや検証環境をこれから作ってみたい方にとって、候補のひとつになるでしょう。


自宅ラボは少しずつ拡張していくのがおすすめ

最初から大規模な環境を作る必要はありません。

今回のように、

Proxmox
   ↓
BIND9

から始めて、その後、

DNS
 ↓
DHCP
 ↓
Database
 ↓
LDAP
 ↓
RADIUS
 ↓
Syslog
 ↓
Zabbix

と少しずつサービスを追加していくだけでも、ネットワークやサーバーの理解がかなり深まります。

ミニPC1台でもさまざまな検証ができるため、ネットワークエンジニアの自宅ラボ環境としてProxmoxはかなり遊べる基盤です。

次回は、今回構築したBIND9をWebminからGUIで管理できるようにする手順を紹介します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次