Appunti di sviluppo e varie

BIND Dns Autoritativo su Ip Dinamico

Come detto qualche giorno fa (anche un mese e mezzo è composto di giorni :D ) ecco la ricettina per avere i dns che fanno puntare su un ip dinamico il vostro dominio di secondo livello.
Ingredienti:

  • un dominio di secondo livello registrato a vostro nome
  • un “mantainer” che vi permetta di specificare i dns per il vostro dominio
  • un pc possibilmente sempre acceso e che sappia l’IP che volete assegnare al dominio
  • il pacchetto bind
  • un dominio dinamico di terzo livello di quelli gratuiti (DynDNS no-ip o quel che volete)
  • uno script per fare l’update dell’ip dinamico sopra citato

Il tutto va amalgamato in maniera abbastanza semplice:
passo 1:
registratevi due domini di terzo livello. Per questo esempio useremo fakedns1.no-ip.org e
fakedns1.no-ip.org. I nomi non sono assolutamente importanti, quindi sbizzarritevi (o se ne avete già usateli tranquillamente).
Configurate un qualche script per tenere aggiornati questi domini. Su Gentoo uso noip-updater

serverillo3#emerge noip-udater
...
serverillo3#noip2
rispondere alle domande .....

A quel punto lo script si arrangia e siete a posto, con un downtime massimo ipotetico lungo quanto l’intervallo di aggiornamento dato allo script (normalmente 5 minuti).

Passo2:
Registrate un dominio presso un mantainer che vi permetta di specificare i dns da usare.
pegaso hosting lo permette.
Indicate in quel caso come dns 1 e 2 fakedns1.no-ip.org e
fakedns1.no-ip.org. Corrispondono alla stessa macchina quindi sembra idiota indicarne due, ma tant’è.

In questa maniera le richieste DNS per ilvostrodominio.net verranno instradate verso i server DNS autoritativi per quel dominio, ossia fakedns1.no-ip.org e fakedns1.no-ip.org. :)

passo 3:
Installate BIND

serverillo3#emerge bind

Editiamo adesso /etc/bind/named.conf e /etc/bind/pri/ilvostrodominio.net.zone
nel primo mettiamo la configurazione del demone:

cut....
zone "ilvostrodominio.net." IN {
	type master;
	file "pri/ilvostrodominio.net.zone";
};
....cut

Ovviamente DOVETE abilitare le richieste esterne, altrimenti il vostro server DNS non risponderà :)

nel secondo mettiamo la configurazione per il vostrodominio

$TTL 1M
ilvostrodominio.net.	IN SOA	fakedns1.no-ip.org. ilvostroindirizzo.gmail.com. (
					2008081312	; serial
					5M		; refresh
					5M		; retry
					5M		; expiry
					1M )		; minimum

ilvostrodominio.net. IN NS fakedns1.no-ip.org.
ilvostrodominio.net. IN NS fakedns2.no-ip.org.

;Riga da cambiare con uno script messo in cron
ilvostrodominio.net.	IN A  111.222.222.111
;Fine riga da cambiare

www.ilvostrodominio.net. IN CNAME ilvostrodominio.net.
ftp.ilvostrodominio.net. IN CNAME ilvostrodominio.net.
mysql.ilvostrodominio.net. IN CNAME ilvostrodominio.net.

poche avvertenze:
quando cambiate qualcosa nel file di configurazione della zona DOVETE cambiare il seriale (2008081312 nell’esempio) ad un numero SUPERIORE.
L’indirizzo 111.222.222.111 è ovviamente finto e va sostituito con il vostro reale indirizzo ossia quello cui puntano fakedns1.no-ip.org e fakedns1.no-ip.org.

Passo 4:

serverillo3#/etc/init.d/named reload

e tutto dovrebbe funzionare :)

Prima parte dello script di aggiornamento della zona

#!/bin/bash

# Ottieni l'indirizzo da checkip.dyndns.org
wget checkip.dyndns.org -q -O tmpIndirizzo.html
# Strippalo delle parti non necessarie e mettilo in una variabile
NUOVOIP=`grep Current tmpIndirizzo.html | cut -d \: -f 2 |cut -d \  -f2|cut -d \< -f1`
# Recupera il valore attuale
IPCORRENTE=`cat /var/run/ipcorrente`
#Creiamo un nuovo seriale da mettere nella zona
SERIALE=`date +%Y%m%H%m`

# Li confrontiamo e se diversi aggiorniamo l'attuale
if [ $NUOVOIP != $IPCORRENTE ]
then

# ----8<---------------
# Qui andrà inserita la seconda parte dello script

  echo "Va aggiornato a $NUOVOIP"
  echo "E il seriale va messo a $SERIALE"
  echo $NUOVOIP > /var/run/ipcorrente

#
# ---->8---------------

else
  echo "Rimane $IPCORRENTE"
  echo "E il seriale non va cambiato"

fi

Questa parte si rende “solo” conto del fatto che l’ip sia cambiato o meno.
Prima del primo giro bisogna creare “/var/run/ipcorrente” con un touch

Questa sotto invece è la seconda e ultima parte dello script

  echo "Va aggiornato a $NUOVOIP"
  echo "E il seriale va messo a $SERIALE"
  sed -i 's/\b[0-9]\{10\}\b/'$SERIALE'/g' /etc/bind/pri/ilvostrodominio.net.zone
  sed -i 's/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/'$NUOVOIP'/g' /etc/bind/pri/ilvostrodominio.net.zone 

  echo $NUOVOIP > /var/run/ipcorrente
  /etc/init.d/named reload

Spero sia utile a qualcuno.
Eventualmente mandatemi una mail a
motosauro chiocciola gmail punto com
con ringraziamenti e/o insulti :D

2 Responses to “BIND Dns Autoritativo su Ip Dinamico”

  1. Stefano Says:

    Ciao,
    ho letto e seguito con interesse il tuo tutorial per fare il bind con un ip dinamico.
    Ho seguito tutto alla lettera e il bind9 sembra configurato a dovere, il problema pero’ ce l’ho con i dns.
    Come mantainer ho godaddy. Il problema e’ che non riesco a far puntare ai server dns da me creati ns1 e ns2 il mio ip dinamico.
    Questo perche’ viene accettato come campo di destinazione un ip numerico e non il dns alias che mi sono creato con dyndns…
    Come posso ovviare a tutto cio’? Hai un’idea?
    Grazie mille
    Stefano

  2. motosauro Says:

    Purtroppo se non puoi specificare un dominio come dns autoritativo e sei costretto a mettere un ip le soluzioni non sono molte (ci sono però)

    Presumendo che tu non voglia cambiare mantainer passando ad uno che ti permetta di specificare il DNS come dominio puoi fare quanto segue:
    * Vedere se godaddy mette a disposizione delle API per aggiornare i dns autoritativi (la vedo molto improbabile come cosa, ma val la pena chiedere).
    * Loggarti a mano sul sito di godaddy e cambiare manualmente l’ip del DNS autoritativo tenendolo allineato col tuo (o cmq con quello su cui fai puntare l’alias di dyndns)
    * Trovare qualcuno con un ip statico che ti faccia da relay
    * Usare i servizi di gestione dns di no-ip o dyndns o simili, però questi sono a pagamento (intorno ai $25 all’anno) …

    Se provi a sentire Godaddy riguardo la possibilità di aggiornare l’ip tramite API e ti dicono che è possibile si fa uno scriptino in 5 minuti :)

    P.S.
    Godaddy mette a disposizione delle API per i rivenditori, ovviamente non sono quelle che ti interessano