ワイルドカードDNSレコード -- *.example.com
ワイルドカードDNSレコードが、明示的なレコードを持たないすべてのサブドメインにマッチする仕組みを解説します。構文、制限事項、マルチテナントホスティング設定を理解しましょう。
Zone File Entry
*.example.com. IN A 203.0.113.50
詳細な説明
ワイルドカードDNSレコードとは?
ワイルドカードDNSレコードは、ドメイン名の最も左のラベルにアスタリスク(*)を使用して、明示的なDNSレコードを持たないすべてのサブドメインにマッチするキャッチオールです。
BINDゾーンファイルの構文
; ワイルドカードAレコード -- 未定義のすべてのサブドメインが1つのIPを指す
*.example.com. 3600 IN A 203.0.113.50
; ワイルドカードAAAAレコード
*.example.com. 3600 IN AAAA 2001:db8::50
; ワイルドカードCNAME -- 未定義のすべてのサブドメインが1つのターゲットにエイリアス
*.example.com. 3600 IN CNAME default.example.com.
; ワイルドカードMX -- メールのキャッチオール
*.example.com. 3600 IN MX 10 mail.example.com.
ワイルドカードマッチングの仕組み
ワイルドカードレコードはちょうど1つのラベルレベルでマッチします。レコード*.example.comは以下にマッチします:
foo.example.com-- マッチbar.example.com-- マッチanything.example.com-- マッチ
しかし以下にはマッチしません:
example.com-- ルートドメイン(マッチするラベルがない)sub.foo.example.com-- 2レベル深い(*.*.example.comが必要だが、標準DNSでは無効)
明示的レコードがワイルドカードを上書き
サブドメインに明示的なレコードが存在する場合、ワイルドカードより優先されます:
*.example.com. 3600 IN A 203.0.113.50 ; キャッチオール
www.example.com. 3600 IN A 203.0.113.51 ; 明示的な上書き
api.example.com. 3600 IN A 203.0.113.52 ; 明示的な上書き
この設定では、www.example.comは.51に、api.example.comは.52に解決され、その他すべてのサブドメイン(例:blog.example.com、test.example.com)は.50に解決されます。
重要な注意点:NXDOMAINの無効化
ワイルドカードレコードは、対象範囲内のNXDOMAINレスポンスを排除します。通常、存在しないサブドメインへのクエリはNXDOMAIN(ドメインが存在しない)を返します。ワイルドカードがあると、すべてのクエリが有効なレスポンスを返します。これは以下に影響します:
- SSL/TLS:ワイルドカード証明書(
*.example.com)はワイルドカードDNSとよく組み合わされる - メール:ワイルドカードMXレコードは、任意のサブドメインへのメールが受け入れられることを意味する
- セキュリティ:攻撃者はNXDOMAINレスポンスを通じてサブドメインを列挙できなくなる
よくあるユースケース
- マルチテナントSaaS:各顧客が固有のサブドメイン(
tenant1.app.example.com)を持ち、すべて同じロードバランサーに解決される。アプリケーション層がHostヘッダーに基づいてルーティング。 - 開発環境:開発者がDNSを更新することなく、テスト用の任意のサブドメインを作成できる。
- キャッチオールメールルーティング:任意のサブドメインアドレスへのメールを受け入れる。
ワイルドカードとCNAME
すべてのサブドメインをCDNやロードバランサーに向けるワイルドカードCNAMEは一般的です:
*.example.com. IN CNAME lb.example.com.
注意:CNAMEレコードは同じ名前の他のレコードタイプと共存できません。ワイルドカードAレコードとワイルドカードMXレコードの両方が必要な場合、ワイルドカードCNAMEは使用しないでください。
ユースケース
ワイルドカードDNSレコードは、マルチテナントSaaSプラットフォーム、開発環境、またはすべてのサブドメインを個別に定義することなく同じサーバーに解決させたいシナリオで使用します。