Puncte:0

Obținerea unui proces DNS QPS ridicat

drapel ru

Încerc să găsesc QPS (Interogare pe secundă) maximă a VM-ului DNS Resolver.

Avem infrastructura noastră găzduită pe Azure, având o VM (bazată pe legare) care acționează ca un rezolutor care interogează DNS nativ Azure (168.63.129.16), precum și DNS local. Nu memorez în cache nicio interogare pe resolver și fiecare înregistrare A are un TTL de 300 de secunde.

eu folosesc dnsperf & respect pentru a declanșa sarcina (doar înregistrări A). Acum, că pregătesc soluții DNS pentru a rezista atacurilor DDOS de până la 100K QPS. Mă confrunt cu probleme precum limitarea ratei de interogare între soluția mea și soluția DNS nativă azure. Ca rezultat, atunci când QPS este crescut, rezolutorul revine SERVFAIL răspunsurile înapoi către client. Cu toate acestea, nu am văzut niciunul SERVFAIL răspunsuri între soluție și DNS bazat pe site.

QPS maxim, am putut vedea în timp ce țintesc Azure DNS este în jur de 2100. Am căutat mult online dacă există o astfel de limitare a ratei făcută de Azure, dar nu am găsit nimic legat. Cumva, cred că VM-ul soluționar a lovit un blocaj, deoarece 2K QPS este foarte scăzut pentru scara infrastructurii Azure.

Câteva lucruri (modificări kernel sysctl), le-am schimbat la sfârșitul meu, ceea ce s-a îmbunătățit puțin, dar nu mult.

Modificări Bind Config ::

  • recursive-clienți din 1000 -> 30000

UDP tamponează la o valoare mai mare decât 26214400 pentru a opri erorile de buffer::

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

Gama portului local de la 32768 61000 la 1024 61000 a avea maxim porturi disponibile pentru DNS::

  • net.ipv4.ip_local_port_range

diverse modificari::

  • txqueuelen din 1000 -> 20000

  • ulimite schimbat la 100000

  • net.netfilter.nf_conntrack_max schimbat la o valoare mult mai mare

Pe lângă cele de mai sus, am mărit dimensiunea VM de la (1 nucleu, 2 GB RAM) -> (4 nuclee, 8 GB RAM).După creștere, erorile de pachete au dispărut (verificat netstat -s) dar nu s-a îmbunătățit SERVFAIL erori.

Am activat tcpdump pentru a verifica tiparul de SERVFAIL erori. În caz de eșecuri, soluția încearcă să trimită interogarea către Azure DNS de 5 ori (fiecare după 1 secundă), dar nu a auzit nimic de la Azure DNS și, prin urmare, trimite SERVFAIL răspuns înapoi către client. După ce a încărcat pcap dosar pe Wireshark, văd că Azure DNS trimite răspunsul înapoi către rezolutor dar rezolutor trimisese deja SERVFAIL răspuns la client.

De ce conexiunea este închisă înainte de a primi răspunsul? Actual net.netfilter.nf_conntrack_udp_timeout este lăsat neatins să 30 secunde dar rezolutor trimite SERVFAIL după 5 secunde către client.

Mai jos sunt tcpdump busteni în timpul ServFail::

citire din fișierul dns4.pcap, tip link 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)

După cum puteți vedea din linia de jos ServFail este trimis după 5 încercări.

Dacă ați ajuns până aici, trebuie să vă mulțumesc pentru că ați citit această întrebare lungă. Știu că este o întrebare prea mare, dar apreciez dacă aveți câteva indicii pentru mine, deoarece nu reușesc să înțeleg care este blocajul.

Postat inițial pe superutilizator Aici

Patrick Mevzek avatar
drapel cn
„bad udp cksum” ar putea fi ceva ce doriți să investigați. Ar putea fi un semn de conexiune defectuoasă a unui echipament/rețea undeva sau erori în driverul kernelului/placii de rețea (mai puțin probabil). De asemenea, serverul de nume recursiv pe care îl utilizați vă poate limita. Nu sunt sigur că înțelegeți dacă configurați un server de nume autorizat de ce depindeți de unul recursiv și dacă configurați unul recursiv de ce nu are cache și depinde și de altul.
harshavmb avatar
drapel ru
Bună @PatrickMevzek, mulțumesc pentru răspuns. Bănuiesc același lucru cu limitarea ratei de la serverul autorizat Azure `168.63.129.16`. În ciuda testelor repetate, QPS nu depășește `2100`.Nu configurez `ns autoritar`, este doar `ns recursiv`, bazându-mă pe `azure` pentru înregistrările azure, on-prem pentru înregistrările on-prem. Fără stocare în cache la nivel recursiv ns...
harshavmb avatar
drapel ru
În ceea ce privește `bad udp cksum`, am acest lucru la aproape fiecare interogare. Ar trebui să investighez de ce este atât de răspândit.. În mare parte, nu cred că este cauza principală a acestui `ServFail`..
Puncte:0
drapel ru

Deci, o să-mi răspund la întrebare.

Într-adevăr, rata Azure limitează Interogările pe secundă la 1000 pe VM.

Este documentat Aici. Indiferent de orice sysctl reglajul pe care îl fac, mai avem probleme de la Azure din cauza acestei limitări a ratei.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.