Qual è il numero massimo di IP che un record DNS può avere?

Ho un'idea strana: consente a più persone / organizzazioni di ospitare la stessa applicazione e lasciare che tutti i loro nodes siano accessibili tramite un singolo nome a dominio. Questo è per avere, per esempio, una networking sociale veramente distribuita, in cui l'usabilità non viene sacrificata (cioè gli utenti non devono ricordare diversi URL di provider e quando un provider scende, passare ad un altro)

Per raggiungere questo objective, ho pensato che sia ansible utilizzare un record DNS con più IP.

  • Quali sono i record corretti di SPF per consentire la distribuzione locale e Google Apps
  • Migliore strategia CNAME TTL per la commutazione in caso di fallimento
  • Record CNAME per Amazon S3 - tutti gli svantaggi?
  • Perché è necessario RFC 7505 (Null MX)?
  • C'è un motivo per utilizzare DNS interno su 8.8.8.8?
  • Possiamo avere più CNAM per un singolo nome?
  • Quindi, quanti IP possono contenere un singolo record DNS? Questa risposta dice che è di circa 30, ma la usecase c'è diversa. Per lo scenario di cui sopra non mi import se una data ISP memorizza solo 30, purché un altro ISP memorizza altri 30 e così via.

  • Come specificare una chiave SSH per Hudson con plugin git?
  • Devo correggere il mio SSH se solo consentire il mio IP in iptables?
  • Utilizzo di OpenSSH (chiave pubblica o password) + autenticatore google
  • Connect Direct vs sFTP?
  • Come distriggersre il dns dotting per le connessioni IPSEC VPN per ASA 5510
  • Consenti SSH solo su uno degli indirizzi IP dei server
  • 8 Solutions collect form web for “Qual è il numero massimo di IP che un record DNS può avere?”

    Disclaimer: Nessun offesa, ma questa è una ctriggers idea. Non raccommand che qualcuno faccia questo nella vita reale.

    Ma se si dà un ragazzo IT annoiato un laboratorio, cose divertenti avverranno!

    Per questo esperimento, ho utilizzato un server DNS Microsoft in esecuzione su Server 2012 R2. A causa delle complicazioni di hosting di una zona DNS in Active Directory, ho creato una nuova area primaria denominata testing.com che non è integrata con AD.

    Utilizzando questo script:

    $Count = 1 for ($x = 1; $x -lt 256; $x++) { for ($y = 1; $y -lt 256; $y++) { for ($z = 1; $z -lt 256; $z++) { Write-Host "1.$x.$y.$z`t( $Count )" $Count++ dnscmd . /RecordAdd testing.com testing A 1.$x.$y.$z } } } 

    Ho continuato a creare, senza errori, 65025 record host per il nome testing.testing.com. , con letteralmente each indirizzo IPv4 da 1.1.1.1 a 1.1.255.255.

    Poi ho voluto assicurarmi che avrei potuto rompere il numero totale di record A di 65536 (2 ^ 16 bit) senza errori e potrei, quindi suppongo che probabilmente avrei potuto andare fino a 16581375 (1.1.1.1 a 1.255 .255.255,) ma non volevo stare qui e guardare questo script gestito tutta la notte.

    Troppi record

    Quindi penso che sia sicuro dire che non esiste un limite pratico per il numero di record A che è ansible aggiungere a una zona per lo stesso nome con IP diversi sul server.

    Ma functionrà effettivamente dalla prospettiva di un cliente?

    Ecco quello che ottengo dal mio cliente visto da Wireshark:

    due domande (Apri l'image in una nuova scheda del browser per la dimensione massima.)

    nslookup

    Query TCP

    Come potete vedere, quando utilizzo nslookup o ping dal mio client, emette automaticamente due query: un UDP e un TCP. Come già sapete, la maggior parte che posso entrare in un datagramma UDP è di 512 byte, quindi una volta superato questo limite (come 20-30 indirizzi IP), si deve usare TCP invece. Ma anche con TCP, ho solo un piccolo sottoinsieme di record A per testing.testing.com. 1000 registri sono stati restituiti per query TCP. L'elenco dei record A ruota di 1 correttamente con each query successiva, esattamente come se si prevedesse che il DNS round-robin funzionasse. Ci vorrebbero milioni di domande per arrotondare tutti questi.

    Non vedo come questo ti aiuterà a rendere la tua networking mass media socialmente scalabile e resiliente, ma c'è comunque la tua risposta.


    Modifica: nel tuo commento di follow-up, chiedi perché penso che questa sia generalmente una ctriggers idea.

    • Diciamo che sono un utente di internet medio e vorrei collegarmi al tuo servizio. Ho digitato http://www.bozho.biz nel mio browser web. Il client DNS sul mio computer ottiene 1000 record. Beh, sfortuna, i primi 30 record nell'elenco non sono reattivi perché l'elenco dei record A non è aggiornato, o forse c'è una rottura su larga scala che colpisce un pezzo di Internet. Diciamo che il mio browser web ha un time-out di 5 secondi per IP prima di passare e provare quello successivo. Così ora sto seduto qui fissando una clessidra di filatura per 2 minuti e mezzo in attesa che il tuo sito carichi. Non c'è nessuno che ha tempo per questo. E sto solo supponendo che il mio browser web o qualsiasi applicazione che utilizzo per accedere al tuo servizio sta persino tentando di più dei primi 4 o 5 indirizzi IP. Probabilmente non lo farà.

    • Se hai usato spazzatura automatica e aggiorni aggiornamenti non validi o anonimi nella zona DNS nella speranza di tenere aggiornato l'elenco dei record A … immaginate quanto sia sicura! Anche se hai progettato un sistema in cui i client necessitavano di un certificato TLS client che hanno ricevuto da te in anticipo per aggiornare la zona, un client compromesso ovunque sul pianeta sta per avviare una botnet e distruggere il servizio. Il DNS tradizionale è precariamente insicuro come lo è, senza fonte di sourcing.

    • Utilizzo largo della width di banda e sprechi. Se each query DNS richiede 32 kilobyte o più di width di banda, questo non va a scalare affatto.

    • Il DNS round-robin non sostituisce il bilanciamento del carico corretto. Non fornisce alcun modo per recuperare da un nodo che scende o diviene non disponibile nel mezzo delle cose. Stai per istruire i tuoi utenti a fare un ipconfig / flushdns se il nodo a cui sono stati collegati scende? Questi tipi di problemi sono già stati risolti da cose come GSLB e Anycast.

    • Eccetera.

    Per rispondere alla domanda come è stato dichiarato ("quanti IP possono avere un singolo record DNS?") La risposta è molto semplice: un singolo record A contiene esattamente un indirizzo. Tuttavia, possono esistere più record A per lo stesso nome.

    Ogni indirizzo IPv4 richiederà 16 byte nella risposta. Ogni indirizzo IPv6 richiederà 28 byte nella risposta.

    Si raccomanda vivamente di assicurarsi che la risposta si inserisca in 512 byte. Ciò consentirebbe circa 25 indirizzi IPv4 e 14 indirizzi IPv6 (considerando che avete bisogno anche di altre informazioni nel pacchetto). Il limite esatto dipende dalla lunghezza del tuo nome di dominio.

    Se si dispone di 25 indirizzi IPv4 e 14 indirizzi IPv6, si contano i client che richiedono indirizzi IPv4 e IPv6 in query separate. Se il cliente richiede entrambi i tipi di indirizzi in una singola interrogazione (che è rara), allora dovresti andare più in basso.

    Se la dimensione della risposta supera i 512 byte, può continuare a lavorare su UDP se il client e il server supportno EDNS. Senza EDNS, il client avrebbe ricevuto una risposta troncata e avrebbe dovuto riprovare su TCP. Ciò aumenta la comunicazione da 1 a 4 giri di andata. Ma ancor peggio, a volte ci sono delle configurazioni errate che impediscono il DNS sul TCP di lavorare.

    Anche se si potrebbe spremere più di 14 indirizzi nella risposta senza causare problemi allo strato DNS, è improbabile che sia molto utile. Il timeout utilizzato dal cliente prima di rinunciare ad un indirizzo e procedere al successivo è spesso significativo.

    Dover attendere che tale timeout anche una volta può portre a una scarsa esperienza utente. Se il cliente wheresse passare 14 indirizzi prima di get una risposta, l'utente dovrà attendere 13 timeout.

    Quello che stai descrivendo non è un'idea particolarmente nuova. Come altre risposte hanno già riguardato, è limitato a quanti record di A si può avere in una sola risposta, ma non dice nulla di quanti record di A possano essere in totale.

    Potresti, ad esempio, implementare un server DNS che risponda a qualsiasi query per un record A con un IP random. Queste volte sufficienti, questo comporterebbe 4294967296 record A unici: uno per each indirizzo IPv4.

    Come ho detto, questa non è una nuova idea. Infatti, è in parte come funziona Akamai (e probabilmente un sacco di altri CDN). Il record A ottenuto per qualsiasi dominio Akamai è determinato dai loro server DNS neri magici. Scommetto che la risposta che ricevi dipende dal bilanciamento del carico dinamico e dalle preoccupazioni geografiche.

    Ad esempio, ho scelto a338.g.akamaitech.net. Se guardo adesso sul mio computer che utilizza un server di nomi assegnato a DHCP da Comcast:

     $ host a338.g.akamaitech.net a338.g.akamaitech.net has address 23.3.98.65 a338.g.akamaitech.net has address 23.3.98.89 

    Cosa succede se chiedo al DNS di Google?

     $ host a338.g.akamaitech.net 8.8.8.8 Using domain server: Name: 8.8.8.8 Address: 8.8.8.8#53 Aliases: a338.g.akamaitech.net has address 23.3.96.152 a338.g.akamaitech.net has address 23.3.96.120 

    Scommetto che se lo provate, scommetto che avrai una risposta diversa. Quanti server di bordo dispongono di Akamai per una risorsa particolare? Più di due, scommetto.

    Altri lo hanno menzionato come un dettaglio, ma da un punto di vista pratico, il limite duro è il limite di size del pacchetto UDP di 512 byte. Mentre è ansible passare a TCP quando viene rilevato il troncamento, in pratica molti / molti clienti non lo faranno (e probabilmente non dovrebbero; avrebbe dato un'esperienza utente scadente per la maggior parte delle applicazioni e mi aspettavo solo trasferimenti di zone o altri ricerca specifica per supportre TCP). Quindi stai guardando un limite di circa 30 indirizzi per IPv4 (record A) e un po 'less per IPv6 (AAAA) poiché sono più grandi. La lunghezza del nome di dominio si riduce e limiterà ulteriormente il numero.

    Come altri hanno sottolineato, è un'idea terribile per l'uso reale.

    Nel mondo reale ci sono clienti non conformi e resolver che hanno problemi con risposte che non possono rientrare in un singolo datagramma UDP e ci sono firewall che imporranno specifiche specifiche ma non conformi al protocollo sui limiti di dimensione dei messaggi DNS.

    E anche se poteste contare sulla tua enorme risposta in each caso (che non puoi fare), c'è un'altra ragione: questa è un'idea molto brutta. Maggiore è la dimensione della risposta DNS, più è tentativo di essere un carico utile per gli attacchi di riflessione, poiché fornisce un enorme fattore di amplificazione. In questo tipo di attacco denial of service, comune nel DNS, viene inviata una query UDP ad un risolutore ricorsivo aperto. L'indirizzo di origine delle query UDP in genere è facilmente spoofed e l'attaccante imposta l'origine di query all'IP del loro target. Sono raggiunti due auspicabili effetti (per l'attaccante): in primo luogo – uno sforzo di invio relativamente piccolo da parte loro (da una piccola query spoofed) produce un torrente relativamente grande di traffico indesiderato che arriva all'objective (questo è il fattore di amplificazione) e seconda – la fonte reale dell'attacco è nascosta dall'objective; l'objective conosce solo gli indirizzi dei resolver ricorsivi utilizzati come riflettori.

    Punto interessante di curiosità storiche su questo argomento. Negli anni '90, AOL ha ampliato i propri record DNS in modo tale che una query MX avrebbe restituito> 512 byte. Questo RFC violato, ha rotto un sacco di server SMTP (qmail è un popolare al momento), e ha causato molti errori di sysadmins. La correzione ha richiesto la patch o l'aggiunta di routes statici.

    Non so quale sia la situazione attuale, ma alcuni anni fa, quando ho toccato l'ultima qmail, i patch erano ancora in vigore.

    http://www.gossamer-threads.com/lists/qmail/users/30503

    La breve risposta: circa 25 record A in un pacchetto UDP. Al di là di questo, DNS passerà a TCP e non sarà così veloce. Avrai anche problemi con i client che non utilizzano resolver DNS in grado di scegliere l'IP "più vicino". Inoltre, con wifi e mobile, il "più vicino" spesso non sarà il server giusto.

    Risposta più lunga:

    Non farlo. Un modo migliore sarebbe impostare singoli record CNAME per each utente che punta al server appropriato. Diciamo che avete due server, server-f e server-r usati per IMAP. Configurare il client IMAP di ciascun utente con il nome del server come USERNAME.imap.example.com where "USERNAME" viene sostituito dal nome utente di posta elettronica. Ora è ansible spostare le persone tra i server senza wherer riconfigurare il proprio client di posta elettronica.

    server-f.example.com. IN A 10.10.10.10 server-r.example.com. IN A 10.20.20.20 wilma.imap.example.com. IN CNAME server-f.example.com. fred.imap.example.com. IN CNAME server-f.example.com. betty.imap.example.com. IN CNAME server-r.example.com. barney.imap.example.com. IN CNAME server-r.example.com.

    Tuttavia, se lo fai, ti consiglio altamente che generi i record DNS automaticamente da un database degli utenti. Si desidera assicurarsi che quando vengono creati e eliminati i conti, i record DNS vengono creati e cancellati. Altrimenti si finisce con un casino e un sacco di confusione.

    Ho visto questo fatto in aziende con letteralmente migliaia di utenti e, dato che le cose sono state automatizzate, il mondo è molto bene.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.