【BIND9講座 第5回】サーバーを止めない技術!「スレーブサーバー」の構築と安全なゾーン転送設定

「1台だけ」はプロ失格? 止まらないインフラを作る

こんにちは!「リナックス先生」です。
BIND9講座、折り返しの第5回です。

これまでの講座で、あなたのDNSサーバーはキャッシュ(名前解決)もできれば、正引き・逆引き(ゾーン管理)もできる万能サーバーに育ちました。
しかし、厳しいことを言いますが、今の状態では「怖くて業務には使えない」です。

なぜなら、サーバーが1台しかないからです。
OSのアップデート、停電、ハードウェア故障…。サーバーが止まる理由は無限にあります。
DNSが止まれば、社内の全業務がストップします。「ごめん、直るまで待って」は通用しません。

そこで今回は、2台目のサーバー(スレーブサーバー)を構築し、「1台が死んでもサービスを継続できる冗長構成」を作り上げます。
マスターからスレーブへ、自動的に設定ファイルをコピーする「ゾーン転送」の瞬間は、エンジニアとして感動するポイントの一つですよ!

コウ君

先生、バックアップなら毎日取ってますよ!
サーバーが壊れたら、新しいサーバーにファイルをコピーして起動すればいいんじゃないですか?

リナックス先生

それだと復旧するまでの数時間、会社中のネットが止まっちゃうでしょ?
DNSの世界では、常に2台以上のサーバーが動いていて、片方が倒れてもユーザーは気づかない…というのが当たり前なの。
「マスター」と「スレーブ」の主従関係を学んで、鉄壁のインフラを作りましょう!

1. マスターとスレーブの仕組み

設定を始める前に、2台のサーバーがどうやって連携するのか、その仕組みを理解しましょう。

役割分担

役割 権限 仕事内容
マスターサーバー
(Primary)
読み書きOK 「原本」を持つサーバー。
管理者はこのサーバーの設定ファイルだけを書き換える。
スレーブサーバー
(Secondary)
読み取り専用 「コピー」を持つサーバー。
マスターから自動的にデータをもらって保存する。人間が設定ファイルをいじることはない。

ゾーン転送(Zone Transfer)

マスターサーバーのゾーンファイル(シリアル番号)が更新されると、マスターはスレーブに「変更があったよ!」と通知(NOTIFY)を送ります。
それを受けたスレーブは、マスターに接続して最新のデータを取得します。これをゾーン転送と呼びます。

【重要】 このゾーン転送には、通常のDNSクエリ(UDP)ではなく、信頼性の高い TCPの53番ポート が使われます。

2. 今回の構築環境

2台目のLinuxサーバー(仮想マシンやVPS)を用意してください。
ない場合は、「設定の流れ」を目で追うだけでも勉強になります。

  • マスターサーバー(既存): 192.168.1.10 (ns1.kou-house.lan)
  • スレーブサーバー(新規): 192.168.1.11 (ns2.kou-house.lan)

3. 【マスター側】ゾーン転送の許可設定

まずは、現在稼働しているマスターサーバー(192.168.1.10)の設定を変更します。
デフォルトでは「誰にもデータを渡さない」あるいは「誰にでも渡してしまう(危険)」設定になっている可能性があります。

3-1. named.conf の編集

options ブロック内、または各 zone 定義内に記述しますが、今回は options に書いて全体に適用させます。

sudo vi /etc/named.conf

▼追記・変更する内容

options {
    # (省略)
    
    # スレーブサーバー(192.168.1.11)への転送を許可する
    allow-transfer { 192.168.1.11; };
    
    # 更新時にスレーブへ「変わったよ」と通知する
    also-notify { 192.168.1.11; };

    # (省略)
};

【セキュリティ警告】
allow-transfer { any; }; は絶対にやってはいけません。
これを行うと、悪意ある第三者があなたのネットワーク構成(サーバー名やIP一覧)を丸ごとコピーできてしまい、標的型攻撃の材料にされます。

3-2. 反映

sudo named-checkconf
sudo systemctl reload named

これでマスター側は「192.168.1.11 からのコピー要求」を受け入れる準備ができました。

4. 【スレーブ側】BINDの構築と設定

ここからは、新しく用意した2台目のサーバー(192.168.1.11)での作業です。

4-1. BINDのインストール

第2回と同じ手順でインストールします。

sudo dnf install bind bind-utils -y

4-2. named.conf の作成

スレーブ用の設定ファイルを作ります。
基本部分はマスターと同じですが、zone 定義の部分が異なります。

sudo vi /etc/named.conf

▼スレーブ用の記述(抜粋)

options {
    listen-on port 53 { 127.0.0.1; 192.168.1.11; };
    directory       "/var/named";
    allow-query     { any; }; # 内部LANならtrusted ACL推奨
    recursion yes;
};

# 正引きゾーン設定(スレーブ)
zone "kou-house.lan" IN {
    type slave;                   # ここが重要!「slave」にする
    masters { 192.168.1.10; };    # マスターのIPを指定
    file "slaves/kou-house.lan.db"; # 保存先は slaves/ ディレクトリ
};

# 逆引きゾーン設定(スレーブ)
zone "1.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.1.10; };
    file "slaves/1.168.192.in-addr.arpa.db";
};

4-3. なぜ “slaves/” ディレクトリなのか?

ここが初心者キラーのポイントです。
AlmaLinux(RHEL系)のBINDは、セキュリティのため /var/named/ 直下への書き込み権限を持っていません。

スレーブサーバーは、マスターから受け取ったデータをファイルとして保存(書き込み)する必要があります。
そのために用意されている書き込み許可付きディレクトリが /var/named/slaves/ です。
ここに保存しないと permission denied エラーで転送が失敗します。

4-4. 起動とFirewalld設定

スレーブサーバーでもポート開放を忘れずに。

sudo firewall-cmd --add-service=dns --permanent
sudo firewall-cmd --reload
sudo systemctl enable --now named

5. 動作確認:感動の瞬間

さあ、正しく設定できていれば、スレーブサーバーを起動した瞬間にマスターからデータが飛んできているはずです。

5-1. ファイルの確認

スレーブサーバーで確認してみましょう。

ls -l /var/named/slaves/

ここに kou-house.lan.db などのファイルが生成されていれば成功です!
(※バイナリ形式で保存されることがあり、catで見ても文字化けする場合がありますが正常です)

5-2. ログの確認

より確実に確認するために、システムログを見てみましょう。

sudo grep "transfer" /var/log/messages

▼成功時のログ例

named[...]: transfer of 'kou-house.lan/IN' from 192.168.1.10#53: connected using 192.168.1.11#...
named[...]: transfer of 'kou-house.lan/IN' from 192.168.1.10#53: Transfer completed: ...

Transfer completed の文字があれば、完璧に同期されています。

6. 運用シミュレーション:設定変更の手順

スレーブサーバーを導入した後の、日常的な設定変更(レコード追加など)の流れを確認しましょう。

手順①:マスターサーバーを編集する

必ず「マスター」で作業します。スレーブのファイルは触りません。
例えば、新しいPCを追加するとします。

# マスターでの作業
sudo vi /var/named/kou-house.lan.db
new-pc  IN  A   192.168.1.30

手順②:シリアル番号を増やす(超重要!)

同じファイルの SOAレコードにあるシリアル番号を更新します。

# 変更前
2026011501
↓
# 変更後
2026011502

スレーブはこの番号が増えていないと、「変更なし」と判断してデータを更新しません。
初心者が一番ハマるのがここです。

手順③:マスターをリロード

sudo systemctl reload named

これでマスターからスレーブへ通知が飛び、瞬時に同期されます。

手順④:スレーブで確認

スレーブサーバーに対して問い合わせてみましょう。

dig @192.168.1.11 new-pc.kou-house.lan

ちゃんと答えが返ってくれば、冗長化システムの完成です!

コウ君

おおー!マスターを書き換えただけで、勝手にスレーブも最新になってる!
これなら、もしマスターが壊れても、PCの設定で「優先DNS: マスター」「代替DNS: スレーブ」にしておけばネットが止まらないですね!

まとめ:2台あって初めて「インフラ」になる

第5回では、実務で必須となるスレーブサーバーを構築しました。

  • マスターの allow-transfer で許可したIPにしかデータを渡さない(セキュリティ)。
  • スレーブのファイル保存先は slaves/ ディレクトリを使う(パーミッション)。
  • 設定変更時は、必ずマスターの シリアル番号 をカウントアップする。
  • ゾーン転送には TCP/53 が使われる。

これであなたのDNS環境は、企業のサーバー室にあるものと遜色ないレベルの堅牢さを手に入れました。

さて、次回(第6回)は、運用を楽にするための小技「CNAME(エイリアス)とワイルドカード」について深掘りします。
www なしでもアクセスさせたい」「サブドメインを無限に作りたい」といったWebサーバー管理者からの要望に応えるためのテクニックを学びましょう!

▼スレーブ構成を実験できるVPS

DNSの冗長化(マスター/スレーブ構成)を学ぶには、実際に2台のサーバーを動かして通信させるのが一番です。安価で複数台契約もしやすいAlmaLinux 9対応VPSはこちら。

【2026年最新】Linuxサーバー構築におすすめのVPS比較3選!現役エンジニアが速度とコスパで厳選
Linuxの勉強、まだ「自分のPC」でやって消耗していませんか?「Linuxを覚えたいけど、環境構築でエラーが出て先に進めない…」「VirtualBoxを入れたらパソコンが重くなった…」これは、Linux学習を始める9割の人がぶつかる壁です...

コメント