Come risolvere il nome di dominio con il suffisso «.local» per una zona ospitata privata di Route 53?

Ultimo aggiornamento: 05-07-2022

Non riesco a risolvere un record di zona ospitata privata di Amazon Route 53 con la mia istanza Amazon EC2 (Amazon Elastic Compute Cloud).

Breve descrizione

Le distribuzioni del sistema operativo Linux che utilizzano il servizio systemd-resolved gestiscono le query DNS utilizzando un risolutore stub. L'IP del risolutore stub si trova in /etc/resolv.conf. Il listener stub DNS locale non inoltra le richieste DNS per i nomi di dominio con il suffisso «.local». La richiesta DNS ha esito negativo con il codice di risposta «ServFail» simile al seguente output:

### failed ###
ubuntu@ip-172-31-2-3:~$ dig example.local.

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> example.local.
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 29563    ### status: SERVFAIL ###
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;example.local.            IN    A

;; Query time: 0 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)            ### 127.0.0.53 is systemd-resolved ###
;; WHEN: Thu Jun 30 12:34:56 UTC 2022
;; MSG SIZE  rcvd: 42

### success ###
ubuntu@ip-172-31-2-3:~$ dig example.local. @172.31.0.2        ### dig to @172.31.0.2 AmazonProvidedDNS / Route 53 Resolver ###

; <<>> DiG 9.18.1-1ubuntu1.1-Ubuntu <<>> example.local. @172.31.0.2
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29352    ### status: NOERROR ###
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.local.            IN    A

;; ANSWER SECTION:
example.local.        300    IN    A    192.0.2.1

;; Query time: 4 msec
;; SERVER: 172.31.0.2#53(172.31.0.2) (UDP)            ### 172.31.0.2 is AmazonProvidedDNS / Route 53 Resolver ###
;; WHEN: Thu Jun 30 12:34:56 UTC 2022
;; MSG SIZE  rcvd: 58

Risoluzione

Per risolvere un nome di dominio con il suffisso «.local», utilizza il risolutore esterno invece del listener stub DNS locale.

Nota: è consigliabile evitare di utilizzare il suffisso «.local» del nome di dominio perché RFC 6762 riserva questo nome di dominio per l'uso esclusivo di Multicast DNS.

1.    Cambia il risolutore DNS dal listener stub DNS locale al risolutore DNS esterno (AmazonProvidedDNS).

cd /etc/
sudo ln -sf ../run/systemd/resolve/resolv.conf

2.    Modifica .conf per arrestare il listener stub DNS locale.

cd /etc/systemd/
sudo cp -ip resolved.conf resolved.conf.org
sudo sed -i -e 's/#DNSStubListener=yes/DNSStubListener=no/' resolved.conf

3.    Riavvia systemd-resolved.

sudo systemctl restart systemd-resolved