DNS dinamici: come ottenerli e configurarli

Debian-swirl.png Versioni Compatibili

Debian 6 "squeeze"
Debian 7 "wheezy"
Debian 8 "jessie"
Debian 9 "stretch"
Debian 10 "buster"
Gateway-Router

Sommario

Introduzione

Sottoscrivere un servizio di DNS dinamico risulta molto utile per coloro i quali desiderano rendere raggiungibile uno o più computer da internet, perché per esempio hanno installato un webserver come apache o perché vogliono monitorare da remoto un programma di file sharing, ecc.

Come noto un servizio DNS permette di associare ad un indirizzo IP un nome o alias o FQDN, ovvero permette di accedere alle varie pagine di un sito web digitandone il nome invece che un numero IP.
Nel caso di IP statici quest'associazione può evidentemente essere fatta un'unica volta, viceversa deve essere ripetuta ad ogni cambio di IP nel caso di assegnazione dinamica dal proprio ISP. Quest'ultimo è il caso tipico di utenti domestici e piccole imprese/uffici, ai quali tra l'altro non viene automaticamente assegnato un FQDN.
Tutto ciò implica che tali utenti non possono sperare di connettersi sempre con successo alla propria macchina usando l'indirizzo IP associatogli in un certo momento, poiché questo è destinato prima poi a cambiare. Associando invece un FQDN ad una macchina o LAN ed installando un apposito applicativo (o possedendo un router adeguato) che tenga traccia delle variazioni di IP è possibile collegarsi alla propria macchina/LAN digitando sempre lo stesso FQDN.
Esistono società che offrono gratuitamente, previa registrazione sempre gratuita, a chiunque la possibilità di dotarsi di un proprio FQDN (in genere la prima parte del dominio è fissa, l'utente può scegliere solo l'ultima parte), come ad esempio dyndns [1].

In genere la soluzione che preveda l'utilizzo di un router per l'aggiornamento dell'IP è sconsigliata, poiché non è garantito che la funzione integrata in un router rimanga compatibile nel tempo col servizio offerto dalle varie società.

ddclient

Uno degli applicativi atti ad ottenere quanto descritto nell'introduzione è ddclient; naturalmente ai fini di questa guida si assume che il lettore abbia sottoscritto un servizio compatibile con questo programma. Una volta che l'utente si è registrato ed ha ottenuto un proprio FQDN può procedere all'installazione del programma, disponibile da repository:

# apt-get install ddclient

Nel caso di LAN evidentemente si sceglierà per l'installazione del programma la macchina che rimane accesa più spesso e/o a lungo. Si noti che detto programma non determina l'accessibilità della macchina o della LAN dall'esterno, aspetto che dipende da una corretta configurazione del proprio router/modem, ma come già scritto garantisce solo che i dati inviati dall'esterno ed indirizzati al proprio FQDN raggiungano effettivamente il nostro modem/router, cui saranno collegati una o più macchine.
Durante l'installazione verranno chiesti i nomi registrati, l'utenza e la password del servizio sottoscritto, tutti parametri necessari al programma per contattare il fornitore di servizi e mantenere aggiornato l'IP associato all'alias.

  Client configurator
Nel caso si sia sottoscritto il servizio offerto da dyndns [1] è possibile generare automaticamente un'apposita configurazione da inserire nel file ddclient.conf a quest'indirizzo [3].

A prescindere dal servizio sottoscritto ddclient risulta già funzionante al termine dell'installazione e già configurato per l'avvio automatico al boot di sistema. Per il suo funzionamento non è necessario aprire alcuna porta aggiuntiva sul proprio modem/router.
È possibile testare il funzionamento di ddclient digitando da terminale:

# ddclient -daemon=0 -debug -verbose -noquiet

Qualora si volesse abilitare la crittografia SSL sulle comunicazioni è sufficiente aggiungere la riga:

ssl=yes

al file ddclient.conf ed assicurarsi di avere installato ssh e libio-socket-ssl-perl.

/etc/default/ddclient

Se si desidera far girare il servizio come demone è necessario editare il file /etc/default/ddclient cambiando due variabili come indicato qui di seguito:

run_ipup="false"
run_daemon="true"

Esempio /etc/ddclient.conf generico

daemon=300                                                   # Controlla ogni 300 secondi (o 5 minuti).
syslog=yes                                                   # Scrivi log in syslog.
mail=root                                                    # Invia tutti i messaggi a root
mail-failure=root
pid=/var/run/ddclient.pid                                    # Registra PID in un file.
ssl=yes                                                      # Usa ssl-support, richiede ssl-library.
# Usa direttamente l'IP associato all'interfaccia che comunica col provider internet, per esempio ppp0
#use=if, if=ppp0
# oppure contatta un server esterno (cambiare "indirizzo_web" con quello fornito dal proprio DNS provider)
use=web, web=indirizzo_web/, web-skip='IP Address'           # Indirizzo del server da cui prendere il proprio IP pubblico
# oppure ancora usa uno script dedicato che restituisce un IP formattato correttamente (es.: 104.15.7.189)
#use=cmd, cmd=/percorso/script/nome_script.sh
# IP del server che aggiorna i DNS (cambiare "indirizzo_server" con quello fornito dal proprio DNS provider)
server=indirizzo_server
protocol=dyndns2
login=nome_utente                                            # Nome utente
password=password_servizio                                   # Password in chiaro o password "in formato" MD5
# Elencare i FQDN da aggiornare (cioè che puntano alla macchina dove è in esecusione ddclient), uno per riga
dominio1
dominio2
...

Esempio /etc/ddclient.conf per domains.google.com

Dopo aver effettuato le modifiche al file /etc/default/ddclient come indicato sopra è sufficiente sostituire il file /etc/ddclient.conf con quanto segue

ssl=yes
use=web
protocol=googledomains
login=LOGIN_TOKEN
password=PASSWORD
iltuodominio

Dove LOGIN_TOKEN è il "Nome utente" generato nell'interfaccia di google domain andando sul proprio sito => DNS => DNS dinamico. Mentre PASSWORD è la password generata nella medesima interfaccia.

Inoltre iltuodominio va sostituito con il nome del dominio che si sta gestendo.

A questo punto per rendere effettive le modifiche è possibile riavviare il servizio ddclient con

service ddclient restart

Per testare che la configurazione sia corretta si può lanciare manualmente

ddclient -query

Esempi di script per estrarre l'IP pubblico dal router

Fritz!Box

Quello che segue è un esempio di script per interrogare il proprio router e ottenere l'IP pubblico associato alla sua WAN.

#!/bin/bash
# 
# Script to fetch external IP from Fritz!Box router, it can be used in the 
# configuration of ddclient by adding
#
#    use=cmd, cmd=/path/to/script/nome_script.sh
#
# Since you need to declare both a username and password in this script, 
# restrict file permissions to "600".
# Do not forget to:
# *	make this script executable;
# *	make sure that both "TR-064" and "UPnP" protocols are enabled in the router;
#	"Network --> Network settings --> Access Settings in the Home Network".
# * create a dedicated user on the fritzbox router
#	"System --> Fritz!Box users".
# You can substitute your actual router LAN IP to "http://fritz.box" if necessary.
#
curl --anyauth --user nome_utente:password_utente http://fritz.box:49000/upnp/control/wanpppconn1 -H "Content-Type: text/xml; charset="utf-8"" -H "SoapAction:urn:dslforum-org:service:WANPPPConnection:1#GetExternalIPAddress" -d "<?xml version='1.0' encoding='utf-8'?> <s:Envelope s:encodingStyle='http://schemas.xmlsoap.org/soap/encoding/' xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'> <s:Body> <u:GetExternalIPAddress xmlns:u='urn:dslforum-org:service:WANPPPConnection:1'></u:GetExternalIPAddress> </s:Body> </s:Envelope>" | sed -n -e 's#^.*<NewExternalIPAddress>\(.*\)</NewExternalIPAddress>.*$#\1#p'

NOTE

  • Sostituire nel soprastante script il nome utente e la password creati per permettere al presente script di interrogare il router. Tali credenziali sono ovviamente associate all'utente "nome_utente" che si suppone essere già stato creato con l'apposità funzionalità del router ("Sistema --> Utenti FRITZ!Box").
  • Nel router devono essere spuntate entrambe le seguenti opzioni "Consentire l'accesso alle applicazioni" e "Trasmettere le informazioni di stato tramite UPnP" ("Rete domestica --> Schema rete --> Impostazioni rete")
  • Script testato con "Fritz!Box 7530" (Fritz!OS 7.02).
  • Altri script utili per i router Fritz!Box disponibili qui

Approfondimenti

Collegamenti esterni

[1] dyndns home
[2] dyndns.it, guida rapida in italiano sul sito ufficiale
[3] ddclient, guida sul sito ufficiale con collegamento al client configurator
[4] DynamicDNS su Ubuntu




Guida scritta da: Wtf 22:39, 11 ago 2011 (CEST)   Debianized 40%
Estesa da:
marcomg (discussioni)
Verificata da:
marcomg (discussioni)

Verificare ed estendere la guida | Cos'è una guida Debianized