Tabla de Contenidos
Instalación de djbdns (sólo instalar el paquete, no queda ningún servicio activo)
Primero hay que hacer lo siguiente:
# bajo el paquete
cd ${HOME}/soft
wget http://cr.yp.to/djbdns/djbdns-1.05.tar.gz
# abro el paquete
tar xvzf djbdns-1.05.tar.gz
cd djbdns-1.05
# modifico error.h para que compile con los glibc nuevos
sed -i.ORI -es/^extern\ int\ errno\;/#include\ \<errno.h\>/ error.h
# actualizo el listado de root name servers
mv dnsroots.global dnsroots.global.ORI
for server in `host -t ns . | awk '/name server/ { print $4 ; }'`
do
host -t a $server
done | awk '/has address/ { print $4 ; }' | sort > dnsroots.global
# compilo e instalo
make
sudo make setup check
man pages
# bajo las manpages
cd ${HOME}/soft
wget http://smarden.org/pape/djb/manpages/djbdns-1.05-man.tar.gz
tar xvzf djbdns-1.05-man.tar.gz
cd djbdns-man
for ext in 1 5 8 ; do
gzip *.${ext}
sudo cp -v *.${ext}.gz /usr/share/man/man${ext}
done
Creación de grupo y usuarios para resolver y server
sudo addgroup --system dns
# creo un usuario para el logger
sudo adduser --system --ingroup dns --disabled-login --no-create-home \
--home /nonexistent --gecos "dns logger" dnslog
# creo un usuario para el resolver (dnscache)
sudo adduser --system --ingroup dns --disabled-login --no-create-home \
--home /nonexistent --gecos "dns resolver" dnsresolver
# creo un usuario para el name server (tinydns), acá con un home propio
sudo adduser --system --ingroup dns --disabled-login --no-create-home \
--home /nonexistent --gecos "dns server" dnsserver
Configuración de un resolver local (dnscache)
Este resolver sólo se puede usar en el equipo local
# creo un directorio para colgar todos los servicios de djbdns y el logs sudo mkdir -pv /etc/djbdns /var/log/djbdns # configuro el directorio de servicio y el log automáticamente sudo dnscache-conf dnsresolver dnslog /etc/djbdns/dnscache sudo ln -s /etc/djbdns/dnscache/log/main /var/log/djbdns/dnscache
levantar el servicio
# asegurarse de que no haya nada escuchando el port DNS en localhost # y arrancar el servicio: sudo ln -s /etc/djbdns/dnscache /service
Probar que funcione la resolución local de nombres
resolvconf
Si se está utilizando el paquete resolvconf, va a convenir modificar el run script:
## Creamos el patchfile cat > /tmp/dnscacherunscript.patch <<EOF --- run.orig 2007-11-30 14:38:42.000000000 -0300 +++ run 2007-11-30 14:56:14.000000000 -0300 @@ -1,6 +1,11 @@ #!/bin/sh +RESOLVCONF=yes exec 2>&1 exec <seed +if [ "X$RESOLVCONF" != "Xno" ] && [ -x /sbin/resolvconf ] ; then + echo "nameserver 127.0.0.1" | /sbin/resolvconf -a lo.named +fi + exec envdir ./env sh -c ' exec envuidgid dnsresolver softlimit -o250 -d "$DATALIMIT" /usr/local/bin/dnscache ' EOF ## lo aplicamos cd /etc/djbdns/dnscache sudo patch -V simple -z .ORIG < /tmp/dnscacherunscript.patch
Si no se utiliza el resolvconf, simplemente editar el archivo /etc/resolv.conf, eliminar las líneas nameserver que haya y dejar sólo una línea así:
nameserver 127.0.0.1
Configuración de un resolver público (dnscache)
Este resolver se puede usar desde otros equipos (pero tienen que estar habilitados en la configuración)
# creo un directorio para colgar todos los servicios de djbdns y los logs
sudo mkdir -pv /etc/djbdns /var/log/djbdns
# configuro el directorio de servicio y el log automáticamente
# PONER ACÁ LA IP DONDE SE DARÁ EL SERVICIO
MYIP=10.98.76.54
sudo dnscache-conf dnsresolver dnslog /etc/djbdns/dnscachepub ${MYIP}
sudo ln -s /etc/djbdns/dnscachepub/log/main /var/log/djbdns/dnscachepub
levantar el servicio
# asegurarse de que no haya nada escuchando el port DNS en ${MYIP}
# y arrancar el servicio:
sudo ln -s /etc/djbdns/dnscachepub /service
redes aceptadas
Por default, dnscache no acepta queries desde hosts remotos. Si por ejemplo se desea habilitar a la red 192.168.1.0/24 para que pueda consultar al dnscache, se hace:
sudo touch /etc/djbdns/dnscachepub/root/ip/192.168.1
Para habilitarlo para que se puedan hacer queries desde cualquier lado, la solución más fácil es hacer:
sudo touch `seq -f "/etc/djbdns/dnscachepub/root/ip/%g" 0 255`
Esto creará los archivos /app/dnscachepub/root/ip/0, /app/dnscachepub/root/ip/1, ... /etc/djbdns/dnscachepub/root/ip/254 y /etc/djbdns/dnscachepub/root/ip/255, lo cual es suficiente.
Configuración de un nameserver autoritativo (tinydns)
# creo un directorio para colgar todos los servicios de djbdns y los logs
sudo mkdir -pv /etc/djbdns /var/log/djbdns
# configuro el directorio de servicio y el log automáticamente
# PONER ACÁ LA IP DONDE SE DARÁ EL SERVICIO
MYIP=10.98.76.54
sudo tinydns-conf dnsserver dnslog /etc/djbdns/tinydns ${MYIP}
sudo ln -s /etc/djbdns/tinydns/log/main /var/log/djbdns/tinydns
levantar el servicio
# asegurarse de que no haya nada escuchando el port DNS en ${MYIP}
# y arrancar el servicio:
sudo ln -s /etc/djbdns/tinydns /service
.