djbdns
Abril 16th, 2008
Hola samigos!
He aqui un nuevo capitulo hoygan orientado a los techies. Hoy: configuracion de djbdns en FreeBSD (actually en cualquier unix-like supongo).
Por que djbdns? Sencillamente porque bind es demasiado lento, inseguro, y bastante complejo de configurar si lo comparamos con el tinydns, el server dns del “paquete” djbdns. DJB por Daniel J. Bernstein, un personaje realmente “poco conocido” pero muy importante del mundillo informatico, los invito a que lean un poco sobre el si no lo conocen, basta con decir que es el autor del qmail como carta de presentacion inicial.
Lamentablemente si bien hay utilidades para el djbdns dentro del /usr/ports, no hay un port propiamente dicho para este software, asi que debemos bajarlo en formato .tar.gz:
(ttyp0:21:42 xx@hoyganventures:~)$ wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
El proximo paso es descomprimirlo:
(ttyp0:21:45 xx@hoyganventures:~)$ tar zxf djbdns-1.05.tar.gz
(ttyp0:21:45 xx@hoyganventures:~)$ cd djbdns-1.05
(ttyp0:21:45 xx@hoyganventures:~/djbdns-1.05)$
Y a compilar:
(ttyp0:21:45 xx@hoyganventures:~/djbdns-1.05)$ su -
Password:
(ttyp0:21:45 root@hoyganventures:~/djbdns-1.05)# make setup check
Como resultado, tendremos instalados los siguientes files:
/usr/local/bin/dnscache-conf
/usr/local/bin/tinydns-conf
/usr/local/bin/walldns-conf
/usr/local/bin/rbldns-conf
/usr/local/bin/pickdns-conf
/usr/local/bin/axfrdns-conf
/usr/local/bin/dnscache
/usr/local/bin/tinydns
/usr/local/bin/walldns
/usr/local/bin/rbldns
/usr/local/bin/pickdns
/usr/local/bin/axfrdns
/usr/local/bin/tinydns-get
/usr/local/bin/tinydns-data
/usr/local/bin/tinydns-edit
/usr/local/bin/rbldns-data
/usr/local/bin/pickdns-data
Por ahora solo nos interesan tinydns-conf y tinydns. Este ultimo es el servidor dns y pueden elegir distintas maneras de ejecutarlo, existen las daemontools y tambien pueden armar su propio script de runlevels o incluso dejarlo en un .sh aparte, es cuestion de gustos. Se puede integrar perfectamente con los servicios de init de freebsd tomando el esqueleto de algun otro daemon. Sean creativos y prolijos
Si eligen ejecutarlo sin los daemontools, deben tener algunas variables de entorno como IP, UID, GID, y ROOT, ahora van a ver que valores van a tomar, no se impacienten. Continuo:
(ttyp0:21:51 root@hoyganventures:~/djbdns-1.05)# tinydns-conf
tinydns-conf: usage: tinydns-conf acct logacct /tinydns myip
Este programejo nos genera el tree de directorios necesarios (y algunos files) que el tinydns necesita en un home que nosotros especifiquemos. Tambien se encarga de los chown y chmod necesarios para que los permisos sean los correctos de acuerdo al usuario que elijamos. Por default freebsd trae un user para usar con un daemon de dns, se llama bind y tiene uid 53 (doh..), asi que podemos usar ese:
(ttyp0:21:51 root@hoyganventures:~/djbdns-1.05)# mkdir /etc/dns
(ttyp0:21:51 root@hoyganventures:~/djbdns-1.05)# tinydns-conf bind bind /etc/dns/server 0.0.0.0
De esta manera genermos un tree para el tinydns dentro de /etc/dns/server, configurado por default para utilizar el usuario bind para ejecutarse y para utilizar archivos de logs (argumentos bind, bind). Por default el server escuchara en todas las direcciones ip disponibles (0.0.0.0).
(ttyp0:21:55 root@hoyganventures:/etc/dns/server)# cd /etc/dns/server
(ttyp0:21:55 root@hoyganventures:/etc/dns/server)# ls -las
total 12
2 drwxr-sr-t 5 root wheel 512 Apr 15 03:03 .
2 drwxr-xr-x 4 root wheel 512 Jan 15 2001 ..
2 drwxr-sr-x 2 root wheel 512 Jan 15 2001 env
2 drwxr-sr-x 3 root wheel 512 Jan 15 2001 log
2 drwxr-sr-x 2 root wheel 512 Apr 16 03:13 root
2 -rwxr-xr-x 1 root wheel 95 Jan 15 2001 run
lo que nos importa por ahora es el directorio root dentro del home del tiny:
(ttyp0:21:55 root@hoyganventures:/etc/dns/server)# ls -las root
total 34
2 drwxr-sr-x 2 root wheel 512 Apr 16 03:13 .
2 drwxr-sr-t 5 root wheel 512 Apr 15 03:03 ..
2 -rw-r–r– 1 root wheel 44 Jan 15 2001 Makefile
2 -rwxr-xr-x 1 root wheel 77 Jan 15 2001 add-alias
2 -rwxr-xr-x 1 root wheel 79 Jan 15 2001 add-childns
2 -rwxr-xr-x 1 root wheel 76 Jan 15 2001 add-host
2 -rwxr-xr-x 1 root wheel 74 Jan 15 2001 add-mx
2 -rwxr-xr-x 1 root wheel 74 Jan 15 2001 add-ns
4 -rw-r–r– 1 root wheel 3366 Apr 16 03:13 data
14 -rw-r–r– 1 root wheel 12801 Apr 16 03:13 data.cdb
Los add-* son scripts de shell que nos facilitan agregar datos, los cuales son agregados al archivo data, que es un file comun de texto. Luego de hacer cambios utilizamos el Makefile haciendo un make, para generar un archivo binario, el data.cdb.
(ttyp0:21:55 root@hoyganventures:/etc/dns/server)# cd root
(ttyp0:21:56 root@hoyganventures:/etc/dns/server)# ./add-ns localhost 127.0.0.1
(ttyp0:21:57 root@hoyganventures:/etc/dns/server)# ./add-ns 0.0.127.in-addr.arpa 127.0.0.1
Esto genera lineas de texto en el archivo data:
.localhost:127.0.0.1:a:259200
.0.0.127.in-addr.arpa:127.0.0.1:a:259200
Los 259200 indican el tiempo de validez del registro en segundos para los dns cache (cabe mencionar que estos cache no estan obligados a respetarlos y de hecho no lo hacen). La letra ‘a’ indica que es un ns primario, si fuese una letra ‘b’ seria secundario, etc.
De esta forma agregamos dos registros a nuestro dns: un nameserver para el dominio localhost con ip 127.0.0.1 y un nameserver para el dominio 0.0.127.in-addr.arpa con el mismo ip. Este ultimo es el reverse lookup de la clase C 127.0.0
(ttyp0:21:57 root@hoyganventures:/etc/dns/server)# ./add-host localhost 127.0.0.1
(ttyp0:21:57 root@hoyganventures:/etc/dns/server)# ./add-mx localhost 127.0.0.1
(ttyp0:21:57 root@hoyganventures:/etc/dns/server)# ./add-alias hoyganhost 127.0.0.1
En el archivo data:
=localhost:127.0.0.1:86400
@localhost:127.0.0.1:a::86400
+localhost:127.0.0.1:86400
En orden, estamos agregando un registro para el fqdn localhost, con ip 127.0.0.1, un ip que se encarga del mail, tambien 127.0.0.1, y un host extra de nombre hoyganhost, alias de localhost, de ip 127.0.0.1.
Nota: Un ip solo puede tener UN fqdn asignado, es decir que una vez hecho el add-host para un ip, los demas nombres deben ser agregados mediante add-alias.
Otra nota: con add-childns podemos delegar el dominio a otro dns server, no es nuestro caso, pero:
(ttyp0:21:57 root@hoyganventures:/etc/dns/server)# ./add-childns otrodomain.com 1.1.1.1
Entonces:
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-ns hoyganventures.com 127.0.0.1
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-ns hoyganventures.com 127.0.0.2
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-host ns1.hoyganventures.com 127.0.0.1
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-host ns2.hoyganventures.com 127.0.0.2
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-alias www.hoyganventures.com 127.0.0.1
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-alias mail.hoyganventures.com 127.0.0.2
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# ./add-mx hoyganventures.com 127.0.0.2
(ttyp0:21:58 root@hoyganventures:/etc/dns/server)# make
De esta forma hacemos los insert de registros. Como se borran? Editan el archivo data, borran lo necesario y ejecutan make para regenerar el data.cdb. NO es necesario restartear el tinydns
hermoso eh?
SPF:
Para poder tener un registro spf implementado en tinydns, esta pagina los va a ayudar, y si son muy peresos, tienen que editar el archivo data y poner algo como:
:hoyganventures.com:16:\016v=spf1\040mx\040-all:86400
para autorizar a los mx como senders.
Creo que fue todo, uds diran.
saludos!



