Come posso risolvere i problemi di risoluzione del DNS della zona ospitata privata di Route 53?

9 minuti di lettura
0

Desidero risolvere i problemi di risoluzione DNS con la mia zona ospitata privata Amazon Route 53.

Risoluzione

Nota: se vengono visualizzati errori durante l'esecuzione dei comandi dell'interfaccia della linea di comando AWS (AWS CLI), assicurati di utilizzare la versione più recente dell'interfaccia della linea di comando AWS.

Conferma di aver attivato il supporto DNS nel VPC

Per consentire la risoluzione dei record della zona ospitata privata, devi attivare il supporto DNS nel tuo cloud privato virtuale (VPC). Verifica che DNSSupport e DNSHostnames siano impostati su True nella tua VPC.

Conferma di aver associato l'ID VPC corretto alla zona ospitata privata

Quando associ una zona ospitata privata a un VPC, Route 53 Resolver crea una regola definita automaticamente e la associa al VPC. Le risorse di quel VPC possono interrogare il Resolver per risolvere i record DNS nella zona ospitata privata.

Conferma di aver associato l'ID VPC corretto alla tua zona ospitata privata. Inoltre, assicurati di interrogare i record delle risorse del dominio all'interno dello stesso VPC.

Per ottenere un elenco di VPC associati a una zona ospitata, esegui il seguente comando nell'interfaccia a riga di comando di AWS:

aws route53  list-hosted-zones-by-vpc --vpc-id VPC_ID --vpc-region REGION_ID

Nota: sostituisci VPC_ID e REGION_ID con i valori desiderati.

Per ottenere un elenco di zone ospitate private associate a VPC specifici, esegui il seguente comando nell'interfaccia a riga di comando di AWS:

aws route53 get-hosted-zone --id VPC_ID

Nota: sostituisci VPC_ID con il valore desiderato.

Verifica di aver configurato le regole di inoltro dei domini delle zone private ospitate nei server DNS personalizzati verso il server DNS fornito da Amazon (CIDR+2).

Se hai configurato server DNS personalizzati o server Active Directory nelle opzioni DHCP per il DNS nella tua VPC, controlla le seguenti configurazioni:

  • Nella regola di inoltro, conferma che i tuoi server inoltrano le query DNS del dominio privato all'indirizzo IP dei server DNS forniti da Amazon della tua VPC. Ad esempio, se l'intervallo CIDR primario della tua VPC è 172.31.0.0/16, l'indirizzo IP del server DNS della VPC è 172.31.0.2. Questa è la gamma di rete VPC più due.
  • Verifica che il dominio che hai configurato nei server personalizzati sia diverso dalla tua zona ospitata privata. Se il dominio è uguale alla tua zona ospitata privata, il server è autorevole per quel dominio. In questo caso, il server non contatta il server DNS fornito da Amazon per i domini delle zone ospitate private.

Rivedi le impostazioni personalizzate in resolv.conf

Se la risoluzione o le risposte del DNS sono intermittenti, controlla le impostazioni di configurazione della tua istanza sorgente in resolv.conf.

Ad esempio, configuri l'opzione rotate in resolv.conf per bilanciare le query DNS tra il server DNS di Amazon e il server resolver pubblico di Google (8.8.8.8). In questo caso, queste sono le impostazioni di resolv.conf:

options rotate; generated by /usr/sbin/dhclient-script
nameserver 8.8.8.8
nameserver 172.31.0.2

Nella tua prima richiesta al resolver pubblico di Google (8.8.8.8), ricevi la risposta prevista di NxDomain. Ricevi questa risposta perché il resolver sta cercando di trovare la risposta nella zona ospitata pubblica anziché nella zona ospitata privata:

Private hosted Zone Record - resolvconf.local\[ec2-user@ip-172-31-253-89 etc\]$ curl -vks http://resolvconf.local
\* Rebuilt URL to: http://resolvconf.local/
\* Could not resolve host: resolvconf.local

15:24:58.553320 IP ip-172-31-253-89.ap-southeast-2.compute.internal.40043 > dns.google.domain: 65053+ A? resolvconf.local. (34)
15:24:58.554814 IP dns.google.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.40043: 65053 NXDomain 0/1/0 (109)

Tuttavia, la seconda interrogazione viene risolta correttamente. La seconda query ha esito positivo perché raggiunge il resolver DNS VPC associato alla tua zona ospitata privata:

[ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/
*   Trying 1.1.1.1...
* TCP_NODELAY set
* Connected to resolvconf.local (1.1.1.1) port 80 (#0)

15:25:00.224761 IP ip-172-31-253-89.ap-southeast-2.compute.internal.51578 > 172.31.0.2.domain: 7806+ A? resolvconf.local. (34)
15:25:00.226527 IP 172.31.0.2.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.51578: 7806 1/0/0 A 1.1.1.1 (50)

Verifica che le zone ospitate private non abbiano namespace sovrapposti

Quando più zone hanno namespace sovrapposti (come example.com e test.example.com), il Resolver indirizza il traffico verso la zona ospitata in base alla corrispondenza più specifica. Se esiste una zona corrispondente ma nessun record che corrisponda al nome di dominio e al tipo nella richiesta, Resolver non inoltra la richiesta. Resolver restituisce invece NXDOMAIN (dominio inesistente) al client.

Conferma di aver configurato il record corretto nella zona ospitata privata più specifica per una risoluzione DNS corretta.

Ad esempio, supponiamo che tu abbia due zone ospitate private con i seguenti record:

Nome della zona privata ospitataNome del recordValore
localeoverlap.privatevpc.local60.1.1.1
privatevpc.localoverlap.privatevpc.local50.1.1.1

La richiesta ottiene la seguente risposta dalla zona ospitata privata corrispondente più specifica:

[ec2-user@IAD-BAS-INSTANCE ~]$ dig overlap.privatevpc.local +short50.1.1.1

Verifica che non sia configurata alcuna delega di zona nella zona ospitata privata

Le zone ospitate private non supportano la delega di zona. Se la delega è configurata, il client riceve il codice di risposta «Servfail» dal resolver VPC.

Usa l'interfaccia a riga di comando di AWS per confermare che la delega di zona non è configurata nella zona ospitata privata, come nell'esempio seguente:

Zona ospitata privata: abc.com Record NS della delegazione per: kc.abc.com Record di risorse: test.kc.abc.com

[ec2-user@ip-172-31-0-8 ~]$ dig test.kc.abc.com;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 63414
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;test.kc.abc.com        IN      A
;; Query time: 15 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Fri Apr 16 15:57:37 2021
;; MSG SIZE  rcvd: 48

Verifica che la politica di routing del record di risorse sia supportata nelle zone ospitate private.

Conferma di aver configurato una politica di routing nel tuo record di risorse supportata da una zona ospitata privata:

  • Routing semplice
  • Routing di failover
  • Routing di risposte multivalore
  • Routing ponderato
  • Routing basato sulla latenza
  • Routing di geolocalizzazione

Conferma che la regola Resolver e il relativo endpoint in entrata si risolvono in diversi VPC

Quando l'endpoint in uscita in una regola Resolver punta a un endpoint in entrata che condivide un VPC con la regola, il risultato è un loop. In questo ciclo, la query passa continuamente tra gli endpoint in entrata e in uscita.

Puoi comunque associare la regola di inoltro ad altri cloud privati virtuali condivisi con altri account. Per farlo, usa AWS Resource Access Manager (AWS RAM). Le zone ospitate private associate all'hub o a un VPC centrale risolvono le domande agli endpoint in entrata. Una regola del resolver di inoltro non modifica questa risoluzione, come nell'esempio seguente:

Hub VPC: VPC A - CIDR 172.31.0.0/16 Spoke VPC: VPC B - CIDR 172.32.0.0/16 Indirizzo IP in entrata: 172.31.253.100 e 172.31.2.100 Indirizzi IP di destinazione nella regola di inoltro: 172.31.253.100 e 172.31.2.100 Regola associata ai VPC: Client VPC A e VPC B: 172-32-254-37

ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 9007
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;overlap.privatevpc.local. IN A
;; Query time: 2941 msec
;; SERVER: 172.32.0.2#53(172.32.0.2)

In questo output, la richiesta DNS passa continuamente tra gli endpoint in uscita e in entrata. La richiesta verifica la regola associata a VPC A e invia la query all'endpoint in uscita. Dopo diversi tentativi, la query si interrompe e risponde con un codice di risposta Servfail.

Per risolvere questo problema e interrompere il ciclo, rimuovi l'associazione VPC dell'hub (VPC A) con la regola. Quindi, riceverai una risposta corretta dalla zona ospitata privata:

ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58606
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;overlap.privatevpc.local. IN A
;; ANSWER SECTION:
overlap.privatevpc.local. 0 IN A 50.1.1.1
;; Query time: 5 msec
;; SERVER: 172.32.0.2#53(172.32.0.2)

Conferma che il resolver locale invii una richiesta ricorsiva

Se utilizzi le query locali a Route 53 Resolver, puoi inoltrare le query DNS dai resolver della tua rete a un resolver VPC. Per fare ciò, usa l'endpoint in entrata Resolver. Questa azione ti consente di risolvere i nomi di dominio per le risorse AWS, come i record in una zona ospitata privata.

In alcuni casi, potresti scoprire che la zona ospitata privata non si risolve correttamente dal resolver locale. Questo comportamento si verifica perché il resolver locale invia una query iterativa anziché una richiesta ricorsiva. L'endpoint in entrata supporta le query ricorsive per risoluzioni DNS di successo.

Per verificare il tipo di risoluzione, utilizza un'acquisizione di pacchetti sul resolver DNS (locale). Quindi, rivedi i flag DNS (ricorsione desiderata = 0). Per verificare la risoluzione, invia una richiesta iterativa con il comando +norecurse dig o imposta norecurse con nslookup:

Indirizzo IP dell'endpoint in entrata: 172.31.253.150

Indirizzo IP del Resolver locale: 10.0.4.210

Una query iterativa non riuscita all'indirizzo IP in entrata produce il seguente output:

[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local +norecurse; <<>> DiG 9.11.0rc1 <<>> @172.31.253.150 overlap.privatevpc.local +norecurse
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

Una query ricorsiva riuscita produce il seguente risultato:

[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19051
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;overlap.privatevpc.local.      IN      A
;; ANSWER SECTION:
overlap.privatevpc.local. 0     IN      A       50.1.1.1
;; Query time: 200 msec
;; SERVER: 172.31.253.150#53(172.31.253.150)

Conferma di aver configurato le priorità delle regole corrette per il DNS fornito da Amazon

Quando l'istanza client invia una query al resolver (server DNS fornito da AWS), il resolver verifica le regole dell'istanza su dove indirizzare la richiesta.

In generale, la regola più specifica ha la priorità. Se esistono una regola test.example.com Resolver e una zona ospitata privata longest.test.example.com, cerca che il dominio longest.test.example.com corrisponda alla zona ospitata privata.

Se le regole si trovano allo stesso livello di dominio, hanno la seguente priorità:

  1. Regola Resolver
  2. Regola della zona privata ospitata
  3. Regola interna

Ad esempio, se esiste una regola Resolver test.example.com e una zona ospitata privata test.example.com, la regola Resolver ha la priorità. La query viene inoltrata ai server o agli indirizzi IP di destinazione configurati nella regola.

Informazioni correlate

Utilizzo di zone ospitate private

Quali opzioni Amazon VPC devo attivare per utilizzare la mia zona ospitata privata?

Evita le configurazioni di loop con gli endpoint Resolver

AWS UFFICIALE
AWS UFFICIALEAggiornata 10 mesi fa