【BIND9講座 第6回】Web担当者が喜ぶDNS設計!CNAME(別名)の便利さと「Zone Apex」の落とし穴

「IPアドレスが変わりました」で騒がないために

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

これまでは「正引き」「逆引き」「冗長化」と、インフラエンジニア目線での構築をしてきました。
しかし、DNSサーバーの主な利用者は誰でしょうか?
そう、Webサイトを作る「Web担当者」や、アプリケーションを作る「開発者」たちです。

彼らはよくこんな無茶振…いえ、相談をしてきます。
「キャンペーン用のサイト、今のWebサーバーと同じ場所でいいから campaign.kou-house.lan って名前で作ってよ」
「WebサーバーのIPが変わるかもしれないから、DNS側でうまくやっといてよ」

いちいちAレコード(IPアドレス)を設定していたら、IP変更のたびにDNS設定も修正しなければならず、管理がパンクします。
そんな時に使うのが、既存の名前に「あだ名」をつける **CNAME(シーネーム)** レコードです。

コウ君

先生、「あだ名」って便利そうですね!
IPアドレスを書かなくていいなら、全部CNAMEにしちゃえば楽なんじゃないですか?
IPが変わっても勝手についていくわけだし。

リナックス先生

コウ君、それは甘い罠よ。
CNAMEは確かに便利だけど、使いすぎると「名前解決の回数」が増えて表示が遅くなるし、何よりDNSには「あだ名をつけてはいけない場所」という絶対的なルールがあるの。
今日はプロでも間違えるその「禁忌」について詳しく話すわね。

1. CNAMEレコード(別名)の基本

まずは基本から。CNAME(Canonical Name)は、あるドメイン名を別のドメイン名に転送するためのレコードです。

1-1. 書式と仕組み

ゾーンファイル(/var/named/kou-house.lan.db)に以下のように記述します。

; 書式: [別名] IN CNAME [本名]
web     IN  CNAME   host1

この状態で web.kou-house.lan にアクセスすると、以下のような処理が行われます。

  1. ユーザー:「web のIP教えて!」
  2. DNS:「web は host1 の別名だよ。host1 のIPを調べてね」
  3. ユーザー:「じゃあ host1 のIP教えて!」
  4. DNS:「host1 は 192.168.1.10 だよ」

つまり、2回問い合わせが発生します
Aレコードなら1回で済むため、パフォーマンスの観点からは「無闇に多用しない」のが原則です。

1-2. どんな時に使うのか?

パフォーマンスが落ちてでもCNAMEを使うべきシーンは以下の通りです。

  • 外部サービスを利用する場合:
    「ブログは外部のサービス(例: ghs.google.com)を使いたい」といった場合、相手のIPアドレスは頻繁に変わるため、Aレコードでは追従できません。CNAMEなら相手の名前を指定するだけなので追従可能です。
  • 役割ごとに名前を変えたい場合:
    実体は1台のサーバーでも、ftpmailwww といった機能別の名前を付けておけば、将来サーバーを分割する時にDNSの向き先を変えるだけで済みます。

2. 【重要】Zone Apex(ルート)問題

ここが今回の最重要ポイントです。
「ドメインそのもの(kou-house.lan)」のことを、専門用語で Zone Apex(ゾーン・エイペックス) と呼びます。

DNSの仕様(RFC)には以下の鉄則があります。

「CNAMEレコードは、他のレコードと同居できない」

どういうことか?

ドメインのルート(kou-house.lan)には、必ず以下の2つのレコードが存在します。

  • SOAレコード: ゾーンの管理情報
  • NSレコード: ネームサーバー情報

これらは必須です。絶対に消せません。
ここに CNAME を書こうとするとどうなるでしょう?

; これはエラーになります!
@   IN  SOA     ...
@   IN  NS      ...
@   IN  CNAME   other-server.lan.  ; ← SOAやNSと同居しようとしている!

「CNAMEは他のレコードと同居できない」というルールに違反するため、BINDはエラーを出して起動しません。
つまり、「ドメイン名そのもの(kou-house.lan)には、絶対にCNAMEを設定できない」のです。

Web担当者が泣くパターン

よくあるトラブルがこれです。

  • Web担当:www.kou-house.lan はCNAMEで外部のクラウドに向けました。これでOK!」
  • Web担当: 「あ、www なしの kou-house.lan でもアクセスできるようにしたいから、そっちもCNAMEでクラウドに向けてください」
  • あなた: 「(DNSの仕様で)できません」
  • Web担当: 「えっ、なんで? 他の会社はできてるよ?」

解決策

Zone Apex(ルート)に関しては、CNAMEを使わず、必ず Aレコード(IPアドレス)で指定する必要があります。
外部サービス(HerokuやAWS ELBなど)を使っていてIPが固定できない場合は、Webサーバー側で www ありにリダイレクトさせるなどの回避策が必要になります。

※最近のクラウドDNS(AWS Route53のAliasなど)では独自拡張でこれを可能にしていますが、BIND標準の機能ではNGです。基本を知っておきましょう。

3. 魔法の指定「ワイルドカード」

次は、もっと柔軟な設定です。
「どんなサブドメインが来ても、とりあえず全部このIPに飛ばしたい」という場合に使います。

3-1. 書式

アスタリスク * を使います。

* IN  A       192.168.1.20

こう書いておくと、test.kou-house.lan でも abc.kou-house.lan でも、定義されていない名前はすべて 192.168.1.20 に解決されます。

3-2. 優先順位のルール

「ワイルドカードを書いたら、個別に設定したレコードはどうなるの?」と心配になるかもしれません。
安心してください。DNSには「明示的に書かれたレコードが優先される」というルールがあります。

; 個別の定義
www     IN  A       192.168.1.10

; ワイルドカード
* IN  A       192.168.1.20

この場合、www.kou-house.lan1.10 になり、それ以外の blog.kou-house.lan などは 1.20 になります。

4. 【実践】設定ファイルへの記述

それでは、実際にマスターサーバーの設定ファイル(/var/named/kou-house.lan.db)を編集して、CNAMEとワイルドカードを追加してみましょう。

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

▼追記する内容

; 既存の設定の下に追加

; CNAMEの設定
; ftp.kou-house.lan は ns1 (192.168.1.10) の別名
ftp     IN  CNAME   ns1

; ワイルドカードの設定
; 未定義のサブドメインはすべて Webサーバー(1.10) へ
* IN  A       192.168.1.10

; 【実験】Zone Apex に CNAME は書けないので Aレコードにする
; @       IN  CNAME   ns1  ; ← これはエラーになる!
@       IN  A       192.168.1.10

【忘れずに!】
ファイルを修正したので、SOAレコードのシリアル番号を必ず増やしてください。

反映と確認

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

5. 動作テスト

dig コマンドで挙動を確認します。

CNAMEの確認

dig @127.0.0.1 ftp.kou-house.lan

▼結果の注目点

;; ANSWER SECTION:
ftp.kou-house.lan.  86400   IN      CNAME   ns1.kou-house.lan.
ns1.kou-house.lan.  86400   IN      A       192.168.1.10

ANSWERセクションが2行になっています。
「ftp は ns1 だよ」「ns1 は 1.10 だよ」と、たらい回しされている様子が見えますね。

ワイルドカードの確認

存在しない適当な名前で引いてみます。

dig @127.0.0.1 random-name.kou-house.lan

ワイルドカードで指定したIPアドレス(192.168.1.10)が返ってくれば成功です!

コウ君

なるほど!
ワイルドカードを使えば、「ユーザーごとにサブドメインを配りたい」みたいなサービスも簡単に作れそうですね。
あと、ルートドメインにはCNAMEが書けない理由、SOAとぶつかるからって聞いて納得しました!

6. ワイルドカードの副作用(注意点)

非常に便利なワイルドカードですが、副作用もあります。

  • タイプミスに気づけない:
    ユーザーが ww.kou-house.lan(wが2つ)と打ち間違えても、エラーにならずワイルドカードのIPに繋がってしまいます。「ページが見つかりません」ではなく、トップページが表示されたりするため、混乱を招くことがあります。
  • 意図しないレコードも解決される:
    mail.kou-house.lan など、本来メールサーバーとして設定すべき名前も、定義し忘れるとWebサーバーのIPを返してしまいます。重要なホスト名は必ず個別に定義しましょう。

まとめ:名前解決をデザインする

第6回では、DNS運用を柔軟にするテクニックを学びました。

  • CNAME は「別名」をつける機能。IP変更に強くなるが、使いすぎは遅延の元。
  • Zone Apex(ルートドメイン) には CNAME を設定できない(SOA/NSと競合するため)。
  • ワイルドカード(*) は「その他すべて」を引き受ける魔法。
  • 個別の定義がワイルドカードより優先される。

これで、Web担当者からの「あんなことしたい」「こんな名前にしたい」という要望にも、技術的な根拠を持って答えられるようになりましたね。

さて、次回(第7回)は、セキュリティに関わる重要な機能「ACL(アクセスコントロールリスト)」を深掘りします。
「社内の特定の部署からしかアクセスさせたくない」「あやしい国からの問い合わせは無視したい」。
そんな高度な制御を行うための設定方法を学びます。お楽しみに!

▼Webサーバーと連携して学ぶVPS

CNAMEやワイルドカードは、実際にApacheやNginxのバーチャルホスト設定と組み合わせてこそ真価を発揮します。Webサーバーも同時に構築して実験できるおすすめVPSはこちら。

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

コメント