sabato 11 giugno 2016

Dns dinamico


La necessità è quella di raggiungere dall'esterno il server casalingo che abbiamo messo su, magari per farci ssh dall'esterno della lan di casa, un client torrent web al quale aggiungere .torrent dal telefonino mentre siamo in giro o un sito http per provare wordpress o tomcat.

Ci sono una serie di siti che forniscono dns dinamico gratuitamente, tra i quali:
  • noip (richiede mensilmente la conferma, anche se usato)
  • afraid (i subdomain possono sparire in maniera impredicibile)
  • duckdns
  • nsupdate (richiede annualmente la conferma, se non usato)

Se siamo abbstanza fortunati sul pannello di configurazione del modem/router ADSL c'è già la possibilità di settare un indirizzo dinamico, altrimenti bisogna configurarselo a mano.

Configurare il server casalingo per comunicare il nuovo IP al sito dns dinamico è un vero inferno se usiamo dyndns o inadyn, ma abbastanza semplice se usiamo il comando http che ci fornise il sito dns dinamico; tale comando aggiorna sul sito il nostro nuovo indirizzo IP visibile dall'esterno.

Per il servizio afraid è un comando wget che ho inserito nello script /etc/rc.local, ma il problema è che tale script viene eseguito prima che internet sia raggiungibile; va quindi inserito un test per verificare la connettività.

Tale test lo prendiamo per esempio da qui, ed aggiungiamo un'attesa con retry infinito, il risultato è la seguente sezione di script (ringraziamo sempre il sito tohtml.com per la conversione in HTML):
#!/bin/sh

isConnected="0"

while [ $isConnected -eq "0" ]
do
        sleep 10
        wget -q --spider http://freedns.afraid.org
        if [ $? -eq 0 ]; then
                isConnected="1"
        fi
done

wget -O /dev/null http://freedns.afraid.org/dynamic/update.php?XXX

exit 0
Da notare di questo script:
  • se internet non è raggiungibile questo script non esce;
  • se si riavvia il modem, cambia l'indirizzo IP assegnato dall'ISP e andrebbe rilanciato questo script.
Il passo successivo è attivare il port forwarding sul router, in modo da indicare che le richieste che arrivano al modem dall'esterno su determinate porte vanno rigirate sul server casalingo.

Configurazione in systemd


Adottato ormai in quasi tutte le distribuzioni, va configurato in modo che lanci all'avvio lo script di update DNS inserito sopra:
  • bisogna creare il file /etc/systemd/dynamicDns.service con il seguente contenuto:
[Unit]
Description=Aggiorna il server DNS
Wants=network-online.target
After=network-online.target

[Service]
Type=oneshot
ExecStart=/home/osmc/updateDns.sh

[Install]
WantedBy=multi-user.target

Dove il file indicato nel campo ExecStart contiene lo script di cui sopra.

Nessun commento:

Posta un commento