Últimamente he notado que el servidor tarda algo más en responder las peticiones de dominios, por lo que he supuesto que se podría utilizar las bondades de bind para crear una cache en el propio servidor, ahorrando un tiempo valioso en petición de resoluciones. Notese que solo hará de caché local, no es el ámbito de este tutorial explicar cómo configurar tus dominios, cnames, etc…
Esta solución es aplicable a cualquier sistema debian, ubuntu o derivados, aunque la configuración debería valer para cualquier distribución de GNU/Linux.
En primer lugar, evidentemente, instalamos el servicio:
# aptitude install bind9
Cargamos con un editor el archivo de opciones de bind
# pico /etc/bind/named.conf.options
Para editarlo tal y como se debe:
acl recurseallow { 127.0.0.1; XX.XX.XX.XX; YY.YY.YY.YY; };
options {
forwarders { Z1.Z1.Z1.Z1; Z2.Z2.Z2.Z2; };
allow-recursion { recurseallow; };
directory “/var/cache/bind”;
allow-query { localhost; };
listen-on { 127.0.0.1; };
query-source port 53;
auth-nxdomain no;
forward only;
};
OJO: Al copiar el texto anterior, algunas consolas sustituyen las comillas ( ” ) por puntos ( . )
En rojo lo que debes cambiar, donde:
XX.XX.XX.XX > La ip externa de tu equipo/servidor
YY.YY.YY.YY > Otra ip desde donde quieras que se pueda consultar a tu servidor, útil si tienes IP FailOver
Z1.Z1.Z1.Z1 > DNS más cercano a tu equipo/servidor, aconsejable el de tu ISP
Z2.Z2.Z2.Z2 > DNS secundario a la que hará las consultas, recomendable poner alguno tipo OpenDNS o GoogleDNS
Modificamos el fichero de resolución
# pico /etc/resolv.conf
Para que la máquina solo haga consultas a sí misma, con esta simple línea:
nameserver 127.0.0.1
De estar en un servidor en producción, sería aconsejable añadir las líneas search y domain, para más info, man resolv.conf
Reiniciamos el servidor bind
# /etc/init.d/bind9 restart
Y comprobamos el tiempo en un dominio que no hayamos visitado nunca, la primera vez, sin cache:
# time nslookup bleh.com
Server: 127.0.0.1
Address: 127.0.0.1#53Non-authoritative answer:
Name: bleh.com
Address: 208.113.234.221real 0m0.210s
user 0m0.008s
sys 0m0.008s
Y la segunda vez, ya con la caché:
# time nslookup bleh.com
Server: 127.0.0.1
Address: 127.0.0.1#53Non-authoritative answer:
Name: bleh.com
Address: 208.113.234.221real 0m0.023s
user 0m0.004s
sys 0m0.004s
Como se puede observar, la resolución ha pasado de las 0.2 décimas a las 0.02, una diferencia bastante apreciable en lo que a servidores se refiere, aunque a nosotros no nos lo parezca.
La misma prueba, con dig, primero sin cache:
# dig uclm.es
; <<>> DiG 9.6.1-P2 <<>> uclm.es
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19576
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;uclm.es. IN A;; AUTHORITY SECTION:
uclm.es. 10800 IN SOA dns1.uclm.es. hostmaster.uclm.es. 2010030300 86400 7200 2592000 172800;; Query time: 25 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 7 06:25:23 2010
;; MSG SIZE rcvd: 77
Y seguídamente, con cache:
# dig uclm.es
; <<>> DiG 9.6.1-P2 <<>> uclm.es
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 42920
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0;; QUESTION SECTION:
;uclm.es. IN A;; AUTHORITY SECTION:
uclm.es. 10765 IN SOA dns1.uclm.es. hostmaster.uclm.es. 2010030300 86400 7200 2592000 172800;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Sun Mar 7 06:25:58 2010
;; MSG SIZE rcvd: 77
Aquí la consulta se reduce en 20 milisegundos, unas cifras bastante óptimas.
Puesto que se va a tratar de un sistena de cache, no tiene sentido que cada poco tiempo esté consultando de nuevo a los servidores DNS reales, por lo que dejaremos la base de datos tal y como viene por defecto, pero dejo los parámetros por si más adelante pasamos a un servidor en producción y queremos bajar los tiempos de consulta.
# pico /etc/bind/db.local
Donde
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
@ IN AAAA ::1
Medidas, así a ojo:
1800 > 30 minutos
21600 > 6 horas
86400 > 1 día
604800 > 1 semana
2419200 > 1 mes
¿Qué sugieres para mejorar la configuración de seguridad en bind?

