DDNS Server with Bind9 (and Webmin) – PT1

La problematica è molto semplice.
A casa ho un ip dinamico. Voglio raggiungere casa con un indirizzo, ma voglio realizzare da me tutta l’infrastruttura necessaria.
Ho a disposizione una macchina virtuale con un ip pubblico statico (che sarà la mia macchina dns) e una macchina linux a casa sempre accesa (che poi sarà un Mikrotik).

Per prima cosa mi sono documentato su cosa sia necessario per ottenere il mio obiettivo.
Google mi ha aiutato a colmare alcune lacune che avevo in merito alla teoria dei DNS. Le letture sono state davvero tante, non posso riportare i link per un motivo molto semplice. Non li ho segnati da nessuna parte.
Non è necessario, la teoria su dns, bind, nsupdate, nslookup ecc.. si trova sempre ovunque.

Per comodità ho installato sulla macchina virtuale debian e webmin.
In una manciata di minuti la macchina era pronta ed ho potuto fare accesso a webmin per configurare il dns tramite l’interfaccia grafica.
Voci di corridoio: Perchè webmin? Potevi fare tutto da riga di comando.
Io: Perchè a volte l’interfaccia grafica ci và. A volte il cliente la vuole. E mi è sembrato un buon momento per provarla.

Veniamo al dunque.. Ecco i passaggi.

  1. In webmin mi sono configurato la zona dns che mi interessava (noip.nomedominio.it) in modo da avere poi dei record del tipo casa.noip.nomedominio.it, casa2.noip.nomedominio.it, casa3.noip.nomedominio.it ecc.. (in realtà mi fermo a casa.noip.nomedominio.it.. è già tanto averne una! 😀 ).
  2. Sono entrato in SSH sulla macchina dns (/etc/bind/) ed ho dato il seguente comando (TSIG key):
     dnssec-keygen -a hmac-md5 -b 128 -n HOST noip.nomedominio.it.

    Nota importante. Ho provato anche con una chiave a 512, ma non funzionava.
    Sarebbe opportuno capire perchè, ma non è una cosa che al momento mi interessa più di tanto.

  3. Il comando successivo è stato il seguente:
     less Knoip.nomedominio.it.+157+31299.key

    che restituisce una riga del tipo:

    noip.herotech.it. IN KEY 512 3 157 ns7T/bv+smJ6Gd9Y2EwdhQ==
  4. In webmin sotto “BIND DNS Server” -> “Global Server Options” ho cliccato su “DNS Keys” ed ho creato una chiave che ha come ID “noip.nomedominio.it.”, algorithm “hmac-md5” e secret “ns7T/bv+smJ6Gd9Y2EwdhQ==”.
  5. Sono poi entrato, sempre in webmin, nella zona noip.nomedominio.it ed ho cliccato su “Edit Zone Options”.
    Quì, in “allow updates from”, ho inserito “key noip.nomedominio.it.”
    Fatto questo ho cliccato “Apply zone” ed “Apply configuration”.
  6. Per testare il tutto ho dato il seguente comando:
     nsupdate -k /etc/bind/Knoip.nomedominio.it.+157+31299.private -v /tmp/nsupdate.txt

    dove il contenuto del file nsupdate.txt è il seguente:server localhost

     debug yes
    zone noip.herotech.it.
    update add casa.noip.nomedominio.it. 300 A 8.8.4.4
    show
    send
  7. Fatto questo ho notato che da webmin non vedevo questo record.
    Dopo una breve lettura ho scoperto che:

    Zones that are under dynamic control via nsupdate or a DHCP server should not be edited by hand. Manual edits could conflict with dynamic updates and cause data to be lost.

    E quindi l’unico modo di vedere i record gestiti tramite nsupdate è di effettuare un transfer della zona dando il seguente comando sul terminale.

    dig @dns.nomedominio.it noip.nomedominio.it -t AXFR

Arrivato a questo punto, direi che ho le basi per far evolvere il servizio.
Manca un client che effettua le richieste di modifica della zona DNS ed una serie di script che permettono la gestione del tutto.
Ma questo lo vedrò in un secondo momento!

 

Pagine web che mi hanno aiutato o che mi aiuteranno (forse) in questa impresa:

http://jpmens.net/2010/09/28/performing-dynamic-dns-updates-on-your-dns/

http://linux.die.net/man/8/nsupdate

http://www.kirya.net/articles/running-a-secure-ddns-service-with-bind/

http://andrwe.org/linux/own-ddns