
我試圖找到 DNS 解析器虛擬機器的最大 QPS(每秒查詢數)。
我們的基礎架構託管在 Azure 上,有一個 VM(基於綁定)可作為查詢 Azure 本機 DNS ( 168.63.129.16
) 以及本機 DNS 的解析器。我沒有在解析器上快取任何查詢,並且每個 A 記錄的 TTL 為 300 秒。
我正在使用dnsperf
&resperf
觸發加載(僅限 A 記錄)。現在,我正在準備 DNS 解析器來抵禦高達 100K QPS 的 DDOS 攻擊。我面臨諸如解析器和 azure 本機 DNS 解析器之間的查詢速率限制之類的問題。因此,當 QPS 增加時,解析器會將SERVFAIL
回應傳回給客戶端。但是,我們沒有看到SERVFAIL
解析器和基於本機的 DNS 之間有任何回應。
當目標 Azure DNS 時,我可以看到最大 QPS 約為 2100。不知何故,我預感解析器 VM 遇到了瓶頸,因為對於 Azure 基礎架構的規模而言,2K QPS 非常低。
我最後改變了一些事情(核心 sysctl 更改),改進了一點,但改進不大。
綁定配置變更::
recursive-clients
從1000
->30000
26214400
UDP 緩衝到比停止緩衝故障更高的值::
net.core.rmem_max
net.core.rmem_default
本機連接埠範圍從
32768 61000
到 到1024 61000
可用於 DNS 的最大連接埠數::
net.ipv4.ip_local_port_range
雜項變更::
txqueuelen
從1000
->20000
ulimits
改為100000net.netfilter.nf_conntrack_max
更改為更高的值
除了上述內容之外,我還增加了虛擬機器大小,從(1 核,2 GB RAM)->(4 核,8 GB RAM)。增加後,資料包錯誤消失(已檢查netstat -s
)但沒有改善SERVFAIL
錯誤。
我確實能夠tcpdump
檢查錯誤模式SERVFAIL
。如果發生故障,解析器會嘗試將查詢傳送至 Azure DNS 5 次(每次 1 秒鐘後),但它沒有從 Azure DNS 收到任何訊息,因此會將回應傳送SERVFAIL
回用戶端。將pcap
檔案載入到 後Wireshark
,我看到 Azure DNS 將回應傳送回 ,resolver
但resolver
已經將SERVFAIL
回應傳送到客戶端。
為什麼連線在收到回應之前就關閉了? Current在數秒net.netfilter.nf_conntrack_udp_timeout
內保持不變,但在 5 秒後發送到用戶端。30
resolver
SERVFAIL
以下是::tcpdump
期間的日誌ServFail
reading from file dns4.pcap, link-type 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. ar: . OPT 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. ar: . OPT 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. ar: . OPT 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: [bad udp cksum 0xbec2 -> 0xe791!] 41199+ A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. (66)
10.0.0.11.domain > 10.0.0.10.57710: [bad udp cksum 0x2a89 -> 0x5e30!] 1612 ServFail q: A? SZxvvdyDYy.ns.westeurope.xx.yy.zz.net. 0/0/0 (66)
正如您從底部看到的那樣,ServFail
嘗試 5 次後就發送了。
如果您已經走到這一步,我必須感謝您閱讀這個冗長的問題。我知道這個要求太多了,但如果您能給我一些提示,我將不勝感激,因為我無法弄清楚瓶頸是什麼。
最初發佈於超級用戶這裡