【BIND9講座 第3回】脱・IPアドレス生活!「正引きゾーン」の設定と絶対に失敗しないゾーンファイルの書き方

「名前」で呼べる、それだけで世界が変わる

こんにちは!「リナックス先生」です。
BIND9講座、第3回へようこそ。

前回構築したキャッシュサーバーのおかげで、あなたのサーバーはインターネット上の住所を検索できるようになりました。
しかし、まだ肝心なことができていません。
それは、「家の中(社内)にある機器を名前で呼ぶこと」です。

「ファイルサーバーのIP、なんだっけ? 192.168.1.50だっけ?」
「プリンターのIPが変わって印刷できない!」

そんな悩みとは今日でお別れです。
今回は、BIND9にあなただけのドメイン(例: kou-house.lan)を登録し、fileserver.kou-house.lan と打つだけで繋がる環境、いわゆる「正引き(Forward Lookup)」の仕組みを構築します。

ここからが本当のDNSサーバー構築です。
設定ファイルの記述量が増えますが、一行一行の意味を理解すれば恐れることはありません。プロの作法を身につけましょう!

コウ君

先生、待ちに待った独自ドメインですね!
でも、ドメインって「お名前.com」とかでお金を払って買うものじゃないんですか?
勝手に作って怒られないんですか?

リナックス先生

良い質問ね。
インターネットに公開しない「家の中だけのドメイン」なら、誰にも迷惑をかけないから自由な名前を付けてOKよ。
ただし、.local はトラブルの元だから避けるのがプロの常識。今回は安全な .lan を使いましょう!

1. 今回の構築シナリオ

まずは設計図を作りましょう。
行き当たりばったりで設定ファイルを書き始めるのは、失敗の元です。

1-1. ドメイン名の決定

今回は、以下のドメイン名を使用します。

  • ドメイン名: kou-house.lan

【プロの豆知識:なぜ .local を使わない?】
家庭内LANなどでよく something.local というドメインを見かけますが、実はこれは避けるべきです。
Mac OS(Bonjour)やWindowsの一部の機能が、.local を「mDNS」という別の仕組みで予約して使っているため、DNSと競合して「繋がったり繋がらなかったり」という原因不明のトラブルを引き起こします。
組織内ドメインには .lan.internal、あるいは .corp などを使うのが鉄則です。

1-2. 登録するホスト情報

以下の機器を名前解決できるようにします。

ホスト名 FQDN (完全修飾ドメイン名) IPアドレス 備考
ns1 ns1.kou-house.lan 192.168.1.10 DNSサーバー自身
router router.kou-house.lan 192.168.1.1 ルーター(ゲートウェイ)
pc pc.kou-house.lan 192.168.1.20 あなたのPC
web web.kou-house.lan 192.168.1.10 別名(CNAME)で登録

2. named.conf に「ゾーン定義」を追加する

まずは BIND の基本設定ファイル /etc/named.conf に、「kou-house.lan というドメインを管理しますよ」という宣言(ゾーン定義)を追加します。

2-1. ファイルの編集

sudo vi /etc/named.conf

ファイルの一番下(includeなどの前あたり、または最後尾)に以下を追記します。
options { ... }; の中には書かないでください。外側に書きます。

# 内部向け正引きゾーンの定義
zone "kou-house.lan" IN {
    type master;                  # 自分が管理者(マスター)である
    file "kou-house.lan.db";      # 実データファイルの名前
    allow-update { none; };       # 勝手な書き換えを禁止
};
  • type master: このサーバーがオリジナルデータを持つ「権威サーバー」であることを示します。
  • file: データファイル(ゾーンファイル)の名前を指定します。パスを省略すると /var/named/ が補完されます。

2-2. 構文チェック

追記が終わったら、必ずチェックします。

sudo named-checkconf

何も表示されなければOKです。

3. 【最重要】ゾーンファイルの作成

いよいよ本丸、ゾーンファイルを作成します。
ここには、DNSのレコード(AレコードやNSレコードなど)を記述します。
このファイルの書き方には厳格なルールがあり、カンマ一つ、ドット一つで動作が変わります。心してかかりましょう。

3-1. 新規ファイルの作成

/var/named/ ディレクトリに移動し、新規作成します。

sudo vi /var/named/kou-house.lan.db

3-2. 記述内容(完全版)

以下の内容を記述してください。
※セミコロン ; 以降はコメントです。

$TTL 86400
@   IN  SOA     ns1.kou-house.lan. root.kou-house.lan. (
            2026011501  ; Serial  (YYYYMMDDnn)
            3600        ; Refresh (1 hour)
            900         ; Retry   (15 min)
            604800      ; Expire  (1 week)
            86400       ; Minimum (1 day)
        )

; ネームサーバー(NS)レコード
    IN  NS      ns1.kou-house.lan.

; Aレコード(アドレス定義)
ns1     IN  A       192.168.1.10
router  IN  A       192.168.1.1
pc      IN  A       192.168.1.20

; CNAMEレコード(別名定義)
web     IN  CNAME   ns1

一見呪文のようですが、分解して解説します。

4. ゾーンファイルの徹底解剖

プロのエンジニアとして、ここに何が書かれているかを100%理解する必要があります。

① $TTL(生存時間)

$TTL 86400
この情報を教えてもらった相手(キャッシュサーバー)が、どれくらいの期間その情報を覚えていて良いかという時間(秒)です。
86400秒=24時間です。変更が少ない内部ドメインなら長めでOKです。

② SOAレコード(管理情報)

@ IN SOA ...
「Start Of Authority(権威の開始)」の略で、このゾーンの管理者情報などを定義する必須レコードです。

  • @ (アットマーク): 「このドメイン自身(kou-house.lan)」を表す変数です。
  • ns1.kou-house.lan.: プライマリDNSサーバーの名前。最後のドットを忘れないでください!
  • root.kou-house.lan.: 管理者のメールアドレス。root@kou-house.lan@. に置き換えて書くルールがあります。

③ シリアル番号とタイマー設定

カッコ ( ) の中の数字は、スレーブサーバー(予備機)との連携に使われます。

  • Serial: 設定のバージョン番号。「YYYYMMDDnn(年月日+連番)」にするのが業界の鉄則です。
    例:2026年1月15日の1回目の修正なら 2026011501
    ※注意: 設定を変更したら、必ずこの数字を大きくしないと、変更が反映されない場合があります。
  • Refresh/Retry/Expire: スレーブサーバーがマスターにデータを取りに来る間隔などの設定です。1台構成の場合はあまり気にしなくても動きますが、記述は必須です。

④ NSレコード(ネームサーバー)

IN NS ns1.kou-house.lan.
「このドメインのことは、こいつ(ns1)に聞いてね」という宣言です。

⑤ Aレコード(Address)

ns1 IN A 192.168.1.10
最も基本的な、「名前」と「IP」の対応付けです。
ホスト名(ns1)だけ書くと、自動的にドメイン名が補完されます。

⑥ CNAMEレコード(Canonical Name)

web IN CNAME ns1
「web」は「ns1」の別名ですよ、という定義です。
WebサーバーをDNSサーバーと同居させる場合などに便利です。「web」にアクセスすると、自動的に「ns1」のIP(192.168.1.10)が返されます。

コウ君

なるほど…!
シリアル番号の日付ルール、現場っぽいですね。
「最後のドットを忘れるな」っていうのは、ルート(.)のことですね?

5. パーミッション調整と構文チェック

ファイルを作成しましたが、まだ安心できません。
Linuxにおける「所有権」と、BINDの「構文チェック」をクリアする必要があります。

5-1. 所有権の変更

作成したファイルは、rootユーザーのものになっています。
BIND(namedユーザー)が読み取れるように、グループを変更しておきましょう。

sudo chown root:named /var/named/kou-house.lan.db

※読み取り権限(640または644)があれば動きますが、お作法として設定しておきます。

5-2. ゾーンファイルの構文チェック

named.conf のチェックには named-checkconf を使いましたが、ゾーンファイル専用のチェックコマンド named-checkzone があります。
これもプロの必須ツールです。

書式: named-checkzone [ドメイン名] [ファイルパス]

sudo named-checkzone kou-house.lan /var/named/kou-house.lan.db

▼成功時の表示

zone kou-house.lan/IN: loaded serial 2026011501
OK

OK と出れば完璧です!
もしエラーが出た場合は、行番号をヒントに修正してください。
よくあるミスは「閉じカッコ忘れ」「ドット忘れ」「Serialの桁数間違い」です。

6. 反映と動作テスト

いよいよ設定を反映させます。

6-1. BINDの再起動

sudo systemctl restart named

エラーが出なければ起動成功です。

6-2. digコマンドで正引きテスト

さあ、感動の瞬間です。
自分のDNSサーバーに問い合わせてみましょう。

dig @127.0.0.1 router.kou-house.lan

▼期待される結果

;; ANSWER SECTION:
router.kou-house.lan.   86400   IN      A       192.168.1.1

ちゃんとIPアドレス 192.168.1.1 が返ってきましたか?
ついでに別名(CNAME)も試してみましょう。

dig @127.0.0.1 web.kou-house.lan

ns1.kou-house.lan を経由して 192.168.1.10 が返ってくれば大成功です!

7. クライアントPCの設定(DNSの参照先変更)

サーバー側の準備は整いましたが、まだあなたのPC(WindowsやMac)は、この新しいDNSサーバーを知りません。
PCのネットワーク設定で、DNSサーバーのアドレスを、今回構築したサーバーのIP(例: 192.168.1.10)に変更してください。

【Windowsの場合】
コントロールパネル → ネットワークと共有センター → アダプターの設定 → IPv4のプロパティ → 「次のDNSサーバーのアドレスを使う」に 192.168.1.10 を入力。

設定変更後、コマンドプロンプトで ping router.kou-house.lan が通れば、あなたの家は完全なドメイン環境になりました!

まとめ:IPアドレスからの解放

第3回では、内部ドメインの「正引き」環境を構築しました。

  • named.confzone "ドメイン名" { ... }; を追加する。
  • ゾーンファイルには SOANSA レコードが必要。
  • シリアル番号 は変更するたびに必ず増やす(日付+連番が推奨)。
  • ドメイン名の末尾にはルートを表す「.(ドット)」をつける。
  • 作成後は必ず named-checkzone でチェックする。

これで、機器が増えてもゾーンファイルに追記するだけで、覚えやすい名前で管理できるようになりました。
しかし、DNSにはもう一つの重要な機能があります。

「IPアドレスから名前を知りたい」というケースです。
サーバーのアクセスログにはIPアドレスしか残りませんが、それが「どのPCなのか」名前で分かれば便利ですよね?

次回(第4回)は、この逆向きの検索を行う「逆引きゾーン(Reverse Lookup)」の設定を行います。
IPアドレスをひっくり返して記述する特殊な記法 in-addr.arpa が登場します。お楽しみに!

▼独自ドメインの検証に最適なVPS

内部ドメインだけでなく、実際にインターネットで使えるドメインを取得してDNSを構築したい場合、固定IPアドレスを持つVPSが必須です。学習用に最適な環境はこちら。

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

コメント