Facilitare l’accesso ai propri servizi con DynDNS e dnsmasq

Uno dei problemi che si possono avere accedendo ai servizi della propria LAN casalinga dall’esterno è che IP e hostnames non corrispondono, e richiedono dei giochi per poter funzionare indistintamente.

Questo articolo darà modo a chi ne avesse bisogno di semplificare l’accesso ai propri servizi, non richiedendo modifiche alla configurazione dei programmi per gli accessi interni o esterni.

Introduzione

Avendo a casa una piccola LAN (tre computer in realtà), ho dato ai due fissi il compito di gestirmi alcuni servizi, come per esempio la posta @localmailserver o il BNC¹.

Ovviamente quando sono collegato alla rete interna, il portatile accede a questi senza passare dal router (che ha un’interfaccia a 10Mbit e verrebbe appesantito dalla necessità di effettuare il NAT inverso sull’interfaccia WAN per poter fornire i servizi alle altre macchine), ma se usassi gli indirizzi IP interni poi dovrei riconfigurare da capo
tutti i programmi quando fossi fuori della mia LAN (per esempio a scuola o a casa di amici).

In questo articolo voglio provare a dare una piccola soluzione a questo problema che potrebbe riguardare anche altre persone, utilizzando i servizi forniti da DynDNS, e il server DNS dnsmasq.

Hostname dinamici: perché e come

La prima cosa da fare se si vuole poter fornire servizi all’esterno della propria LAN senza avere bisogno di conoscere in continuazione il proprio IP è utilizzare un hostname dinamico, a meno che non abbiate un IP fisso.

Gli hostname sono nati apposta per poter fornire un identificativo mnemonico per le macchine su internet, ma nell’epoca in cui la maggior parte dei provider forniscono soltanto IP dinamici, i classici hostname sono inutili.

Per questo diversi siti offrono servizi di hostname dinamici, ovvero hostname il cui IP può essere cambiato automaticamente tramite un client, un nome utente e una password.

Per prima cosa, registriamoci su , fino ad avere un nome utente (che sarà per noi, appunto, utente), e una password (che sarà per noi, ancora una volta, password). A questo punto poi potrete registrare un hostname (che per facilità sarà un esempio).

Configurazione del client

Ora installiamo un client, io solitamente utilizzo ddclient, che è disponibile per la maggior parte delle distribuzioni linux e dei sistemi operativi liberi (tra cui OpenBSD dove lo eseguo).

Modifichiamo quindi il file /etc/ddclient.conf, inserendo le seguenti righe:

login=utente
password=password

server=members.dyndns.org 
protocol=dyndns2 
flameeyes.example.net 
wildcard=yes

Notate quest’ultima riga, wildcard=yes, perché è molto importante. In pratica consente di risolvere i domini di quarto livello (come per esempio pippo.flameeyes.example.net) con lo stesso IP configurato sull’hostname di terzo livello. Ora vedremo per cosa ci serve questa opzione.

Una volta che ddclient è configurato, basta semplicemente impostarlo per l’avvio automatico (questo dipende dalla vostra distribuzione / sistema operativo).

Configurazione delle macchine

Una volta configurato l’hostname, dobbiamo iniziare a configurare le macchine. Per fare ciò prima di tutto scegliamo dei nomi per le singole macchine se già non ne hanno. Seguendo i consigli di DJB, i nomi delle macchine dovrebbero essere scelti in modo da essere tra loro simili, e che non vadano ad interferire con le proprie competenze. Io per esempio utilizzo i nomi di astronavi presi da Star Trek.

Una volta che abbiamo deciso i nomi per le varie macchine, possiamo unirli al dominio preso da DynDNS per avere il nome completo delle varie macchine. Per esempio possiamo avere una macchina chiamata defiant che diventa il nome defiant.flameeyes.example.net .

Per configurare le varie macchine abbiamo ora diverse possibilità a seconda di quale distribuzione linux o sistema operativo si usa. Posso quindi solo dare alcuni esempi generali.

Gentoo Linux

In Gentoo Linux per la configurazione di hostname e dominio basta modificare due files.

Il primo è /etc/conf.d/hostname, in cui bisogna semplicemente settare

HOSTNAME="defiant"

Il secondo è /etc/conf.d/domainname, che va modificato in modo da
avere

DNSDOMAINNAME="flameeyes.example.net"

Un riavvio ed è finita.

OpenBSD

In OpenBSD il cambiamento è ancora più semplice, basta eseguire il
comando

echo "defiant.flameeyes.example.net" > /etc/myname

Per finire un riavvio.

Installazione del DNS

A questo punto resta solo la parte più critica: installare e configurare il server DNS in modo da rispondere alle richieste per il nostro nuovo dominio flameeyes.example.net.

Il software che consiglio è dnsmasq. Per una semplice rete casalinga, la sua gestione è semplice ma allo stesso tempo funzionale. Inoltre, è un programma molto leggero e non consuma risorse di alcun genere.

La sua installazione è praticamente banale. Il consiglio è sempre quello di controllare se la propria distribuzione mette a disposizione un pacchetto per dnsmasq, in tal caso, la cosa più semplice è installarlo tramite questa.

Nel caso non sia presente un pacchetto precompilato o un metodo per installare dnsmasq direttamente tramite la propria distribuzione, la sua compilazione e installazione è comunque molto semplice.

Per prima cosa scaricate dal sito l’ultima versione del programma, che al momento è dnsmasq-2.23.tar.gz. A questo punto, basta estrarre i sorgenti e lanciare il comando di compilazione e installazione:

    $ tar zxf dnsmasq-2.23.tar.gz
    $ cd dnsmasq-2.23
    $ gmake
    $ su -
    # gmake install

Nota: se si è sotto Linux, è possibile utilizzare make al posto di gmake; se si è sotto BSD però è necessario utilizzare il make GNU.

Per sistemi basati su RPM, come SuSE e Fedora, è presente nel pacchetto dei sorgenti anche un file rc.d per l’avvio automatico del servizio. Per altre distribuzioni, si faccia riferimento ai pacchetti ufficiali e non.

In ogni caso, per avviare il servizio basta, una volta completata la configurazione spiegata nella prossima sezione, basta eseguire il comando dnsmasq, che entrerà da solo nello stato di daemon preparandosi a ricevere richieste.

Configurazione

Anche la configurazione di dnsmasq è molto semplice, un file di configurazione di esempio è disponibile nel tarball dei sorgenti, ma quello che viene qui riportato è un esempio di configurazione per una rete LAN classica.

    server=8.8.8.8      # server DNS del proprio provider
    local=/flameeyes.example.net/ # considera questo dominio locale
    no-resolv           # non cercare su resolv.conf
    no-poll

A questo punto, basta fornire a dnsmasq le coppie di hostname e indirizzi IP da risolvere. Per fare questo, basta configurare /etc/hosts ponendo gli hostname con un indirizzo fisso:

    127.0.0.1   localhost
    192.168.0.1 defiant.flameeyes.example.net
    192.168.0.2 voyager.flameeyes.example.net
    192.168.0.3 northstar.flameeyes.example.net

dnsmasq leggerà il file per risolvere gli hostname locali, e troverà l’IP a cui risolvere l’hostname fornito. Se l’indirizzo non è locale, dnsmasq rimanderà la richiesta al server specificato, così che sia sempre possibile avere una risposta corretta.

Configurare le macchine

Ovviamente perché le macchine della lan possano sfruttare il servizio offerto da dnsmasq è necessario configurarle per utilizzarlo come server DNS. Per fare ciò, su macchine Unix o Unix-like, basta configurare /etc/resolv.conf come segue:

domain flameeyes.example.net
nameserver 192.168.0.1
nameserver 8.8.8.8

tenendo conto che qui è stato scelto 192.168.0.1 come server DNS su cui gira dnsmasq.

Ora potete provare a pingare l’host voyager, e vedrete che la richiesta sarà verso 192.168.0.2 (sempre se avete settato il file /etc/resolv.con come spiegato prima con l’opzione domain).

¹ Una specie di "proxy" per le connessioni IRC che support anche i log delle conversazioni private quando non si è presenti.

Exit mobile version