Erreichen eines hohen DNS-QPS-Durchsatzes

Erreichen eines hohen DNS-QPS-Durchsatzes

Ich versuche, die maximale Anzahl an QPS (Abfragen pro Sekunde) der DNS-Resolver-VM zu ermitteln.

Unsere Infrastruktur wird auf Azure gehostet, wobei eine VM (Bind-basiert) als Resolver fungiert und sowohl Azure-native DNS ( 168.63.129.16) als auch lokale DNS abfragt. Ich speichere keine Abfragen auf dem Resolver im Cache und jeder A-Eintrag hat eine TTL von 300 Sekunden.

Ich verwende dnsperf&, resperfum die Ladung auszulösen (nur A-Einträge). Jetzt bereite ich DNS-Resolver vor, um DDOS-Angriffen von bis zu 100.000 QPS standzuhalten. Ich habe Probleme wie die Begrenzung der Abfragerate zwischen meinem Resolver und dem nativen Azure-DNS-Resolver. Wenn QPS erhöht wird, gibt der Resolver daher Antworten an den Client zurück. Wir haben jedoch keine Antworten zwischen Resolver und DNS vor Ort SERVFAILgesehen .SERVFAIL

Die maximale QPS, die ich beim Targeting von Azure DNS sehen konnte, liegt bei etwa 2100. Ich habe viel online gesucht, ob Azure eine solche Ratenbegrenzung vornimmt, konnte aber nichts Entsprechendes finden. Irgendwie habe ich das Gefühl, dass die Resolver-VM einen Engpass hat, da 2K QPS für die Größe der Azure-Infrastruktur sehr wenig ist.

Ich habe ein paar Dinge (Änderungen am Kernel-Sysctl) bei mir geändert, was eine leichte, aber keine große Verbesserung gebracht hat.

Änderungen an der Bind-Konfiguration ::

  • recursive-clientsvon 1000->30000

UDP-Puffern auf einen höheren Wert als 26214400um Pufferfehler zu verhindern::

  • net.core.rmem_max
  • net.core.rmem_default

Lokaler Portbereich von 32768 61000bis, 1024 61000um die maximale Anzahl an Ports für DNS verfügbar zu haben::

  • net.ipv4.ip_local_port_range

diverse Änderungen:

  • txqueuelenvon 1000->20000

  • ulimitsgeändert auf 100000

  • net.netfilter.nf_conntrack_maxauf einen viel höheren Wert geändert

Zusätzlich zu dem oben genannten habe ich die VM-Größe von (1 Kern, 2 GB RAM) -> (4 Kerne, 8 GB RAM) erhöht. Nach der Erhöhung verschwanden die Paketfehler (überprüft netstat -s), die Fehler wurden jedoch nicht verbessert SERVFAIL.

Ich habe es aktiviert, tcpdumpum das Fehlermuster zu überprüfen SERVFAIL. Im Fehlerfall versucht der Resolver 5 Mal (jeweils nach 1 Sekunde), die Abfrage an Azure DNS zu senden, hat aber nichts von Azure DNS gehört und sendet die Antwort daher an den Client zurück. Nachdem ich die Datei auf SERVFAILgeladen habe , sehe ich, dass Azure DNS die Antwort an zurücksendet, die Antwort aber bereits an den Client gesendet hat .pcapWiresharkresolverresolverSERVFAIL

Warum wird die Verbindung geschlossen, bevor die Antwort eingeht? Die aktuelle Verbindung net.netfilter.nf_conntrack_udp_timeoutbleibt 30einige Sekunden lang unberührt, wird aber nach 5 Sekunden an den Client resolvergesendet .SERVFAIL

Nachfolgend finden Sie tcpdumpProtokolle während 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)

Wie Sie unten sehen können, ServFailwird die Zeile nach 5 Versuchen gesendet.

Wenn Sie es bis hierher geschafft haben, muss ich Ihnen dafür danken, dass Sie diese lange Frage gelesen haben. Ich weiß, dass das zu viel verlangt ist, aber ich würde mich freuen, wenn Sie mir ein paar Hinweise geben könnten, da ich nicht weiß, wo der Engpass liegt.

Ursprünglich gepostet auf SuperuserHier

Antwort1

Also werde ich meine Frage beantworten.

Tatsächlich begrenzt Azure die Abfragerate pro Sekunde auf 1000pro VM.

Es ist dokumentiertHier. Egal welche sysctlOptimierung ich vornehme, wir haben aufgrund dieser Ratenbegrenzung immer noch Probleme mit Azure.

verwandte Informationen