Và bây giờ nó không ổn định (lỗi "không thể tìm thấy máy chủ")
Từ đâu/như thế nào?
Tất cả các trình phân giải được thiết lập đúng cách, như bạn đã nhận thấy, sẽ nhận được cờ Truncate trong truy vấn đầu tiên của chúng qua UDP, sau đó sẽ chuyển qua TCP và mọi thứ sẽ ổn.
Tất nhiên, bạn nhớ là DNS hơn UDP VÀ TCP (trái ngược với một huyền thoại phổ biến), vì vậy bạn cần đảm bảo rằng máy chủ tên có thẩm quyền của bạn có thể được truy vấn qua TCP và tất cả sẽ ổn.
Sau một số tìm kiếm trên Google, tôi phát hiện ra rằng một truy vấn nhiều IP phải có không quá 512 byte để đảm bảo rằng UDP sẽ được sử dụng
Nó phụ thuộc. Đôi khi bạn có thể vượt quá 1000. Nhưng quan trọng nhất, mọi thứ dự phòng cho TCP nên không phải là vấn đề (có thể chỉ là một chút mất hiệu suất).
và tránh một truy vấn bổ sung (hoặc các vấn đề với máy khách hoặc nhà cung cấp dns không có tcp, dns sw cũ, v.v.).
"máy khách hoặc nhà cung cấp dns không có tcp" không nên tồn tại vì nó vô nghĩa và trái với thông số kỹ thuật DNS được viết... hơn 40 năm trước!
Hay bạn có bằng chứng cụ thể về những trường hợp đó?
Đừng cố đi vòng quanh những thứ như thế. Nếu những phần mềm này tồn tại thì chúng đã bị hỏng và sẽ có RẤT NHIỀU vấn đề khác, chẳng hạn như đối với các miền được bảo mật DNSSEC.
Vì vậy, làm cách nào để biết tôi có thể có bao nhiêu IP v4 trong một mục nhập dns để đảm bảo câu trả lời UDP tối đa là 512 byte?
Điều này không thể trả lời chung chung (vì phụ thuộc vào tên) nhưng quan trọng nhất, việc cố gắng tối ưu hóa mọi thứ theo cách đó là vô ích.
Dù sao bạn có thể thực hiện tính toán một cách dễ dàng:
- gói UDP có tiêu đề 8 byte trước dữ liệu (RFC 768)
- một gói DNS, xem RFC 1035, có tiêu đề (12 byte), sau đó là câu hỏi (số lượng byte thay đổi, xem sau), sau đó là câu trả lời (xem sau) và chúng tôi sẽ xem xét phần bổ sung và quyền hạn để trống.
Vì vậy, chúng tôi đã có 512-8-12 = 492 byte cho câu hỏi DNS + câu trả lời.
Trong câu trả lời, một Một
bản ghi sẽ là tên (độ dài thay đổi) + loại (2 byte) + lớp (2 byte) + TTL (4 byte) + độ dài (2 byte) và sau đó là dữ liệu. Vì Một
dữ liệu là 4 byte (địa chỉ IPv4).
Câu hỏi là tên (độ dài thay đổi) + loại (2 byte) + lớp (2 byte).
Tên trong gói DNS có hai thuộc tính sau:
- chúng được mã hóa dưới dạng danh sách các nhãn có tiền tố theo độ dài
- có thể được nén để một tên hoặc một phần của tên chỉ xuất hiện một lần.
Ví dụ ví dụ.com
được mã hóa trong DNS dưới dạng 7,e,x,a,m,p,l,e,3,c,o,m,0
trong đó mỗi độ dài là một byte, nhưng nếu sau này cần dùng tên thì nó sẽ được thay thế bằng một con trỏ chỉ sử dụng 2 byte.
Nếu chúng ta lấy tên đó:
- kích thước của phần tên trong câu hỏi sẽ là: 13 byte, vì vậy tổng kích thước của câu hỏi: 13 + 2 + 2 = 17
- trong câu trả lời, mỗi tên có thể là một con trỏ 2 byte tham chiếu đến tên trong câu hỏi, vì vậy mỗi bản ghi trong câu trả lời sẽ có độ dài 2 byte cho tên và sau đó là phần còn lại ở trên, vì vậy 16 byte.
Do đó, gói DNS đầy đủ sẽ có kích thước 12 (tiêu đề) + 17 (câu hỏi) + x nhân 16 trong đó x là số lượng Một
Hồ sơ.
Vì vậy chúng ta phải giải quyết: 512 = 8 + 12 + 17 + 16x
cho x, mang lại x=29
hoặc là.
Hãy nhớ rằng đây là trường hợp tốt nhất (không có bản ghi bổ sung/quyền hạn và nén tên được sử dụng đầy đủ) và cho một tên cụ thể (nhưng nếu sử dụng nén thì tên đó chỉ xuất hiện đầy đủ một lần trong câu hỏi, vì vậy chỉ kích thước đó thay đổi).
[Ngoài ra, nhân tiện, đừng để bị mắc kẹt trong Internet cũ của thế kỷ trước; ngày nay IPv6 phải là tiêu chuẩn; tất nhiên bạn đặt thậm chí ít hơn AAAA
các loại bản ghi trong gói DNS có kích thước cố định so với gói IPv4 :-)]
Có thể định cấu hình Liên kết ISC để chỉ trả về một IP trong truy vấn nhiều IP không?
Tôi không nghĩ như vậy và nếu nó tồn tại thì liên kết sẽ chọn IP nào để trả về như thế nào? Nếu bạn ở đây, bạn chỉ cần liệt kê một IP trong tệp vùng. Hoặc nếu bạn thực sự gắn bó với ý tưởng này (nhưng một lần nữa, bạn luôn buông lỏng điều này sẽ không ngăn được các vấn đề khác vì khách hàng đang gặp lỗi nên dù sao bạn cũng đang cố gắng chiến đấu với một ngọn đồi vô tận), bạn có thể thử dnsdist
đó là một loại dao của quân đội Thụy Sĩ và cho phép tinh chỉnh.
Tái bút: cũng nên nhớ rằng DNS có phần mở rộng để cho phép một bên chỉ định kích thước bộ đệm (UDP) mà nó có thể nhận. Xem RFC 6891. Gần đây đào
sử dụng 1232
như mặc định ở đó. Bạn có thể quan tâm nói chung để xem xét https://kb.isc.org/docs/aa-01219 hoặc ngày cờ DNS năm 2020 tại https://dnsflagday.net/2020/ đó là chính xác về điều này.