_ (Gạch dưới) có bất hợp pháp trong bản ghi CNAME không?


9

Chúng tôi đang gặp sự cố khi tạo bản ghi TXT dài cho khóa DKIM trên giao diện web trên trình duyệt của chúng tôi.

Mỗi dòng chỉ có thể chấp nhận 256 ký tự.

Chúng tôi đã thử nhiều dòng, sau đó thử thêm ("vào đầu tiên và ")sau cuối cùng như một số gợi ý. Không hoạt động.

Sau đó, chúng tôi đã thử tạo một tên hiệu cho một bản ghi trên một hoster khác, nơi chúng tôi có thể tạo các bản ghi DKIM TXT.

Nhưng bây giờ webinterface phàn nàn về tên bất hợp pháp trong CNAMEhồ sơ.

mail._domainkey.example.com TXTok
mail._domainkey.example.com CNAMElà không ổn
mail.domainkey.example.com CNAMElà ok, nhưng không phải những gì chúng ta muốn.

Là webinterface chỉ quyết tâm khiến chúng ta phát điên, hay nó thực sự "bất hợp pháp" khi có dấu gạch dưới CNAME?


1
Nhà cung cấp đang sửa lỗi webinterface khi tôi đang viết bài này!
Lenne

Câu trả lời:


18

Có, tên DNS (cái này cũng bao gồm A / AAAA) chỉ có thể chứa [0-9], [a-z], -, vì vậy dấu gạch dưới không hợp lệ. Lưu ý rằng bản ghi TXT không phải là tên máy chủ lưu trữ và hạn chế này không áp dụng cho bản ghi đó. Và một chỉnh sửa cuối cùng: -cũng có thể không được sử dụng làm ký tự đầu tiên, vì vậy mail.-domainkey.our.domsẽ không hợp lệ.

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


Chỉnh sửa cuối cùng: Tôi đã sai một phần. Khi CNAME được sử dụng làm tên máy chủ, các hạn chế trên sẽ được áp dụng. Nó xuất hiện một CNAME không được coi là tên máy chủ trong ngữ cảnh DKIM và trong trường hợp đó, _phải là một phần hợp lệ của mục CNAME. Xem /programming/13650233/underscore-in-cname-required-by-ses-not-allowed-by-registrar/26692491#26692491


Nhưng một CNAME có phải là tên máy chủ không? Một số tài liệu cho thấy sử dụng dấu gạch dưới trong một tên, vì vậy nó xuất hiện. kb.mailchimp.com/accounts/email-authentication/ từ
Lenne

Ngoài ra, các dấu gạch dưới xuất hiện trong các mục DNS trên các vùng tích hợp MS Windows Active Directory làm nền tảng cho Windows Domains, ít nhất là trong công cụ quản lý DNS của Microsoft, nhưng tôi không chắc những dấu gạch dưới đó có thực sự là một phần của tên hay không và Windows có hỗ trợ gạch dưới trong DNS không yêu cầu hoặc nếu dấu gạch dưới chỉ xuất hiện trong phần đính vào quản lý DNS và thực sự không phải là một phần của tên.
Todd Wilcox

Lưu ý rằng mục Wikipedia được trích dẫn phải thực hiện với tên internet không phải DNS.
Jim B

@ Lenne: CNAME là tên máy chủ hợp lệ vì đây là bí danh cho máy chủ lưu trữ. @ToddWilcox: vâng, điều này đã được biết và đây là hành vi vi phạm (cố tình?) Của MS khiến các hệ thống khác không gặp phải rắc rối nào khi chúng xuất hiện trong các gói DNS, DHCP, vít mặc dù không hợp pháp.
mirabilos

2
@mirabilos "CNAME là tên máy chủ hợp lệ" không, mục tiêu (RDATA) của CNAME là tên miền, không phải tên máy chủ (tên miền là siêu ký tự của tất cả tên máy chủ có thể). _foo CNAME _barlà hoàn toàn hợp pháp, bạn có thể kiểm tra với named-checkzone.
Patrick Mevzek

2

Bất kỳ ký tự hợp lệ đều được phép trong DNS. Xem https://tools.ietf.org/html/rfc2181#section-11

"Bản thân DNS chỉ đặt một hạn chế trên các nhãn cụ thể có thể được sử dụng để xác định các bản ghi tài nguyên. Một hạn chế đó liên quan đến độ dài của nhãn và tên đầy đủ. Độ dài của bất kỳ một nhãn nào được giới hạn trong khoảng từ 1 đến 63 octet. "

Máy khách phải xác thực giá trị tên EG Bản ghi MX có thể chứa giá trị "Alice" nhưng sau khi tra cứu, giá trị đó sẽ bị từ chối vì "Alice" không phải là địa chỉ email hợp lệ.

Trong trường hợp này, có vẻ như hoster của bạn đang "xác nhận" đầu vào của bạn và họ sẽ có thể nhập thủ công cho bạn.


"Bất kỳ ký tự hợp lệ nào đều được phép trong DNS", nó phức tạp hơn thế một chút. Có tên miền và tên máy chủ. Ngoại trừ nếu nói khác đi, ở mọi nơi bạn có nhãn là tên miền thực sự có nghĩa là bất kỳ ký tự nào, vì vậy _hoặc bất cứ điều gì khác mà bạn thích. Nhưng, đối với một số bản ghi, bạn chỉ có thể sử dụng tên máy chủ và không phải tên miền. Tên máy chủ chỉ là chữ số và dấu gạch nối, không có gì khác. Ví dụ: chủ sở hữu của một Ahoặc AAAAbản ghi là tên máy chủ, không phải tên miền. RDATA (mục tiêu) của một NSbản ghi cũng là một tên máy chủ, không phải là một tên miền.
Patrick Mevzek

1
"bản ghi MX có thể chứa giá trị" Alice "nhưng sau khi tra cứu giá trị đó sẽ bị từ chối vì" Alice "không phải là địa chỉ email hợp lệ." Từ khi nào MX RR tham chiếu địa chỉ e-mail?
một CVn

0

RFC 1034: Các nhãn phải tuân theo các quy tắc cho tên máy chủ ARPANET. Họ phải bắt đầu bằng một chữ cái, kết thúc bằng một chữ cái hoặc chữ số và có các ký tự bên trong chỉ có các chữ cái, chữ số và dấu gạch nối. Cũng có một số hạn chế về chiều dài. Nhãn phải có 63 ký tự trở xuống.


Tôi cũng gặp vấn đề với Arduino, trong đó một số lib đặt tên máy chủ như ESP_245537, tên này bị từ chối khi DHCPserver cố cập nhật DNS.
Lenne

Cái này sai. Nhãn của CNAME không nhất thiết phải là tên máy chủ, vì vậy tất cả các ký tự đều hợp lệ ở đây, bao gồm cả _.
Patrick Mevzek

1
Và thậm chí không có điều đó, đây là những quy tắc cũ. Họ đã cấm các tên máy chủ bắt đầu bằng một chữ số, nhưng để 3com.combổ sung ví dụ quy tắc này được nới lỏng, xem tools.ietf.org/html/rfc1123#page-13 "Một khía cạnh của cú pháp tên máy chủ được thay đổi: hạn chế về ký tự đầu tiên được thư giãn để cho phép một chữ cái hoặc một chữ số. "
Patrick Mevzek

@Lenne nếu esp_245537được sử dụng làm tên máy chủ thì bản cập nhật DNS phải bị từ chối vì nó không phải là tên máy chủ hợp lệ. Nếu tên này được sử dụng làm tên miền, thì bản cập nhật DNS sẽ thành công (nếu không thì đó là lỗi), vì đó là nhãn DNS hợp lệ.
Patrick Mevzek

Tôi đã thấy gợi ý rằng có thể dịch các ký tự không hợp lệ từ DHCP sang DNS, nhưng không bao giờ có thể làm việc được.
Lenne

0

Câu trả lời của @ Sven, với bản chỉnh sửa, đã đúng nhưng chỉ cần diễn đạt trực tiếp mọi thứ.

TL; DR có gạch dưới có giá trị trong một CNAMEbản ghi ở cả hai bên, đọc bên dưới để biết lý do.

RFC 1034 và những người khác xác định các bản ghi dựa trên "tên miền" là các nhãn với bất kỳ ký tự nào, bao gồm cả _.

Nhưng một số bản ghi có các quy tắc chặt chẽ hơn cho tên chủ sở hữu và / hoặc dữ liệu tài nguyên (RDATA). Chỉ có một tên máy chủ sẽ được chấp nhận và thực sự các quy tắc hiện tại (chúng đã được nới lỏng trong quá khứ khi tên máy chủ không thể bắt đầu bằng một chữ số) mà bạn có thể sử dụng bất kỳ chữ cái ASCII nào (không có độ nhạy trường hợp), bất kỳ chữ số ASCII nào và dấu gạch nối , cộng với một số quy tắc vị trí bổ sung: không có dấu gạch ngang khi bắt đầu hoặc kết thúc và không có dấu gạch nối kép ở vị trí 3 và 4 (vì "bảo lưu" đối với IDN ở dạng xn--chỉ cho phép trường hợp).

Ví dụ: tên chủ sở hữu của một Ahoặc AAAAbản ghi là tên máy chủ, không phải tên miền. Vì vậy, test.example.com A 192.0.2.1là hợp lệ tại sao tất cả những điều này không phải là:

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

Thật dễ dàng để kiểm tra mọi thứ với named-checkzonechương trình (một phần của bindphần mềm máy chủ tên nhưng có thể được sử dụng và cài đặt riêng và các máy chủ tên khác có thể có các công cụ kiểm tra tương tự và dù sao cũng có thể có giao diện trực tuyến), chỉ cần đặt các bản ghi vào một tệp và chạy nó trên:

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

(số trước INlà TTL, điều này không liên quan đến vấn đề của chúng tôi ở đây, nhưng chỉ cần để vượt qua xác thực cú pháp của một bản ghi).

Đối với các hồ sơ khác thì ngược lại: vì NSkhông có hạn chế nào đối với chủ sở hữu, nhưng hạn chế đối với "mục tiêu" đó là dữ liệu. Dữ liệu chỉ có thể là tên máy chủ, không phải tên miền, vì bạn cần trỏ đến máy chủ tên có thẩm quyền là máy chủ vật lý đáp ứng truy vấn DNS.

Bây giờ CNAME, đây là những trích dẫn có liên quan từ RFC 1034, trong phần 3.6:

"chủ sở hữu: đó là tên miền nơi RR được tìm thấy." có nghĩa là theo mặc định bất kỳ tên nào, không chỉ là tên máy chủ (như nguồn của bản ghi CNAME)

"RDATA: là loại dữ liệu và đôi khi phụ thuộc vào lớp mô tả tài nguyên:"

"CNAME một tên miền."

Vì vậy, cả chủ sở hữu của một CNAME(cái ở bên trái của nó) và dữ liệu tài nguyên được đính kèm, đích / mục tiêu của nó (cái ở bên phải của nó) là tên miền và không chỉ tên máy chủ. Về cơ bản bất kỳ nhân vật, vì vậy bao gồm _được cho phép ở cả hai bên.

Một lần nữa, dễ dàng để kiểm tra với 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.

Không có lỗi gì về CNAME(các lỗi khác được mong đợi vì trong khu vực giả mạo của tôi, tôi đã không đặt bất kỳ SOAhoặc NShồ sơ nào như một khu vực thực sự sẽ có)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.