Có đúng là một máy chủ tên phải trả lời các truy vấn qua TCP không?


23

Tôi đang trong quá trình thiết lập giám sát các máy chủ DNS của một số máy chủ web lớn. Mục tiêu của tôi là so sánh thời gian phản hồi máy chủ dns của họ bằng cách theo dõi phản hồi của họ với ping.

Trong quá trình này, tôi phát hiện ra rằng máy chủ tên Bluehost không phản hồi ping. Tôi đã cố gắng để có thêm thông tin bằng cách chạy Pingdom DNS Kiểm tra trên bluehost.com và nó đã tạo ra lỗi sau:

Tên máy chủ ns1.bluehost.com (74.220.195.31) không trả lời các truy vấn qua TCP.

Máy chủ tên không thể trả lời các truy vấn được gửi qua TCP. Điều này có thể là do máy chủ tên không được thiết lập chính xác hoặc do lọc sai trong tường lửa. Một quan niệm sai lầm khá phổ biến là DNS không cần TCP trừ khi họ cung cấp chuyển vùng - có lẽ quản trị viên máy chủ tên không biết rằng TCP thường là một yêu cầu.

Tôi muốn biết như sau:

  • Đến mức nào thì tuyên bố trên là đúng?
  • Ý nghĩa của một máy chủ tên không trả lời các truy vấn qua TCP là gì?

Câu trả lời:


47

Văn bản chẩn đoán từ Pingdom là chính xác. TCP không chỉ dành cho chuyển vùng.

Việc triển khai máy chủ DNS hiện "bắt buộc" (nhiều như bất kỳ RFC nào yêu cầu bất cứ điều gì) để hỗ trợ TCP, theo RFC 5966 , "Vận chuyển DNS qua TCP - Yêu cầu triển khai".

Lưu ý rằng đây là một yêu cầu đối với việc triển khai phần mềm máy chủ, nó không áp dụng nghiêm ngặt cho hoạt động của bất kỳ máy chủ nào - thực tiễn hoạt động không được đề cập.

Điều đó nói rằng, nếu các máy chủ DNS cụ thể của bạn không được định cấu hình để hỗ trợ TCP hoặc nếu nó bị chặn thì hiệu ứng dài hạn sẽ không thể hỗ trợ DNSSEC một cách chính xác. Tương tự, mọi dữ liệu DNS khác gây ra phản hồi vượt quá 512 byte có thể bị chặn.

từ chối trách nhiệm: Tôi đã viết RFC.

EDIT RFC 5966 hiện đã được thay thế bởi RFC 7766


RE: thực hành hoạt động, một người ghét DNSSEC có thể chỉ cần vô hiệu hóa TCP và thả nó vào tường lửa để có biện pháp tốt. Không có gì đáng ngạc nhiên, có những hậu quả. Không có lượng hỗ trợ nào cho EDNS0 tại hai điểm cuối có thể buộc các thiết bị giữa chúng không can thiệp theo một cách nào đó. (phân mảnh, gắn cờ sai bởi tường lửa cổ đại, v.v.) Nếu bạn có bản ghi DNS lớn trên máy chủ xác thực của mình (TXT cồng kềnh), TCP sẽ được yêu cầu nếu bạn không muốn loại trừ một phân khúc đối tượng của mình. Tương tự như vậy, việc vô hiệu hóa nó trên một máy chủ đệ quy sẽ tách bạn khỏi các phản hồi DNS mà cụm thư của bạn có thể cần để xử lý thư rác.
Andrew B

3

cần hỗ trợ TCP và UDP - TCP dành cho kích thước phản hồi> 512 byte (bao gồm cả chuyển vùng) (theo cách tôi đã đọc, dù sao. Tôi thường bật TCP và UDP cho NS tôi chạy ...)


-2

Thật tốt khi biết RFC nói gì về chủ đề này và chúng tôi đã có câu trả lời chính đáng về vấn đề đó, nhưng với mục đích thực tế, tôi tìm thấy lời khuyên từ Giáo sư Daniel J. Bernstein, Tiến sĩ, tác giả của DJBDNS, khá thú vị.

http://cr.yp.to/djbdns/tcp.html#why (2003-01-16)

Khi nào các truy vấn TCP được gửi?

Nếu bạn đang ở một trong các tình huống sau, bạn cần định cấu hình máy chủ DNS của mình để trả lời các truy vấn TCP:

  • Bạn muốn xuất bản các bộ bản ghi lớn hơn 512 byte. (Điều này gần như luôn luôn là một sai lầm.)
  • Bạn muốn cho phép chuyển vùng đi, ví dụ như đến máy chủ của bên thứ ba.
  • Máy chủ mẹ từ chối ủy quyền tên cho bạn cho đến khi bạn thiết lập dịch vụ TCP.

Nếu bạn không ở trong bất kỳ tình huống nào, bạn không cần phải cung cấp dịch vụ TCP và bạn không nên thiết lập nó. DNS-over-TCP chậm hơn nhiều so với DNS-over-UDP và vốn dễ bị tấn công từ chối dịch vụ hơn nhiều. (Điều này cũng áp dụng cho BIND.)

Lưu ý rằng ông bỏ qua một đề cập rõ ràng về DNSSEC; Lý do là, theo DJB, DNSSEC thuộc danh mục "luôn luôn là một sai lầm". Xem https://cr.yp.to/djbdns/forgery.html để biết thêm chi tiết. DJB có một tiêu chuẩn thay thế, được gọi là DNSCurve - http://dnscurve.org/ - đã được một số nhà cung cấp áp dụng độc lập (như OpenDNS). Quan tâm: /security/45770/if-dnssec-is-so-questionable-why-is-it-ahead-of-dnscurve-in-adoption .

Lưu ý rằng nếu tài liệu trên về thiết lập DJBDNS là bất kỳ dấu hiệu nào cho thấy các tính năng của nó, có vẻ như nó chỉ hỗ trợ AXFR cho TCP. Vì nhiều nhà cung cấp vẫn sử dụng DJBDNS, do đó họ sẽ không thể hỗ trợ DNS qua TCP mà không cần nỗ lực thêm.

PS Lưu ý rằng DJB thực tế, thực hành những gì anh ấy giảng. Các máy chủ của riêng anh ấy, (1), chạy DNSCurve, (2), không trả lời đúng TCP. Chỉ +notcpthành công mới (mặc định):

% dig +trace @ordns.he.net +notcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to.
yp.to.                  86400   IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 151 ms

cr.yp.to.               600     IN      A       131.155.70.11
cr.yp.to.               600     IN      A       131.155.70.13
yp.to.                  3600    IN      NS      uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to.
yp.to.                  3600    IN      NS      uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.yp.to.
;; Received 244 bytes from 131.155.70.13#53(uz5jmyqz3gz2bhnuzg0rr0cml9u8pntyhn2jhtqn04yt3sm5h235c1.yp.to) in 14 ms

, trong khi đó +tcpsẽ thất bại (rõ ràng với một thông báo lỗi khác nhau, tùy thuộc vào máy chủ nào của anh ta được chọn):

% dig +trace @ordns.he.net +tcp cr.yp.to | tail
yp.to.                  86400   IN      NS      uz5hjgptn63q5qlch6xlrw63tf6vhvvu6mjwn0s31buw1lhmlk14kd.ns.yp.to.
;; Received 300 bytes from 216.74.32.100#53(tonic.to) in 150 ms

;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.155.70.13#53: end of file
;; Connection to 131.155.71.143#53(uz5dz39x8xk8wyq3dzn7vpt670qmvzx0zd9zg4ldwldkv6kx9ft090.ns.yp.to) for cr.yp.to failed: connection refused.
;; communications error to 131.193.32.147#53: end of file
;; connection timed out; no servers could be reached

2
Hành động fanboi DJB của bạn đang trở nên khá mặc. Cộng đồng DNS đã chọn DNSSEC và phần lớn tài liệu về DNSCurve hoàn toàn đưa ra các yêu cầu trực giao về tính xác thực của dữ liệumã hóa dữ liệu . IMNSHO, phần lớn câu trả lời của bạn không đóng góp cho câu hỏi này.
Alnitak

@Alnitak, việc bạn nhấn mạnh rằng TCP là bắt buộc đối với DNS không làm cho nó trở thành một yêu cầu thực tế đối với DNS. Rõ ràng rất nhiều người chạy mà không có TCP và không gặp phải bất kỳ vấn đề nào với tính khả dụng của các trang web của riêng họ. Tuy nhiên, bạn tiếp tục thúc đẩy thông tin sai lệch và FUD.
cnst

2
Tài liệu đó có thực sự từ năm 2003 không? Làm thế nào bạn có thể tuyên bố với một khuôn mặt thẳng rằng nó vẫn còn liên quan trong năm 2017?
Michael Hampton

1
@MichaelHampton, vâng, hết lòng và tuyệt đối. Một số thứ không thay đổi và DJB có thể là một lỗ đít, nhưng anh ấy là một người khá thông minh ở đó. Tất cả các lập luận mà ông trình bày đều mang tính triết học và không thay đổi như công nghệ. Trong khi đó, (1), tại sao lại khó tin đến vậy, (2), tại sao liên kết với các RFC thậm chí cũ hơn được thực hiện với khuôn mặt thẳng và không có bạn là kẻ đạo đức giả, (3), bạn có những phản biện thực tế nào ngoài một buổi hẹn hò"? Mọi người cứ nói rằng cách của anh ta có vấn đề về khả năng tương tác, nhưng chính những lý lẽ đang được đề xuất (ví dụ, thư bị trả lại) anh ta đã gỡ bỏ vào năm 2003!
cnst

-5

TCP chỉ được yêu cầu và thường chỉ được sử dụng khi cần có phản hồi dài. Có thể có tác động tiêu cực. Chuyển vùng được thực hiện qua TCP vì chúng lớn và cần phải đáng tin cậy. Không cho phép TCP từ các máy chủ không tin cậy là một cách để đảm bảo rằng chỉ có những câu trả lời nhỏ được đưa ra.

Với việc giới thiệu các câu trả lời DNS đã ký, đã có yêu cầu nới lỏng giới hạn 512 byte thành các câu trả lời CẬP NHẬT. EDNS0 cung cấp cơ chế cho các phản hồi UDP dài hơn. Việc không cho phép DNS qua TCP rất có thể phá vỡ triển khai DNS an toàn.

Hoàn toàn có thể chạy một máy chủ DNS chỉ có cổng UDP 53 mở ra Internet. Yêu cầu truy cập TCP vào các máy ngang hàng DNS, nhưng đây là một danh sách nhỏ các máy chủ lưu trữ.

Có một RFC596 mới hơn hiện yêu cầu TCP để thực hiện DNS đầy đủ. Điều này là nhằm mục đích thực hiện. Các tài liệu đặc biệt không đề cập đến các nhà khai thác, nhưng cảnh báo rằng việc không cho phép TCP có thể dẫn đến một số tình huống lỗi. Nó nêu chi tiết một loạt các lỗi có thể xảy ra nếu DNS qua TCP không được hỗ trợ.

Đã có các cuộc thảo luận về việc sử dụng TCP để ngăn chặn các cuộc tấn công khuếch đại DNS. TCP có rủi ro từ chối dịch vụ riêng, nhưng phân phối khó khăn hơn.


DNSSEC đã không nới lỏng giới hạn, EDNS0 đã làm, vào năm 1999 (xem RFC 2671).
Alnitak

Không, như Alnitak giải thích, TCP được yêu cầu trong hầu hết các trường hợp (trừ khi bạn có thể hoàn toàn chắc chắn rằng bạn sẽ không bao giờ có câu trả lời> 512 byte, điều mà bạn thường không biết trước)
bortzmeyer

Tôi đã chạy thành công DNS thông qua tường lửa chỉ cho phép UDP. Chặn cấu hình bệnh lý, tra cứu địa chỉ sẽ dưới 512 ký tự. Tôi đã thấy các tài liệu tham khảo rằng các đường dẫn DNS được giới hạn ở 256 ký tự. Bằng chứng trong cơ sở dữ liệu cho máy chủ thư của tôi cho thấy rằng đường dẫn DNS của máy chủ hiếm khi vượt quá 100 ký tự và các trang web có nhiều tên được trả về bởi bản ghi PTR hiếm khi truy xuất trên 256 ký tự. Tất cả các repons này sẽ chạy trên UDP. Có ai có trường hợp hợp lý chạy gần 512 ký tự mà không cần DNSSEC hoặc chuyển vùng không.
BillThor

Re DNSSEC, tôi đã không xác minh RFC cho các kích thước mở rộng, nhưng các tài liệu tham khảo duy nhất tôi thấy để sử dụng các kích thước gói mở rộng trên UDP có DSNSEC.
BillThor

Một trong những nhà cung cấp nội dung lớn đã quay trở lại sau vài năm khi họ thêm rất nhiều bản ghi A cho một trong những trang web của họ vượt quá 512 byte. Điều đó gây ra vấn đề interop thực sự.
Alnitak
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.