Tôi đang cố gắng tìm QPS (Truy vấn mỗi giây) tối đa của VM Resolver DNS.
Chúng tôi có cơ sở hạ tầng được lưu trữ trên Azure, có VM (dựa trên liên kết) đóng vai trò là trình phân giải truy vấn DNS gốc của Azure (168.63.129.16
) cũng như DNS tại chỗ. Tôi không lưu vào bộ đệm bất kỳ truy vấn nào trên trình phân giải và mỗi bản ghi A có TTL là 300 giây.
Tôi đang sử dụng dnsperf
& tôn trọng
để kích hoạt tải (chỉ bản ghi A). Bây giờ, tôi đang chuẩn bị các trình phân giải DNS để chống lại các cuộc tấn công DDOS lên tới 100K QPS. Tôi đang gặp phải các sự cố như giới hạn tốc độ truy vấn giữa trình phân giải DNS và trình phân giải DNS gốc của Azure. Do đó, khi QPS tăng lên, trình giải quyết sẽ trả về KHÔNG PHỤC VỤ
phản hồi lại cho khách hàng. Tuy nhiên, chúng tôi không thấy bất kỳ KHÔNG PHỤC VỤ
phản hồi giữa trình phân giải & DNS dựa trên tiền đề.
QPS tối đa mà tôi có thể thấy khi nhắm mục tiêu Azure DNS là vào khoảng năm 2100. Tôi đã tìm kiếm rất nhiều trên mạng xem có bất kỳ giới hạn tốc độ nào như vậy được thực hiện bởi Azure hay không, nhưng không thể tìm thấy bất kỳ điều gì liên quan. Bằng cách nào đó, tôi linh cảm trình phân giải VM gặp phải nút cổ chai vì 2K QPS là rất thấp đối với quy mô cơ sở hạ tầng Azure.
Một vài điều (thay đổi hệ thống kernel), tôi đã thay đổi ở phần cuối của mình, điều này đã cải thiện một chút nhưng không nhiều.
Thay đổi cấu hình liên kết ::
đệ quy-client
từ 1000
-> 30000
bộ đệm UDP lên giá trị cao hơn 26214400
để dừng lỗi bộ đệm ::
net.core.rmem_max
net.core.rmem_default
Phạm vi cổng địa phương từ 32768 61000
đến 1024 61000
để có tối đa
cổng có sẵn cho DNS ::
net.ipv4.ip_local_port_range
thay đổi linh tinh::
Ngoài những điều trên, tôi đã tăng kích thước VM từ (1 lõi, RAM 2 GB) -> (4 lõi, RAM 8 GB).Sau khi tăng, lỗi gói biến mất (đã kiểm tra netstat -s
) nhưng không cải thiện KHÔNG PHỤC VỤ
lỗi.
tôi đã kích hoạt tcpdump
để kiểm tra mô hình của KHÔNG PHỤC VỤ
lỗi. Trong trường hợp không thành công, trình phân giải sẽ cố gắng gửi truy vấn tới Azure DNS 5 lần (mỗi lần sau 1 giây), nhưng nó không nhận được bất kỳ thông tin gì từ Azure DNS và do đó gửi truy vấn KHÔNG PHỤC VỤ
phản hồi lại cho khách hàng. đã tải pcap
tập tin vào cá mập
, tôi thấy Azure DNS gửi phản hồi lại cho người giải quyết
nhưng người giải quyết
đã gửi KHÔNG PHỤC VỤ
phản hồi cho khách hàng.
Tại sao kết nối bị đóng trước khi có phản hồi? Hiện hành net.netfilter.nf_conntrack_udp_timeout
không bị ảnh hưởng 30
giây nhưng người giải quyết
gửi KHÔNG PHỤC VỤ
sau 5 giây cho khách hàng.
Dưới đây là tcpdump
nhật ký trong thời gian ServFail
::
đọc từ tệp dns4.pcap, loại liên kết EN10MB (Ethernet)
10.0.0.10.57710 > 10.0.0.11.domain: [udp sum ok] 1612+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.44513 > 168.63.129.16.domain: [bad udp cksum 0xbecd -> 0x8cfd!] 52637+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. là: . CHỌN UDPsize=4096 DO (77)
10.0.0.11.32378 > 168.63.129.16.domain: [bad udp cksum 0xbecd -> 0x3950!] 20672+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. là: . CHỌN UDPsize=512 DO (77)
10.0.0.11.59973 > 168.63.129.16.domain: [bad udp cksum 0xbecd -> 0xe2e5!] 15199+% [1au] A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. là: . CHỌN UDPsize=512 DO (77)
10.0.0.11.29976 > 168.63.129.16.domain: [bad udp cksum 0xbec2 -> 0x051b!] 47104+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.43442 > 168.63.129.16.domain: [không hợp lệ udp cksum 0xbec2 -> 0xe791!] 41199+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.domain > 10.0.0.10.57710: [xấu udp cksum 0x2a89 -> 0x5e30!] 1612 ServFail q: A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. 0/0/0 (66)
Như bạn có thể thấy từ dòng dưới cùng ServFail
được gửi sau 5 lần thử.
Nếu bạn đã đi xa đến đây, tôi phải cảm ơn bạn đã đọc câu hỏi dài này. Tôi biết đây là một câu hỏi quá nhiều, nhưng tôi đánh giá cao nếu bạn có một số gợi ý cho tôi vì tôi không thể hiểu được nút cổ chai là gì.
Ban đầu được đăng trên siêu người dùng đây