Estaba usando con éxito un archivo de zona pequeño (20,000 entradas) con bind9
servidor, pero hoy mi proveedor de datos envió una actualización que provocó que el archivo de zona tuviera más de 300 000 entradas (más de 30 Mb).
El problema es que el servidor no comenzaría con este archivo de zona. El named-checkconf
no reportaría ningún error. No hay mensajes de registro disponibles (o no pude registrarlos correctamente).
Me gustaría saber si bind9
es capaz de manejar grandes archivos de configuración y, en caso afirmativo, ¿cómo lo soluciono? Si no, me gustaría saber si hay alguna solución para este problema. ¿Tal vez sea posible almacenar entradas en una base de datos?
El archivo de zona que estoy tratando de usar se puede descargar desde aquí.
Actualización:
service bind9 status
mostró alguna información que puede ser relevante:
adjusted limit on open files from 4096 to 1048576
found 1 CPU, using 1 worker thread
using 1 UDP listener per interface
using up to 4096 sockets
loading configuration from '/etc/bind/named.conf'
No estoy muy seguro de cómo interpretar o usar esta información... ¿Alguna idea?
Además, no pude encontrar dónde bind9
los registros se encuentran:/var/log/
no tiene bind9
entradas. ¿Alguien puede decirme dónde se encuentran en Debian Jessie?
Respuesta aceptada:
He visto su archivo de zona:parece ser una lista de más de 350k dominios, en este momento, donde está definido el servidor BIND local como maestro. Los dominios tienen el siguiente formato:
zone "xxxx.com" { type master; notify no; file "null.zone.file"; };
Según los requisitos de memoria, diría que, como cifra aproximada, es posible que necesite alrededor de 40 MB a 80 MB de RAM libre para eso, ya que las tablas de dominio se cargan en la memoria. (aunque me sentiría más cómodo con al menos 200 MB)
A menos que el servidor esté severamente restringido en RAM, parece un poco improbable, pero podría suceder.
También he notado que hay guiones bajos ("_") en el nombre de varios dominios. Tener guiones bajos en DNS RR rompe un par de RFC (RFC 952 y RFC 1123), y debe agregar a la sección de opciones BIND la directiva:
check-names master ignore;
En cuanto al formato y el método que se utiliza para la lista negra de dominios. Desde la versión 9.8 en adelante, BIND admite lo que se conoce como Zonas de política de respuesta (RPZ), que se crearon específicamente para incluir dominios en listas negras.
Varios proveedores de listas negras (comerciales) siguen hoy en día ese formato. (Yo mismo uso RPZ tanto en el trabajo como en casa).
Usar RPZ debería tener más sentido y también significa una carga más liviana, por lo que si está pagando el servicio, le aconsejo que se comunique con su proveedor para saber cómo usarlo. El formato RPZ también admite, hasta cierto punto, comodines, lo que significaría un archivo de lista negra mucho más pequeño.
Una alternativa también es procesar el archivo con un script para modificarlo al formato RPZ.
Relacionado:¿Qué hace que se envíen varias señales?Dejaré aquí enlaces relevantes sobre RPZ y proveedores oficiales de RPZ:
https://dnsrpz.info
y un tutorial de cómo configurar RPZ:
http://www.zytrax.com/books/dns/ch9/rpz.html
Como habrás notado, con la configuración actual, también tendrás muchos archivos abiertos; por lo tanto, recomiendo nuevamente usar RPZ.
Para manejar más archivos abiertos, en servidores de correo electrónico, DNS o HTTP de gran tamaño, los límites a menudo deben elevarse.
La situación no es tan mala como solía ser con kernels más antiguos, pero sin embargo recomiendo aumentar los límites.
Edite /etc/sysctl.conf
y modificar/añadir la directiva fs.file-max
para el límite global de archivos abiertos:
fs.file-max=500000
Para aplicar el nuevo límite de archivos sin reiniciar, debe ejecutar:
sudo sysctl -p
Y para los límites de archivos por proceso, edite, /etc/security/limits.conf
:
* - nofile 400000
Para aplicar los límites de archivos por proceso, cierre la sesión e inicie sesión, o ejecute:
sudo ulimit -n 400000
Después de aumentar estos dos límites, debe reiniciar BIND:
sudo service bind9 restart
Para convertir su archivo al formato RPZ, ejecute:
cat bind | tr -d " | awk ' { print $2" CNAME ." } ' > /etc/bind/rpz.db
El script convertirá las entradas al siguiente formato:
zeus.developershed.com CNAME .
zeusclicks.com CNAME .
zintext.com CNAME .
Agregue en la sección de opciones de named:
response-policy { zone "rpz"; };
Crear la declaración de la zona RPZ:
zone "rpz" {
type master;
file "/etc/bind/rpz.db";
};
Añadir a la parte superior de /etc/bind/rpz.db
archivo:
$TTL 604800
@ IN SOA localhost. root.localhost. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS your_dns_fqdn.
Desconfigure ese archivo DNS suyo y reinicie su servidor BIND. Evidentemente, el archivo RPZ puede optimizarse con comodines y acortarse mucho más, sin embargo, incluso sin esa optimización, ahora no necesitará tantos archivos abiertos.
En cuanto a la consulta de registros BIND/DNS, se encuentran junto con los registros del sistema en /var/log/syslog
con la etiqueta named
. Puedes usar el comando:
sudo grep named /var/log/syslog