Apakah _ (garis bawah) ilegal di catatan CNAME?

9

Kami mengalami masalah saat membuat catatan TXT panjang untuk kunci DKIM pada antarmuka web di hoster kami.

Setiap baris hanya dapat menerima 256 karakter.

Kami mencoba beberapa baris, lalu mencoba menambahkan ("pada yang pertama dan ")setelah yang terakhir seperti yang disarankan. Tidak ada yang berhasil.

Kemudian kami mencoba membuat cname ke catatan di hoster lain, tempat kami dapat membuat catatan DKIM TXT.

Tapi sekarang webinterface mengeluhkan nama ilegal dalam CNAMEcatatan.

mail._domainkey.example.com TXTOK
mail._domainkey.example.com CNAMEtidak OK tidak apa
mail.domainkey.example.com CNAME-apa, tapi tidak apa yang kita inginkan.

Apakah antarmuka web hanya bertekad untuk membuat kita gila, atau benar-benar "ilegal" untuk menggarisbawahi CNAME?

Lenne
sumber
1
Penyedia memperbaiki antarmuka web saat saya menulis ini!
Lenne

Jawaban:

18

Ya, nama DNS (ini juga termasuk A / AAAA) hanya boleh berisi [0-9], [a-z], -, jadi garis bawah tidak valid. Perhatikan bahwa catatan TXT bukan nama host, dan batasan ini tidak berlaku untuk itu. Dan satu edit terakhir: -mungkin juga tidak digunakan sebagai karakter pertama, jadi mail.-domainkey.our.domtidak akan valid.

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


Suntingan terakhir: Saya salah sebagian. Ketika CNAME digunakan sebagai nama host, pembatasan di atas berlaku. Tampaknya CNAME tidak dianggap sebagai nama host dalam konteks DKIM dan dalam hal itu, _harus menjadi bagian yang valid dari entri CNAME. Lihat /programming/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491

Sven
sumber
Tetapi apakah CNAME nama host? Beberapa dokumentasi menunjukkan untuk menggunakan garis bawah dalam suatu cname, jadi sepertinya itu berfungsi. kb.mailchimp.com/accounts/email-authentication/…
Lenne
Juga, garis bawah muncul di entri DNS pada zona terintegrasi terintegrasi MS Windows Active Directory yang mendasari Windows Domains, setidaknya dalam alat manajemen DNS Microsoft, tapi saya tidak yakin apakah garis bawah itu sebenarnya bagian dari nama dan Windows mendukung garis bawah dalam DNS permintaan, atau jika garis bawah hanya muncul di snap-in manajemen DNS dan sebenarnya bukan bagian dari nama.
Todd Wilcox
Perhatikan bahwa entri Wikipedia yang dikutip berkaitan dengan nama internet, bukan DNS.
Jim B
@ Lenne: CNAME adalah nama host yang valid karena itu adalah alias untuk host. @ToddWilcox: ya, ini diketahui, dan ini adalah pelanggaran (disengaja?) Spesifikasi oleh MS yang menyebabkan sistem lain tidak ada jumlah masalah sama sekali seperti yang muncul dalam DNS, DHCP, ... paket meskipun tidak sah.
mirabilos
2
@mirabilos "CNAME adalah nama host yang valid" tidak, target (RDATA) dari CNAME adalah nama domain, bukan nama host (nama domain adalah superset dari semua nama host yang mungkin). _foo CNAME _barbenar-benar sah, Anda dapat mengujinya named-checkzone.
Patrick Mevzek
2

Setiap karakter yang valid diizinkan dalam DNS. Lihat https://tools.ietf.org/html/rfc2181#section-11

"DNS sendiri menempatkan hanya satu batasan pada label tertentu yang dapat digunakan untuk mengidentifikasi catatan sumber daya. Satu batasan itu berkaitan dengan panjang label dan nama lengkap. Panjang label mana pun terbatas pada antara 1 dan 63 oktet. "

Klien harus memvalidasi nilai nama, misalnya, data MX mungkin berisi nilai "Alice" tetapi setelah pencarian nilai itu harus ditolak karena "Alice" bukan alamat email yang valid.

Dalam hal ini sepertinya hoster Anda "memvalidasi" input Anda, dan mereka harus bisa memasukkannya secara manual untuk Anda.

Jim B
sumber
"Setiap karakter yang valid diizinkan dalam DNS" itu sedikit lebih rumit dari itu. Ada nama domain dan nama host. Kecuali jika dikatakan sebaliknya, di mana-mana Anda memiliki label yang merupakan nama domain yang berarti memang karakter apa pun, jadi _atau apa pun yang Anda suka juga. Tetapi, untuk beberapa catatan, Anda hanya dapat menggunakan nama host dan bukan nama domain. Hostname hanya berupa digit huruf dan tanda hubung, tidak ada yang lain. Misalnya, pemilik Aatau AAAAcatatan adalah nama host, bukan nama domain. RDATA (target) NScatatan juga merupakan nama host, bukan nama domain.
Patrick Mevzek
1
"catatan MX mungkin berisi nilai" Alice "tetapi setelah pencarian nilai itu harus ditolak karena" Alice "bukan alamat email yang valid." Sejak kapan referensi alamat email MX RRs?
CVn
0

RFC 1034: Label harus mengikuti aturan untuk nama host ARPANET. Mereka harus mulai dengan huruf, diakhiri dengan huruf atau angka, dan sebagai karakter interior hanya huruf, digit, dan tanda hubung. Ada juga beberapa batasan panjang. Label harus berukuran 63 karakter atau kurang.

micmav
sumber
Saya juga memiliki masalah dengan Arduino, di mana beberapa lib memberikan nama host seperti ESP_245537, nama ini ditolak ketika server DHCP mencoba memperbarui DNS.
Lenne
Ini salah. Label CNAME belum tentu merupakan nama host, jadi semua karakter valid di sini, termasuk _.
Patrick Mevzek
1
Dan bahkan tanpa itu, ini adalah aturan lama. Mereka melarang nama host dimulai dengan angka, tetapi untuk mengakomodasi 3com.commisalnya aturan ini dilonggarkan, lihat tools.ietf.org/html/rfc1123#page-13 "Satu aspek sintaksis nama host dengan ini diubah: pembatasan pada karakter pertama santai untuk memungkinkan huruf atau angka. "
Patrick Mevzek
@Lenne jika esp_245537digunakan sebagai nama host maka pembaruan DNS harus ditolak karena itu bukan nama host yang valid. Jika ini digunakan sebagai nama domain, maka pembaruan DNS harus berhasil (kalau tidak itu adalah bug), karena itu adalah label DNS yang valid.
Patrick Mevzek
Saya telah melihat petunjuk bahwa mungkin untuk menerjemahkan karakter yang tidak valid dari DHCP ke DNS, tetapi tidak pernah membuatnya berfungsi.
Lenne
0

@ Sven menjawab, dengan sunting, sudah benar tetapi hanya untuk frase hal secara langsung.

TL; DR ya garis bawah valid dalam CNAMEcatatan di kedua sisi, baca di bawah ini untuk alasannya.

RFC 1034 dan lainnya mendefinisikan catatan berdasarkan "nama domain" yang merupakan label dengan karakter apa pun, termasuk _.

Tetapi beberapa catatan memiliki aturan yang lebih ketat untuk nama pemilik dan / atau data sumber daya (RDATA). Hanya ada nama host yang akan diterima dan memang aturannya sekarang (mereka santai di masa lalu di mana nama host tidak dapat dimulai dengan angka) yang dapat Anda gunakan huruf ASCII (tanpa sensitivitas huruf), setiap digit ASCII, dan tanda hubung , ditambah beberapa aturan posisi tambahan: tidak ada tanda hubung pada awal atau akhir dan tidak ada tanda hubung ganda pada posisi 3 dan 4 (karena "reservasi" untuk IDN yang berbentuk seperti xn--yang hanya diperbolehkan pada kasus).

Misalnya, nama pemilik Aatau AAAAcatatan adalah nama host, bukan nama domain. Jadi test.example.com A 192.0.2.1valid mengapa semua ini tidak:

_test.example.com A 192.0.2.1
-test.example.com A 192.0.2.1
test-.example.com A 192.0.2.1

Mudah untuk menguji hal-hal dengan named-checkzoneprogram (bagian dari bindperangkat lunak nameserver tetapi dapat digunakan dan diinstal secara terpisah dan server nama lain mungkin memiliki alat pengecekan yang sama dan mungkin juga ada antarmuka online untuk itu), cukup letakkan catatan dalam file dan jalankan itu di:

$ 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)

(angka sebelum INadalah TTL, ini tidak terkait dengan masalah kita di sini, tetapi hanya diperlukan untuk melewati validasi sintaksis suatu catatan).

Untuk catatan lain, sebaliknya: karena NStidak ada batasan pada pemilik, tetapi pembatasan pada "target" yang merupakan data. Data hanya bisa berupa nama host, bukan nama domain, karena Anda perlu mengarahkan server nama otoritatif yang merupakan host fisik yang merespons permintaan DNS.

Sekarang CNAME, berikut adalah kutipan yang relevan dari RFC 1034, di bagian 3.6:

"pemilik: yang merupakan nama domain tempat RR ditemukan." yang secara default berarti nama apa pun, bukan hanya nama host (sebagai sumber data CNAME)

"RDATA: yang merupakan tipe dan terkadang data yang bergantung pada kelas yang menjelaskan sumber daya:"

"CNAME nama domain."

Jadi baik pemilik dari CNAME(apa yang ada di sebelah kiri itu), dan data sumber daya yang melekat padanya, tujuan / targetnya (apa yang ada di sebelah kanan itu) adalah nama domain, dan bukan hanya nama host. Pada dasarnya karakter apa pun, jadi termasuk _diperbolehkan di kedua sisi.

Sekali lagi, mudah diuji dengan 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.

Tidak ada kesalahan apa pun tentang CNAME(kesalahan lainnya diharapkan karena di zona palsu saya, saya tidak menempatkan SOAatau NScatatan seperti yang akan dimiliki zona sebenarnya)

Patrick Mevzek
sumber