「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はこちら。


コメント