Puncte:-1

Înregistrare DNS cu IP-uri multiple + limită UDP de 512 octeți

drapel kr

Am avut o înregistrare DNS (ex: test.example.com) care indică un singur IP:

test.example.com ÎN A 192.0.2.1

Merge bine. Acum am +30 de IP-uri care răspund pentru asta, de exemplu:

teste.example.com ÎN A 192.0.2.1
teste.example.com ÎN A 192.0.2.2
(...)
teste.example.com IN A 192.0.2.31

Și acum este instabil (erori „nu pot găsi gazda”). Folosind săpa Am primit un avertisment „Truncat, reîncerc în modul TCP”.După câteva căutări pe Google, am aflat că o interogare multi-IP nu trebuie să aibă mai mult de 512 de octeți pentru a garanta că UDP va fi utilizat și pentru a evita o interogare suplimentară (sau probleme cu clienții sau furnizorii no-tcp dns, vechiul dns sw, etc).

Deci, cum pot să știu câte IP-uri v4 pot avea într-o singură intrare dns pentru a garanta un răspuns UDP de maximum 512 octeți?

sau

Este posibil să configurați ISC Bind să returneze un singur IP într-o interogare multi-IP? Știu că IP-ul poate fi ciclat cu rrset-order { ordine ciclică; };.

Ca:

> test.example.com
Server: x.x.x.x
Adresa: x.x.x.x:53

Nume: test.example.com
Adresa: 192.0.2.6

deci, doar unul dintre ei? Mulțumiri.

Ron Maupin avatar
drapel us
Puteți utiliza TCP pentru DNS. Nu există niciun motiv să rămâneți cu UDP dacă aveți probleme. _[RFC 7766, DNS Transport over TCP - Implementation Requirements](https://datatracker.ietf.org/doc/html/rfc7766)_ explică și spune: „_Acest document actualizează, prin urmare, specificațiile de bază ale protocolului DNS, astfel încât suportul pentru TCP este de acum înainte o parte NECESARĂ a implementării complete a protocolului DNS._"
Arvy avatar
drapel kr
Da, în situație normală, dar persoanele afectate în acest caz folosesc routere fără suport TCP DNS sau cu erori. Mi-am dat seama de asta deoarece persoanele afectate folosesc routere vechi de la un furnizor local, doar wifi/wired. Folosind 3G/4G nu au fost afectați.
Ron Maupin avatar
drapel us
Aș sugera că este o problemă pe care utilizatorii trebuie să o corecteze. De exemplu, dacă ați avea un site web care, din motive întemeiate, folosește numai HTTPS, v-ați încerca să utilizați HTTP și pentru utilizatorii cu browsere vechi care nu pot folosi HTTPS corect? La un moment dat, trebuie să încetați să susțineți aplicații și tehnologii învechite și nu ar trebui să suportați niciodată produse cu probleme.
Puncte:2
drapel cn

Și acum este instabil (erori „nu pot găsi gazda”)

De unde/cum?

Toate rezolutoarele configurate corect, după cum ați observat, vor primi un steag trunchiat la prima lor interogare prin UDP și apoi vor comuta la TCP și totul va fi bine.

Desigur, vă amintiți că DNS este peste UDP ȘI TCP (contrar unui mit popular), așa că trebuie să vă asigurați că serverele dvs. de nume autorizate pot fi interogate prin TCP și totul va fi bine.

După câteva căutări pe Google, am aflat că o interogare multi-IP nu trebuie să aibă mai mult de 512 de octeți pentru a garanta că va fi utilizat UDP

Depinde. Uneori poți să treci peste 1000. Dar cel mai important, lucrurile se retrag la TCP, așa că nu ar trebui să fie o problemă (doar o ușoară pierdere a performanțelor, poate).

și evitați o interogare suplimentară (sau probleme cu clienții sau furnizorii no-tcp dns, vechi dns sw etc).

„clienți sau furnizori no-tcp dns” nu ar trebui să existe deoarece nu are sens și este împotriva specificațiilor DNS scrise... acum mai bine de 40 de ani! Sau aveți dovezi specifice ale acestor cazuri?

Nu încercați să ocoliți astfel de lucruri. Dacă există aceste bucăți de software, acestea sunt sparte și vor avea O TONĂ de alte probleme, cum ar fi pentru domeniile securizate DNSSEC.

Deci, cum pot să știu câte IP-uri v4 pot avea într-o singură intrare dns pentru a garanta un răspuns UDP de maximum 512 octeți?

Nu se poate răspunde la acest lucru în general (pentru că depinde de nume), dar cel mai important, este oarecum inutil să încerci să optimizezi lucrurile în acest fel.

Oricum, puteți face calculul ușor:

  • un pachet UDP are antet de 8 octeți înainte de date (RFC 768)
  • un pachet DNS, vezi RFC 1035, are un antet (12 octeți), apoi întrebarea (cantitate variabilă de octeți, vezi mai târziu), apoi răspunsul (vezi mai târziu) și vom considera secțiunea suplimentară și de autoritate ca fiind goală.

Deci suntem deja la 512-8-12 = 492 de octeți pentru întrebarea DNS + răspuns.

Ca răspuns, an A înregistrarea va fi nume (lungime variabilă) + tip (2 octeți) + clasă (2 octeți) + TTL (4 octeți) + lungime (2 octeți) și apoi datele. Pentru A datele sunt de 4 octeți (o adresă IPv4).

Întrebarea este nume (lungime variabilă) + tip (2 octeți) + clasă (2 octeți).

Numele din pachetele DNS au aceste două proprietăți:

  • sunt codificate ca o listă de etichete prefixate după lungime
  • poate fi comprimat astfel încât un nume dat sau o parte din nume să apară o singură dată.

Deci de exemplu exemplu.com este codificat în DNS ca 7,e,x,a,m,p,l,e,3,c,o,m,0 unde fiecare lungime este de un octet, dar dacă numele este necesar mai târziu, acesta va fi înlocuit cu un indicator care utilizează numai 2 octeți.

Dacă luăm acest nume:

  • dimensiunea părții de nume în cauză va fi: 13 octeți, deci dimensiunea totală a întrebării: 13 + 2 + 2 = 17
  • ca răspuns, fiecare nume poate fi un indicator de 2 octeți care face referire la numele din întrebare, deci fiecare înregistrare în răspuns va avea lungimea de 2 octeți pentru nume și apoi restul de mai sus, deci 16 octeți.

Prin urmare, pachetul DNS complet va avea dimensiunea 12 (antet) + 17 (întrebare) + x ori 16 unde x este numărul de A înregistrări.

Deci trebuie sa rezolvam: 512 = 8 + 12 + 17 + 16x pentru x, care dă x=29 sau așa. Amintiți-vă că acest lucru este în cele mai bune circumstanțe (fără înregistrări suplimentare/de autoritate și compresie de nume utilizată în întregime) și pentru un anumit nume (dar dacă utilizați compresia numele apare complet o singură dată în cauză, deci doar acea dimensiune se schimbă).

[De asemenea, apropo, nu fiți prinși în moștenirea Internetului din secolul trecut; în zilele noastre IPv6 ar trebui să fie norma; bineinteles ca pui si mai putin aaaa tipuri de înregistrare într-un pachet DNS de dimensiune fixă ​​decât cele IPv4 :-) ]

Este posibil să configurați ISC Bind să returneze un singur IP într-o interogare multi-IP?

Nu cred și dacă ar exista, cum ar alege bind ce IP să returneze? Dacă sunteți aici, depinde de dvs. să enumerați un singur IP în zonefile. Sau dacă ești cu adevărat atașat de această idee (dar din nou, tot timpul pe care îl pierzi în asta nu va preveni alte probleme, deoarece clienții au probleme, așa că oricum încerci să te lupți cu un deal infinit), poți încerca dnsdist acesta este un fel de cuțit de armată elvețiană și permite reglajul fin.

PS: de asemenea, amintiți-vă că DNS are o extensie pentru a permite unei părți să specifice dimensiunea bufferului (UDP) pe care o poate primi. Vezi RFC 6891. Un recent săpa utilizări 1232 implicit acolo. S-ar putea să fiți interesat în general să vă uitați https://kb.isc.org/docs/aa-01219 sau ziua de flag DNS din 2020 la https://dnsflagday.net/2020/ exact despre asta era vorba.

Arvy avatar
drapel kr
Multumesc pentru raspuns! Din anumite motive, mai multe persoane au probleme pentru a rezolva răspunsul DNS de 31 de IP-uri... Acum investighez pachetul DNS folosind WireShark, returnează 572 de octeți...`112402 2022-03-09 18:28:09 ,664371 8.8.8.8 192.168.0.3 DNS 572 Răspuns la interogare standard 0x0003 A xxxxxxxx A` (...listă lungă de IP-uri).
Patrick Mevzek avatar
drapel cn
31 IP-uri cu siguranță nu este un caz frecvent, dar din nou, nu ar trebui să fie o preocupare pentru niciun client DNS normal. Întrebați acei „mai mulți” oameni ce furnizor DNS recursiv folosesc, dacă lucrurile se schimbă forțând TCP (`+tcp` în `dig`) sau jucându-se cu `+bufsize` (vezi răspunsul meu editat la sfârșit despre asta)
Arvy avatar
drapel kr
Da, vă înțeleg explicația și văd perfect ce ați spus în WireShark. Sunt de acord cu UDP+TCP, dar mi-am dat seama de probleme la unele routere (ex: D-Link 510), chiar și la cele moderne, care au probleme să rezolve acel DNS de 31 de IP-uri (*notă*: rezolutori DNS interni, proxy). Un simplu `ping` în Windows eșuează sau ping doar uneori (sunt de acord, nu are sens)... dacă reduc numărul de IP-uri, nu eșuează niciodată.
Arvy avatar
drapel kr
Dacă `nslookup` la router (192.168.0.1), acesta returnează „server eșuat” pentru intrarea 31 IP. Dacă schimb `server 8.8.8.8` funcționează bine. Ei bine, voi reduce pentru a evita asta, chiar și eu nu știu de ce. Vă mulțumim pentru ajutorul dumneavoastră valoros.
Patrick Mevzek avatar
drapel cn
„Dacă caut la router (192.168.0.1), returnează „server eșuat” pentru intrarea cu 31 IP. Dacă schimb serverul 8.8.8.8 funcționează bine. „ Cred că asta arată foarte bine unde problema este...așa că puteți fie să încercați să o ocoliți (ați putea chiar să vă re-arhitecturați sistemul pentru a nu depinde de peste 30 de adrese IP, uitați-vă la anycast, de exemplu) sau pur și simplu le explicați oamenilor că au sisteme stricate și ar trebui să îl repare (sau să folosească funcționalitatea) soluții publice în loc de cele locale deteriorate)
Arvy avatar
drapel kr
Da, explica oamenilor este imposibil, am redus la 20 de IP-uri și pare să funcționeze ok acum. Probabil că voi crea 2 intrări DNS, cu câte 15 IP-uri fiecare, iar apoi voi „echilibra” intrările programatic (deoarece vor fi încărcate pe site-urile PHP). Mulțumiri!
Patrick Mevzek avatar
drapel cn
Cursa până la capăt nu este niciodată ceva ce recomand personal. Acest lucru nu ajută Internetul la nivel global și nici acești clienți, de fapt, pentru că dacă au această problemă, o mulțime de alte lucruri probabil sunt rupte pentru ei sau anormal de lent etc.
Arvy avatar
drapel kr
De acord, dar nu am de ales, persoanele afectate folosesc routere vechi furnizate de niște furnizori mari de internet, așa că, din moment ce sunt în Brazilia, vorbim de milioane de routere :( „test.example.com” meu, în lumea reală, este un serviciu de streaming audio pentru +200.000 de utilizatori.

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.