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


9

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

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

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

次に、DKIM TXTレコードを作成できる別のホスト上のレコードにcnameを作成してみました。

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

mail._domainkey.example.com TXT大丈夫です大丈夫で
mail._domainkey.example.com CNAMEはありません大丈夫
mail.domainkey.example.com CNAMEですが私たちが望むものではありません

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


1
私がこれを書いているので、プロバイダーはウェブインターフェースを修正しています!
Lenne

回答:


18

はい、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エントリの有効な部分である必要があります。/programming/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491を参照してください


しかし、CNAMEはホスト名ですか?一部のドキュメントでは、cnameでアンダースコアを使用することが示されているため、一見動作します。 kb.mailchimp.com/accounts/email-authentication/...
Lenne

また、少なくともMicrosoftのDNS管理ツールでは、Windowsドメインの下にあるMS Windows Active Directory統合ゾーンのDNSエントリにアンダースコアが表示されますが、これらのアンダースコアが実際に名前の一部であり、WindowsがDNSでアンダースコアをサポートしているかどうかはわかりませんリクエスト、またはアンダースコアがDNS管理スナップインにのみ表示され、実際には名前の一部ではない場合。
トッドウィルコックス

引用されているウィキペディアのエントリは、DNSではなくインターネット名に関係していることに注意してください。
ジムB

@ Lenne:CNAMEはホストのエイリアスであるため、有効なホスト名です。@ToddWilcox:はい、これは既知であり、これはMSによる(意図的な?)仕様違反であり、合法ではないにも関わらず、DNS、DHCP、…パケットに表示されるため、他のシステムに問題を引き起こしませんでした。
mirabilos 2017

2
@mirabilos "CNAMEは有効なホスト名です"いいえ、CNAMEのターゲット(RDATA)はホスト名ではなくドメイン名です(ドメイン名はすべての可能なホスト名のスーパーセットです)。_foo CNAME _bar完全に合法であり、でテストできますnamed-checkzone
Patrick Mevzek

2

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

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

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

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


「DNSではすべての有効な文字が許可されています」これは少し複雑です。ドメイン名とホスト名があります。特に断りのない限り、どこにでもドメイン名のラベルがあります。これは、実際に任意の文字を意味し_ます。ただし、一部のレコードでは、ドメイン名ではなくホスト名のみを使用できます。ホスト名は文字の数字とハイフンだけで、それ以外は何もありません。たとえば、Aor AAAAレコードの所有者はドメイン名ではなくホスト名です。レコードのRDATA(ターゲット)NSもホスト名であり、ドメイン名ではありません。
Patrick Mevzek

1
「MXレコードに値「アリス」が含まれている可能性がありますが、ルックアップ後、「アリス」は有効な電子メールアドレスではないため、その値は拒否されます。」MX RRはいつ電子メールアドレスを参照するのですか?
CVn

0

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


Arduinoにも問題があります。一部のライブラリではESP_245537のようなホスト名が与えられますが、DHCPserverがDNSを更新しようとすると、この名前が拒否されます。
Lenne、

これは間違っています。CNAMEのラベルは必ずしもホスト名である必要はないため、ここを含むすべての文字が有効です_
Patrick Mevzek

1
そして、それがなくても、これらは古いルールです。彼らは、数字で始まるホスト名を禁止されたが、対応するために3com.com、このルールが緩和された例えば、参照tools.ietf.org/html/rfc1123#page-13「ホスト名の構文の一の態様は、ここに変更されます:最初の文字の制限文字または数字を使用できるように緩和されています。」
Patrick Mevzek

@Lenne esp_245537がホスト名として使用されている場合、それは有効なホスト名ではないため、DNS更新を拒否する必要があります。これがドメイン名として使用されている場合、DNS更新は有効です(それ以外の場合はバグです)。これは有効なDNSラベルであるためです。
Patrick Mevzek

DHCPからDNSに無効な文字を変換することが可能であるというヒントを見てきましたが、機能させることができませんでした。
Lenne、

0

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

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

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

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

たとえば、Aor 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実際のゾーンのようなレコードがあるため、予想されます)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.