編集による@Svenの答えはすでに正しいですが、直接物事を語るだけです。
TL; DRはい、アンダースコアはCNAME
両側のレコードで有効です。理由については以下をお読みください。
RFC 1034などでは、「ドメイン名」に基づいてレコードを定義しています。これは、任意の文字を含むラベルであるため、を含み_
ます。
ただし、一部のレコードには、所有者名とリソースデータ(RDATA)のどちらかまたは両方に対してより厳しいルールがあります。受け入れられるホスト名のみがあり、実際、ルールは現在(これは、ホスト名が数字で開始できなかった以前は緩和されていました)、任意のASCII文字(大文字と小文字の区別なし)、任意のASCII数字、およびハイフンを使用できます。 、およびいくつかの追加の位置規則:開始または終了にハイフンなし、および位置3と4にダブルハイフンなし(xn--
大文字と小文字のみが許可される形式のIDNの「予約」のため)。
たとえば、A
or AAAA
レコードの所有者名はホスト名であり、ドメイン名ではありません。test.example.com A 192.0.2.1
これらすべてがそうで
はない理由は正当です:
_test.example.com A 192.0.2.1
-test.example.com A 192.0.2.1
test-.example.com A 192.0.2.1
named-checkzone
プログラムで簡単にテストできます(bind
ネームサーバーソフトウェアの一部ですが、個別に使用およびインストールできます。他のネームサーバーにも同様のチェックツールがあり、おそらくそのためのオンラインインターフェイスもある可能性があります)。レコードをファイルに入れて実行するだけです。それ:
$ cat z1.txt
test.example.com. 1 IN A 192.0.2.1
_test.example.com. 1 IN A 192.0.2.1
-test.example.com. 1 IN A 192.0.2.1
test-.example.com. 1 IN A 192.0.2.1
$ /usr/local/sbin/named-checkzone example.com z1.txt
z1.txt:2: _test.example.com: bad owner name (check-names)
z1.txt:3: -test.example.com: bad owner name (check-names)
z1.txt:4: test-.example.com: bad owner name (check-names)
(前の数字IN
はTTLです。これは、ここでの問題とは関係ありませんが、レコードの構文検証を渡すためだけに必要です)。
他のレコードの場合は逆です。NS
所有者には制限がなく、データである「ターゲット」には制限があるためです。DNSクエリに応答する物理ホストである信頼できるネームサーバーをポイントする必要があるため、データはドメイン名ではなくホスト名のみにすることができます。
次に、についてCNAME
、セクション3.6のRFC 1034からの関連する引用を示します。
「所有者:RRが見つかったドメイン名です。」これは、デフォルトでは、ホスト名だけでなく(CNAMEレコードのソースとして)任意の名前を意味します
"RDATA:タイプであり、リソースを説明するクラス依存データである場合があります:"
「CNAMEドメイン名」
したがって、aの所有者CNAME
(その左側にあるもの)とそれに添付されているリソースデータ、その宛先/ターゲット(その右側にあるもの)は両方ともドメイン名であり、ホスト名だけではありません。基本的に任意の文字なので_
、両側で含めることができます。
繰り返しますが、でテストするのは簡単named-checkzone
です:
$ cat z2.txt
_foo 1 CNAME _bar
$ /usr/local/sbin/named-checkzone example.com z2.txt
zone example.com/IN: has 0 SOA records
zone example.com/IN: has no NS records
zone example.com/IN: not loaded due to errors.
エラーはありませんCNAME
(他のエラーは、偽のゾーンには何も配置しなかったため、SOA
またはNS
実際のゾーンのようなレコードがあるため、予想されます)