「名前」で呼べる、それだけで世界が変わる
こんにちは!「リナックス先生」です。
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.conf に
zone "ドメイン名" { ... };を追加する。 - ゾーンファイルには SOA、NS、A レコードが必要。
- シリアル番号 は変更するたびに必ず増やす(日付+連番が推奨)。
- ドメイン名の末尾にはルートを表す「.(ドット)」をつける。
- 作成後は必ず
named-checkzoneでチェックする。
これで、機器が増えてもゾーンファイルに追記するだけで、覚えやすい名前で管理できるようになりました。
しかし、DNSにはもう一つの重要な機能があります。
「IPアドレスから名前を知りたい」というケースです。
サーバーのアクセスログにはIPアドレスしか残りませんが、それが「どのPCなのか」名前で分かれば便利ですよね?
次回(第4回)は、この逆向きの検索を行う「逆引きゾーン(Reverse Lookup)」の設定を行います。
IPアドレスをひっくり返して記述する特殊な記法 in-addr.arpa が登場します。お楽しみに!
▼独自ドメインの検証に最適なVPS
内部ドメインだけでなく、実際にインターネットで使えるドメインを取得してDNSを構築したい場合、固定IPアドレスを持つVPSが必須です。学習用に最適な環境はこちら。


コメント