@ Sven menjawab, dengan sunting, sudah benar tetapi hanya untuk frase hal secara langsung.
TL; DR ya garis bawah valid dalam CNAME
catatan 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 A
atau AAAA
catatan adalah nama host, bukan nama domain. Jadi
test.example.com A 192.0.2.1
valid 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-checkzone
program (bagian dari bind
perangkat 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 IN
adalah TTL, ini tidak terkait dengan masalah kita di sini, tetapi hanya diperlukan untuk melewati validasi sintaksis suatu catatan).
Untuk catatan lain, sebaliknya: karena NS
tidak 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 SOA
atau NS
catatan seperti yang akan dimiliki zona sebenarnya)