MySQL DNS · 5 min read · Oct 02, 2025

Esecuzione di un server DNS basato su MySQL: MyDNS

Questo è un “copia e incolla” HowTo! Il modo più semplice per seguire questo tutorial è utilizzare un client della riga di comando/client SSH (come PuTTY per Windows) e semplicemente copiare e incollare i comandi (eccetto dove devi fornire informazioni proprie come indirizzi IP, nomi host, password,…). Questo aiuta a evitare errori di battitura.

Esecuzione di un server DNS basato su MySQL: MyDNS

Versione 1.0
Autore: Falko Timme
Ultima modifica: 01/02/2006

In questo tutorial descriverò come installare e configurare MyDNS, un server DNS che utilizza un database MySQL come backend invece di file di configurazione come, ad esempio, Bind o djbdns. Questo ha il vantaggio che puoi facilmente utilizzare interfacce web per amministrare i tuoi record DNS. Potresti persino scrivere la tua interfaccia, ad esempio utilizzando PHP, per interagire con il database MyDNS. MyDNS legge semplicemente i record dal database e non deve essere riavviato/ricaricato quando i record DNS cambiano o le zone vengono create/modificate/eliminate! Questo è un grande vantaggio.

Mostrerò anche come impostare un server DNS secondario, ma non utilizzerò normali trasferimenti di zona per ottenere i record dal server DNS primario a quello secondario; invece, utilizzerò la replica del database MySQL. Replicherò semplicemente i dati dal server primario a quello secondario.

Ci sono molte interfacce web per MyDNS. Naturalmente, puoi utilizzare phpMyAdmin per l’amministrazione di MyDNS, oppure puoi utilizzare l’interfaccia web fornita con MyDNS (che non è per principianti perché manca delle descrizioni dei campi), oppure puoi utilizzare MyDNSConfig, uno strumento scritto da me. Mostrerò come installare ciascuno di essi.

Tutto sommato, MyDNS mi fa una buona impressione e penso che il futuro appartenga ai servizi che utilizzano un database come backend invece di file di configurazione.

Ho utilizzato un sistema Debian Sarge per questa configurazione. Tuttavia, la maggior parte dei passaggi descritti qui dovrebbe applicarsi anche ad altre distribuzioni come Fedora, SuSE, Mandriva, ecc.

Voglio dire prima che questo non è l’unico modo per impostare un tale sistema. Ci sono molti modi per raggiungere questo obiettivo, ma questo è il modo che scelgo. Non rilascio alcuna garanzia che questo funzionerà per te!

1 Installa MySQL e MyDNS

Prima di tutto, assicurati di avere un’installazione base di Debian funzionante, come descritto in https://www.howtoforge.com/perfect_setup_debian_sarge e https://www.howtoforge.com/perfect_setup_debian_sarge_p2 (si prega di fare riferimento al rispettivo documento “Perfect Setup” su HowtoForge se si utilizza un’altra distribuzione).

Quindi installa MySQL:

apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin

Ti verranno poste alcune domande:

Abilitare suExec? <– Sì
Quale server web desideri riconfigurare automaticamente? <– apache, apache2
Vuoi che riavvii apache ora? <– Sì

Imposta una password root per MySQL in questo modo:

mysqladmin -u root password yourrootsqlpassword

L’installazione di MyDNS è semplice. Segui semplicemente questi passaggi:

cd /tmp/
wget http://mydns.bboy.net/download/mydns-1.0.0.tar.gz
tar xvfz mydns-1.0.0.tar.gz
cd mydns-1.0.0/
./configure
make
make install

Ora dobbiamo creare il database MyDNS (chiamato mydns) e un utente del database MyDNS (anch’esso chiamato mydns, con mydns_password come password):

mysql -u root -p
Inserisci la password:

Ora, nella shell di MySQL, creiamo il database mydns e l’utente mydns:

CREATE DATABASE mydns;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.
TO ‘mydns’@’localhost’ IDENTIFIED BY ‘mydns_password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON mydns. TO ‘mydns’@’localhost.localdomain’ IDENTIFIED BY ‘mydns_password’;
FLUSH PRIVILEGES;
quit;

Tornando alla shell normale, creiamo le tabelle nel database mydns:

mydns –create-tables | mysql -u root -p mydns
Inserisci la password:

Se vedi errori come questi:

mydns[14287]: errore nel caricamento gid per il gruppo nobody' mydns[14287]: utilizzo gid 65534 dall'utentenobody’

non preoccuparti, puoi dimenticartene.

Successivamente, aggiungiamo due colonne in più alla tabella soa del database mydns:

mysql -u root -p
Inserisci la password:
ALTER TABLE mydns.soa ADD COLUMN active ENUM(‘Y’,’N’) NOT NULL;
ALTER TABLE mydns.soa ADD INDEX (active);
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;
quit;

Con la colonna active, puoi semplicemente abilitare/disabilitare le zone in seguito, e la colonna xfer può essere utilizzata per i trasferimenti di zona (che non ci servono perché utilizzeremo la replica del database MySQL per ottenere i dati al server DNS secondario, ma lo menziono per completezza) (se desideri utilizzare i trasferimenti di zona invece della replica del database, allora la colonna xfer dovrebbe contenere uno o più indirizzi IP separati da virgole. Questi indirizzi IP saranno autorizzati a trasferire la zona.).

Ora creiamo il file di configurazione di MyDNS /etc/mydns.conf eseguendo questo comando:

cd /tmp/mydns-1.0.0/
make conf

Quindi modifichiamo /etc/mydns.conf in modo che appaia così:

| ## ## /etc/mydns.conf ## Ven 21 Ott 16:36:32 2005 ## Per ulteriori informazioni, vedere mydns.conf(5). ## # INFORMAZIONI SUL DATABASE db-host = localhost # Nome host del server SQL db-user = mydns # Nome utente del server SQL db-password = mydns_password # Password del server SQL database = mydns # Nome del database MyDNS # OPZIONI GENERALI user = nobody # Esegui con i permessi di questo utente group = nogroup # Esegui con i permessi di questo gruppo listen = * # Ascolta su questi indirizzi ('*' per tutti) # OPZIONI CACHE zone-cache-size = 1024 # Numero massimo di elementi memorizzati nella cache delle zone zone-cache-expire = 60 # Numero di secondi dopo i quali le zone memorizzate scadono reply-cache-size = 1024 # Numero massimo di elementi memorizzati nella cache delle risposte reply-cache-expire = 30 # Numero di secondi dopo i quali le risposte memorizzate scadono # ESOTERICA log = LOG_DAEMON # Struttura da utilizzare per l'output del programma (LOG_*/stdout/stderr) pidfile = /var/run/mydns.pid # Percorso del file PID timeout = 120 # Numero di secondi dopo i quali le query scadono multicpu = 1 # Numero di CPU installate nel sistema allow-axfr = no # Dovrebbe essere abilitato AXFR? allow-tcp = yes # Dovrebbe essere abilitato TCP? ignore-minimum = no # Ignorare il TTL minimo per la zona? soa-table = soa # Nome della tabella contenente i record SOA rr-table = rr # Nome della tabella contenente i dati RR |

Assicurati di compilare i dettagli corretti del database e fai attenzione anche al gruppo. Su Debian, il gruppo di nobody è nogroup, che è diverso dal valore predefinito in /etc/mydns.conf (anch’esso nobody), quindi assicurati di cambiare questo! Imposta anche allow-tcp su yes.

Ora creiamo lo script di init di MyDNS /etc/init.d/mydns:

| #! /bin/sh # # mydns Avvia il server MyDNS # # Autore: Falko Timme <[email protected]>. # set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=mydns DAEMON=/usr/local/sbin/$NAME DESC="Server DNS" SCRIPTNAME=/etc/init.d/$NAME # Esci gentilmente se il pacchetto è stato rimosso. test -x $DAEMON || exit 0 case "$1" in start) echo -n "Avvio di $DESC: $NAME" $DAEMON --background echo "." ;; stop) echo "Arresto di $DESC: $NAME." kill -9 `pidof $NAME` &> /dev/null ;; restart) echo "Riavvio di $DESC: $NAME." $0 stop && sleep 1 $0 start ;; *) echo "Uso: $SCRIPTNAME {start|stop|restart}" >&2 exit 1 ;; esac exit 0 |

Quindi rendiamolo eseguibile e avviamo MyDNS:

chmod 755 /etc/init.d/mydns
/etc/init.d/mydns start

Se desideri che MyDNS venga avviato automaticamente durante l’avvio del sistema, devi creare i collegamenti necessari per l’avvio del sistema. Su Debian, lo fai in questo modo:

update-rc.d mydns defaults 21 22

Su Fedora o RedHat, esegui questo:

chkconfig –levels 235 mydns on

Share: X/Twitter LinkedIn

Ricevi i nuovi post nella tua casella di posta.

Nessuno spam. Disiscriviti in qualsiasi momento.