web-dev-qa-db-ja.com

CNAMEレコードでの_(アンダースコア)は違法ですか?

ホスティング事業者のウェブインターフェースでDKIM鍵の長いTXTレコードを作成できません。

各行は256文字のみを受け入れることができます。

複数の行を試し、最初に("を追加し、最後に")を追加してみました。どちらも機能しません。

次に、別のホスターのレコードにcnameを作成してみました。ここで、can DKIM TXTレコードを作成します。

しかし今、WebインターフェースはCNAMEレコードの不正な名前について不平を言います。

mail._domainkey.example.com TXTは問題ありません
mail._domainkey.example.com CNAMEは問題がある
mail.domainkey.example.com CNAMEは問題ありませんが、必要なものではありません。

Webインターフェースが私たちを狂わせようとしているだけなのか、それともCNAMEにアンダースコアを付けることは本当に「違法」なのか?

9
Lenne

はい、DNS名(A/AAAAも含まれます)には[0-9], [a-z], -、アンダースコアは無効です。 TXTレコードはホスト名ではないため、この制限は適用されません。最後に1つの編集:-も最初の文字として使用できないため、mail.-domainkey.our.domは無効です。

https://en.wikipedia.org/wiki/Hostname#Restrictions_on_valid_hostnames


最終編集:私は部分的に間違っていました。 CNAMEがホスト名として使用される場合、上記の制限が適用されます。 CNAMEはDKIMコンテキストではホスト名と見なされないようです。その場合、_はCNAMEエントリの有効な部分である必要があります。参照 https://stackoverflow.com/questions/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491

18
Sven

DNSでは有効な文字を使用できます。 を参照してくださいhttps://tools.ietf.org/html/rfc2181#section-11

「DNS自体は、リソースレコードの識別に使用できる特定のラベルに1つの制限のみを課します。その1つの制限は、ラベルの長さとフルネームに関係します。1つのラベルの長さは、1〜63オクテットに制限されます。 」

MXレコードに値「Alice」が含まれている場合など、クライアントは名前の値を検証する必要がありますが、「Alice」は有効な電子メールアドレスではないため、検索後にその値を拒否する必要があります。

この場合、ホスティング業者が入力を「検証」しているように見え、手動で入力できるはずです。

2
Jim B

RFC 1034:ラベルはARPANETホスト名の規則に従う必要があります。それらは文字で始まり、文字または数字で終わり、文字、数字、およびハイフンのみを内部文字として持つ必要があります。長さにいくつかの制限もあります。ラベルは63文字以下にする必要があります。

0
micmav

編集による@Svenの答えはすでに正しいですが、直接物事を語るだけです。

TL; DRはい、アンダースコアは両側のCNAMEレコードで有効です。理由については以下をお読みください。

RFC 1034 などは、「ドメイン名」に基づいてレコードを定義します。これは、任意の文字のラベルであり、_を含みます。

しかし、一部のレコードには、所有者名またはリソースデータ(RDATA)、あるいはその両方に対してより厳しい規則があります。受け入れられるホスト名のみがあり、実際にルールは現在(ホスト名が数字で開始できなかった以前は緩和されていました)、任意のASCII文字を使用できます(大文字と小文字の区別なし) )、任意のASCII桁、およびハイフン、さらにいくつかの追加の位置規則:開始または終了にハイフンなし、および位置3と4にダブルハイフンなし(あるIDNの「予約」のため) xn--の形式で、大文字と小文字のみが許可されます)。

たとえば、Aまたは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ドメイン名。」

したがって、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レコードを配置しなかったため、他のエラーが予想されます)。

0
Patrick Mevzek