Este es un articulo que se comparte con el afán de ofrecer información para la implementación de DNS en la infraestructura de un WISP, sin embargo, no es una recomendación para hacerlo al pie de la letra por lo que la información que se proporciona se espera que sea valiosa para su implementación pero aun así tendrá que hacer su propia investigación, tanto la WISP MX como un servidor no se hacen responsables de malas implementaciones que se realicen utilizando esta información. Algunas referencias para crear este articulo a continuación:
Nombre de dominio espacio y arquitectura
La base de datos distribuida de DNS está indexada por nombres de dominio. Cada nombre de dominio es en realidad una ruta en un gran árbol inverso. Este árbol inverso se denomina espacio de nombre de dominio. Como se muestra en la Figura la profundidad máxima del árbol no puede exceder 127 niveles, y cada nodo en el árbol tiene un máximo de 63 caracteres.

BIND contiene un proceso en segundo plano llamado named y una biblioteca de resolución. El programa del servidor BIND se ejecuta en segundo plano y proporciona servicios a través de puertos conocidos. El puerto estándar de UDP (Protocolo de datagramas de usuario) y TCP (Protocolo de control de transmisión) en DNS suele ser 53, que se configura en /etc/services.
Dominio y nombre de dominio
NS (nameserver) es un programa que almacena información de recursos de nombres de dominio y responde a solicitudes de un programa llamado resolutor, que es similar a un programa cliente. La función básica de NS es proporcionar información de red respondiendo solicitudes de consulta.
Usando el servidor de nombres, toda la red se puede dividir en una estructura jerárquica de dominios. Todo el espacio de nombres de dominio se puede organizar en una estructura de árbol de acuerdo con la división organizacional o la clasificación de gestión. Cada nodo en el árbol se llama dominio , que es una marca.
Cada dominio en el nodo tiene un nombre, y su nombre es el conjunto de todos los indicadores de dominio que comienzan desde la raíz hasta el nodo actual. Desde la perspectiva de la estructura de escritura, se distingue por "." De derecha a izquierda. Solo entonces el logotipo del nombre de dominio puede ser único. Por ejemplo: host.example.com
para resumir:
Cada nodo en el árbol se llama: dominio
El nombre de cada nodo en el árbol se llama nombre de dominio
Herramientas de diagnóstico de análisis DNS
Las principales actualmente son estas 3 herramientas:
dig tiene dos modos de ejecución
- Modo interactivo simple para una solicitud
- Modo por lotes para ejecutar múltiples consultas
gramática:
dig [servidor] [nombre] [tipo]
host
nslookup
Bind comandos de gestión
- named-checkconf. Verifica la sintaxis del archivo named.conf
/home/named/bind/sbin/named-checkconf /home/named/bind/chroot/etc/named.conf
- named-checkzone. El programa verifica la sintaxis y la compatibilidad del archivo host.
/home/named/bind/sbin/named-checkzone nidianwo.com var/named/zone/shidc/nidianwo.com.zone
zone nidianwo.com/IN: cargado serie 2
OK
- rndc (Control remoto o local del damonio named)
Implementación
Para hacer pruebas o simplemente proporcionar funciones básicas, podemos usar la fuente del software, simplemente instalarlo con yum (redhat, series centos), etc.
Si necesita un nivel más profundo de configuración, le recomendamos utilizar el método de instalación desde el paquete origen:
Crear usuario
groupadd named
useradd -g named named
Dependencia
Las dependencias deben instalarse con un usuario administrador
se instalan todas las librerías y dependencias que se necesitan para compilar las fuentes:
yum install wget nano gcc ncurses-devel make gcc-c++ zlib-devel libtool bison \
bison-devel openssl-devel bzip2-devel wget newt-devel subversion flex gtk2-devel patch -y
yum install libcap-ng-devel -y
yum install http://repo.okay.com.mx/centos/7/x86_64/release/okay-release-1-1.noarch.rpm
yum install libuv-devel
La instalación específica debe determinarse de acuerdo con la situación real del servidor, como gcc, openssl, etc., todos son obligatorios.
Descargar bind
Para facilitar el mantenimiento y la configuración posteriores, aquí se usa el método de instalación del paquete fuente
[named@dns3 ~]$ pwd
/home/named
[named@dns3 ~]$ wget https://downloads.isc.org/isc/bind9/9.17.3/bind-9.17.3.tar.xz
Aquí elegimos la versión 9.17.3 (Fecha de este tutorial 2 Agosto 2020)
Instalación
Se pueden agregar los siguientes parámetros de función durante la compilación
--enable-threads | En un entorno de varias CPU, habilite la compatibilidad con varios subprocesos para mejorar el rendimiento
--with-tuning=large | En caso de memoria suficiente (superior a 12G), enciéndalo para mejorar el rendimiento; de lo contrario, no se recomienda encenderlo.
--prefix=<PREFIX> | Ruta de instalación personalizada, debe especificarse durante la instalación de origen.
--with-openssl=<PREFIX>| Si utiliza un openssl personalizado, debe especificarlo. No se requiere una designación adicional para usar la que viene con el sistema.
[named@dns3 ~]$ tar -xvf bind-9.17.3.tar.xz
cd bind-9.17.3
./configure --prefix=/home/named/bind --disable-linux-caps
make
make install
Una vez completada la instalación, se proporcionarán algunas herramientas de depuración en el directorio
[named@dns3 bin]$ pwd;ls
/home/named/bind/bin
arpaname dnssec-cds dnssec-keyfromlabel dnssec-settime host named-checkzone named-rrchecker nsupdate
delv dnssec-dsfromkey dnssec-keygen dnssec-signzone mdig named-compilezone nsec3hash
dig dnssec-importkey dnssec-revoke dnssec-verify named-checkconf named-journalprint nslookup
Agregamos la ruta del directorio de los comandos de administración del sistema necesarios a la ruta del sistema:
[named@dns3 ~]$ nano .bash_profile
Agregamos al archivo:
PATH=/home/named/bind/sbin/:$PATH
export PATH
alias rndc='rndc -c /home/named/bind/chroot/etc/rndc.conf'
[named@dns3 ~]$ source .bash_profile
Configuración
Crear un directorio chroot
[named@dns3 ~]$ mkdir -p /home/named/bind/chroot/{etc,var,log}
[named@dns3 ~]$ mkdir -p /home/named/bind/chroot/var/{run,named}
[named@dns3 ~]$ mkdir -p /home/named/bind/chroot/var/named/{zone,data}
Generamos los archivos de configuración named.conf que es un archivo de configuración principal,
rndc es una herramienta de administración proporcionada después de BIND 9, que incluye la recarga de datos de zona sin reiniciar todo el DNS, verificar el estado y las estadísticas de DNS.
[named@dns3 ~]$ cd /home/named/bind/chroot/etc
[named@dns3 etc]$ /home/named/bind/sbin/rndc-confgen > rndc.conf
[named@dns3 etc]$ sed -n '15,23s/#\ //p' rndc.conf > named.conf
Debido a que rndc puede administrar servidores DNS en profundidad, se requiere cierto control. El método de control es crear una clave (clave rndc) a través de la configuración rndc y escribir la información relacionada con la clave en el archivo de configuración named.conf. ¡Después de iniciar DNS, su DNS puede ser administrado por el comando rndc!
Descargue el archivo name.root (configuración de 13 servidores raíz)
wget ftp://ftp.rs.internic.net/domain/named.root -P /home/named/bind/chroot/var/named/
--2020-08-03 07:37:29-- ftp://ftp.rs.internic.net/domain/named.root
=> “/home/named/bind/chroot/var/named/named.root”
Resolviendo ftp.rs.internic.net (ftp.rs.internic.net)... 69.58.179.79, 198.41.3.79, 217.30.89.79
Conectando con ftp.rs.internic.net (ftp.rs.internic.net)[69.58.179.79]:21... conectado.
Identificándose como anonymous ... ¡Dentro!
==> SYST ... hecho. ==> PWD ... hecho.
==> TYPE I ... hecho. ==> CWD (1) /domain ... hecho.
==> SIZE named.root ... 3312
==> PASV ... hecho. ==> RETR named.root ... hecho.
Longitud: 3312 (3.2K) (probablemente)
100%[=======================================================================================================>] 3 312 --.-K/s en 0.006s
2020-08-03 07:37:33 (510 KB/s) - “/home/named/bind/chroot/var/named/named.root” guardado [3312]
Crear archivo localhost.zone
Este archivo generalmente no se usa, porque esta información se agregará al archivo de hosts locales en el servidor
En la implementación real, no se utilizará. También se explica aquí, y puede usarse si tiene necesidades especiales.
[named@dns3 named]$ pwd
/home/named/bind/chroot/var/named
[named@dns3 named]$ cat localhost.zone
$TTL 86400
@ IN SOA @ root (
1 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS @
IN A 127.0.0.1
IN AAAA ::1
Cree el archivo localhost.rev
Este archivo generalmente no se usa, porque esta información se agregará al archivo de hosts locales en el servidor
En la implementación real, no se utilizará. También se explica aquí, y puede usarse si tiene necesidades especiales.
[named@dns3 named]$ pwd
/home/named/bind/chroot/var/named
[named@dns3 named]$ cat localhost.rev
$TTL 86400
@ IN SOA localhost. root.localhost. (
1 ; Serial
3H ; Refresh
15M ; Retry
1W ; Expire
1D ) ; Minimum
IN NS localhost.
1 IN PTR localhost.
Modifique el archivo de configuración named.conf
[named@dns3 etc]$ pwd
/home/named/bind/chroot/etc
[named@dns3 etc]$ nano named.conf
Contenido de named.conf
key "rndc-key" {
algorithm hmac-sha256;
secret "JHGjhvng/&/ih6qCBAi5D6NFfqvjlt/Ge4duMQU=";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options{
listen-on port 53{
Ipv4_de_Tu_Server;
};
listen-on-v6 port 53{
fe80::266f:72f2:ec0c:4212 ;
};
version "bind 9.17.3";
directory "/home/named/bind/chroot/var/named";
pid-file "/home/named/bind/chroot/var/run/named.pid";
session-keyfile "/home/named/bind/chroot/var/run/session.key";
dump-file "/home/named/bind/chroot/var/named/data/cache_dump.db";
statistics-file "/home/named/bind/chroot/var/named/data/named_stats.txt";
memstatistics-file "/home/named/bind/chroot/var/named/data/named_mem_stats.txt";
recursion yes;
allow-query{
any;
};
allow-query-cache{
any;
};
allow-transfer{
192.168.0.172;
};
notify yes;
also-notify{
192.168.0.172;
};
};
logging {
channel default_debug {
file "/home/named/bind/chroot/log/named.run" versions 10 size 128m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
category queries {
queries_info;
default_debug;
};
channel notify_info {
file "/home/named/bind/chroot/log/notify.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category notify {
notify_info;
default_debug;
};
channel xfer_in_log {
file "/home/named/bind/chroot/log/xfer_in.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
channel xfer_out_log {
file "/home/named/bind/chroot/log/xfer_out.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category xfer-in { xfer_in_log; };
category xfer-out { xfer_out_log; };
};
zone "." in{
type hint;
file "named.root";
};
zone "localhost" in{
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in{
type master;
file "localhost.rev";
allow-update { none; };
};
zone "test.com" IN {
type master;
file "zone/test.com.zone";
};
Nota: Las dos zonas, localhost y 0.0.127.in-addr.arpa, no se agregarán durante la implementación real, sino que se usarán cuando haya necesidades especiales.
Lo anterior es escribir la información de la zona para la prueba. En la implementación real, la parte del archivo de configuración principal relacionada con la zona se reemplaza con la siguiente forma:
include "/home/named/bind/chroot/etc/acls/shidc";
include "/home/named/bind/chroot/etc/acls/hzidc";
include "/home/named/bind/chroot/etc/acls/aliyun-east1";
include "/home/named/bind/chroot/etc/views/shidc";
include "/home/named/bind/chroot/etc/views/hzidc";
include "/home/named/bind/chroot/etc/views/aliyun-east1";
Crear archivos relacionados con la zona
[named@dns3 zone]$ pwd
/home/named/bind/chroot/var/named/zone
[named@dns3 zone]$ cat test.com.zone
$TTL 86400
@ IN SOA test.com. admin.test.com. (
57 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS dns.test.com.
IN MX 5 mail
dns IN A 201.131.200.26
mail IN A 192.168.0.10
www IN A 192.168.0.11
Verifique el archivo de configuración
./named-checkconf /home/named/bind/chroot/etc/named.conf
Verifique los archivos de configuración de zona hacia adelante e inversa
[named@dns3 bin]$ ./named-checkzone localhost /home/named/bind/chroot/var/named/localhost.zone
zone localhost/IN: loaded serial 1
OK
[named@dns3 bin]$ ./named-checkzone 127.0.0.1 /home/named/bind/chroot/var/named/localhost.rev
zone 127.0.0.1/IN: loaded serial 1
OK
Verifique el archivo de configuración de zona personalizada
[named@dns3 bin]$ ./named-checkzone 127.0.0.1 /home/named/bind/chroot/var/named/zone/test.com.zone
zone 127.0.0.1/IN: loaded serial 57
OK
Configuración de sincronización maestro-esclavo
El maestro y el esclavo de Bind, también llamados maestro y esclavo, son en realidad los mismos.
Configuración maestro/maestro
Modifique el archivo de configuración named.conf
Agregue la siguiente configuración en la sección de configuración de opciones:
allow-transfer{
192.168.0.89;
};
notify yes;
also-notify{
192.168.0.89;
};
Lo anterior es la configuración global. Si está configurado para una zona específica, solo necesita configurar los 3 parámetros anteriores en la zona (sin cambios desde el servidor), de la siguiente manera:
zone "test.com" IN {
type master;
file "zone/test.com.zone";
allow-transfer{
192.168.0.89;
};
notify yes;
also-notify{
192.168.0.89;
};
};
Los parámetros agregados son:
- allow-transfer
- notify
- also-notify
Para conocer el significado de estos parámetros, consulte la explicación detallada del archivo de configuración named.conf mas abajo en Explicación detallada del archivo de configuración named.conf
Nota : La sincronización primaria y secundaria de enlace puede ser específica para cada zona, lo que significa que cada zona puede configurar su propio servidor esclavo. Cuando el volumen de datos del nombre de dominio es muy grande, con el fin de mejorar la eficiencia de la resolución y realizar la separación de lectura y escritura, se utiliza un servidor maestro para escribir, y el nombre de dominio se distribuye uniformemente a múltiples servidores esclavos para mejorar la eficiencia de la lectura.
Configuración esclavo
Modifique el archivo de configuración named.conf
Agregue la siguiente configuración en la sección de configuración de zona:
zone "test.com" IN {
type slave;
file "zone/test.com.zone";
masters{
192.168.0.91;
};
};
Parámetros principales que se agregan:
- masters ip de servidor maestro
- type slave designado como servidor esclavo
Nota: El archivo de configuración de zona en el lado esclavo puede no existir de antemano, pero el directorio de almacenamiento correspondiente debe existir
Configuración de autorización de subdominio
Excepto Master/Slave, que requiere varios servidores DNS para proporcionar servicios juntos, si hay una relación de nivel superior y subordinada entre DNS, ¿cómo configurarlo?
En otras palabras, suponiendo que mi alcance de gestión es muy grande, solo quiero ser responsable del DNS de nivel superior, y el nivel inferior espera ser entregado directamente a la persona a cargo de cada unidad o dominio. ¿Cómo configurarlo?
Por lo tanto, bind puede transferir los derechos de administración de cada subdominio al administrador del host designado para administrar. De esta manera, la configuración del nombre de dominio será más flexible y el administrador del servidor DNS de nivel superior no tendrá tanto problema.
La autorización de subdominio no se implementará en nuestra arquitectura actual, pero también se menciona
La configuración de la autorización de subdominio es bastante simple, dividida en dos pasos.
Paso 1. Configuración maestra
Solo necesitamos agregar el registro NS correspondiente y el registro A en el archivo de configuración de zona en el lado maestro (tenga en cuenta que el archivo de configuración de zona no es named.conf)
sub.test.com.com. IN NS dns.sub.test.com.com.
dns.sub.test.com.com. IN A 192.168.100.200
Por lo tanto, después de esto, los nombres de dominio como www.sub.test.com.com., Aaa.sub.test.com.com, etc. serán resueltos por el host 200
Paso 2. Bajar el servidor dns
La configuración del servidor dns de nivel inferior no es nada especial. De acuerdo con la configuración normal, el nombre de dominio en los archivos de configuración named.conf y zone debe establecerse en "sub.test.com.com"
zone "sub.test.com.com" IN {
type master;
file "zone/sub.test.com.com.zone";
};
Configuración de resolución de vistas
De acuerdo con la dirección IP del cliente, se devuelven diferentes registros de resolución de zona, por lo tanto, necesitamos preparar varias configuraciones diferentes para la misma zona
Realizamos las siguientes pruebas de acuerdo con este principio
- Cuando la fuente es el segmento de red 192.168.11.0/24, el registro de análisis devuelto a www.test.com es 192.168.11.80
- Cuando la fuente es todos los segmentos de red distintos de los anteriores, el registro de análisis devuelto a www.test.com es 8.8.8.8
- Crear diferentes archivos de zona para diferentes fuentes.
Comencemos la configuración formal
Agregue esto al archivo de configuración named.conf
La configuración de la vista se divide en 2 pasos, uno es establecer la fuente del cliente, que se establece a través de la lista acl; el otro es editar el bloque de vista:
Lista de acl
acl internal {192.168.11.0/24;};
acl external {!192.168.11.0/24;any;};
! Indica el significado de selección inversa, es decir, negación
La segunda línea en realidad se puede escribir de la siguiente manera
acl external {!"internal";any;};
Cuando hay demasiadas direcciones IP y segmentos de red, puede tomar la forma de importar archivos externos.
El contenido del archivo es el siguiente:
# cat PUEBLANET.acl
acl "PUEBLANET" {
1.0.1.0/24;
1.0.2.0/23;
1.0.8.0/21;
1.0.32.0/19;
1.1.0.0/24;
1.1.2.0/23;
}
El método de configuración named.conf es el siguiente
importar:
include "/home/named/bind/etc/PUEBLANET.acl";
transferir:
view "view_PUEBLANET" {
match-clients {PUEBLANET; };
view - configuración de bloque
view "internal" {
match-clients {"internal";};
zone "." in{
type hint;
file "named.root";
};
zone "localhost" in{
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in{
type master;
file "localhost.rev";
allow-update { none; };
};
zone "test.com" IN {
type master;
file "zone/test.com.zone.int";
};
};
view "external" {
match-clients {"external";};
zone "." in{
type hint;
file "named.root";
};
zone "localhost" in{
type master;
file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in{
type master;
file "localhost.rev";
allow-update { none; };
};
zone "test.com" IN {
type master;
file "zone/test.com.zone.ext";
};
};
Prueba
192.168.11.0/24 desde un host de este segmento.
dig @192.168.11.91 -p 53 www.test.com
;; ANSWER SECTION:
www.test.com. 86400 IN A 192.168.11.80
Desde otro segmento
dig @192.168.11.91 -p 53 www.test.com
;; ANSWER SECTION:
www.test.com. 86400 IN A 8.8.8.8
Registro de acceso al servidor dns
tailf query.log
03-Ago-2020 11:13:11.955 queries: info: client @0x7fcf840be8e0 192.168.11.64#47324 (www.test.com): view internal: query: www.test.com IN A + (192.168.11.91)
27-Ago-2020 11:13:18.323 queries: info: client @0x7fcf840be8e0 192.168.101.35#50891 (www.test.com): view extenal: query: www.test.com IN A +E(0) (192.168.11.91)
Puesta en marcha
Inicio de línea de comando
Al observar el named.8 provisto en el paquete fuente, agregamos los siguientes parámetros al inicio:
-L logfile
Inicie sesión en el archivo de registro de forma predeterminada en lugar del registro del sistema.
-u user
Se establece como usuario después de completar operaciones privilegiadas, como la creación de sockets que escuchan en puertos privilegiados.
Comando de inicio:
root@dns3: /home/named/bind/sbin/named -gc /home/named/bind/chroot/etc/named.conf
Nota:
Aquí debe comenzar en primer plano e iniciar el modo de depuración; si hay un problema, se imprimirá un mensaje de error. Cuando la depuración es normal, el parámetro g necesita ser eliminado.
El contenido del script de inicio es el siguiente:
/home/named/bind/sbin/named -c /home/named/bind/chroot/etc/named.conf
Script de inicio
Debido a que estamos escuchando en un puerto conocido de menos de 1024, el usuario named no tiene permiso por defecto, por lo que nuestro script de inicio se ejecuta para el usuario del sistema. Utilice el parámetro -u para especificar el usuario named en el comando de inicio
En el proceso de uso posterior, los servicios de enlace relacionados son ejecutados por usuarios administradores (la operación de modificación rara vez se ve involucrada, porque las operaciones posteriores como la sobrecarga de configuración se completan usando rndc)
El contenido del script de inicio es el siguiente:
[named@dns3 bin]$ cat /etc/init.d/named
#!/bin/sh
# chkconfig: - 86 14
# Source function library.
. /etc/rc.d/init.d/functions
user="named"
exec="/home/named/bind/sbin/named"
prog="named"
config="/home/named/bind/chroot/etc/named.conf"
#[ -e /usr/local/named/etc/sysconfig/$prog ] && . /usr/local/named/etc/sysconfig/$prog
lockfile=/var/lock/subsys/named
start() {
#[ -x $exec ] || exit 5
[ -e $config ] || exit 6
echo -n $"Starting $prog: "
daemon $exec -c $config -u $user
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading $prog: "
killproc $prog -1
retval=$?
echo
return $retval
}
force_reload() {
restart
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status &>/dev/null
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
restart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
exit 2
esac
exit $?
Prueba de funcionamiento
Usamos el comando dig para probar
[named@dns3 bin]$ /home/named/bind/bin/dig @ip_de_tu_server -p 53 www.test.com
; <<>> DiG 9.17.3 <<>> @xxx.xxx.xxx.xxx -p 53 www.test.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64952
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: d220266da6193a85010000005f295e7302fe64ba2daa365e (good)
;; QUESTION SECTION:
;www.test.com. IN A
;; ANSWER SECTION:
www.test.com. 86400 IN A 192.168.0.11
;; Query time: 0 msec
;; SERVER: xxx.xxx.xxx.xxx.#53(xxx.xxx.xxx.xxx)
;; WHEN: mar ago 04 08:11:15 CDT 2020
;; MSG SIZE rcvd: 85
Monitor
Monitoreo obligatorio desde varios aspectos
- Puertos 53 y 953
- ¿Es normal la función de análisis?
- ¿Es normal la sincronización maestro-esclavo?
Use zabbix para implementar el monitoreo, luego el contenido de esta plantilla de monitoreo es el siguiente:
Resumen de enlace
Existen los siguientes comandos de administración en bind
Comando rndc
El comando rndc es una gran herramienta para administrar el dns, necesitamos dominarlo, esta parte registrará las operaciones comunes
Veamos primero su salida de ayuda:
[named@dns3 bind]$ rndc -h
Una breve explicación
Visión general
rndc (Remote Name Domain Controllerr) es una herramienta para la administración remota de bind. A través de esta herramienta, puede comprender el estado operativo actual del servidor de forma local o remota, y también puede apagar, recargar, actualizar el caché, agregar y eliminar zonas, etc.
Use rndc para actualizar los datos sin detener el servidor DNS para que el archivo de configuración modificado sea efectivo.
En situaciones reales, el servidor DNS está muy ocupado y cualquier pausa a corto plazo afectará el uso del usuario. Por lo tanto, el uso de la herramienta rndc puede hacer que el servidor DNS sirva mejor a los usuarios. Antes de usar rndc para administrar el enlace, debe usar rndc para generar un par de archivos clave, la mitad de los cuales se almacenan en el archivo de configuración rndc y la otra mitad en el archivo de configuración maestro de enlace. La ruta predeterminada del archivo de configuración rndc es /etc/rndc.conf. En CentOS o RHEL, la clave rndc se almacena en el archivo /etc/rndc.key. rndc escucha de manera predeterminada en el puerto 953 (TCP). De hecho, rndc se puede usar de forma predeterminada en bind9 y no es necesario configurar un archivo de clave.
Cuando rndc está conectado al servidor DNS, debe autenticarse mediante un certificado digital en lugar del método tradicional de nombre de usuario / contraseña. En la versión actual de rndc y named, el único algoritmo de autenticación compatible es HMAC-MD5, que utiliza una clave compartida en ambos extremos de la conexión. Proporciona autenticación de tipo TSIG para solicitudes de comando y respuestas del servidor de nombres. Todos los comandos enviados a través del canal deben estar firmados por un key_id conocido por el servidor. Para generar una clave reconocida por ambas partes, puede usar el comando rndc-confgen para generar la clave y la configuración correspondiente, y luego colocar estas configuraciones en los archivos de configuración named.conf y rndc rndc.conf.
Comandos comunes
Comandos de uso frecuente rndc:
- status # Mostrar estado del servidor Mostrar información de bind
- reload # Recargar el archivo de configuración y las zonas
- reload zone [class [view]] #Volver a cargar una sola zona
- reconfig # Recargar archivo de configuración y nuevas zonas solamente
- flush [view] # Vaciar todas las cachés del servidor
- stats # Escriba información de estadísticas del servidor en el archivo de estadísticas (la ruta del archivo de estadísticas se define en el archivo de configuración named.conf)
- dumpdb # Volcar el caché a un archivo de volcado (la ruta del archivo se define en el archivo de configuración named.conf)
- zonestatus zone [class [view]] # Muestra el estado actual de una zona
- notify zone [class [view]] # Reenviar mensajes de NOTIFICACIÓN para la zona.
Caso real
status. Muestra el estado de ejecución de bind
[named@dns3 bind]$ rndc status
version: BIND 9.17.3 (Development Release) <id:079e9ba> (bind 9.12.3)
running on dns3.blacom.net: Linux x86_64 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018
boot time: Tue, 04 Aug 2020 13:01:43 GMT
last configured: Tue, 04 Aug 2020 13:01:43 GMT
configuration file: /home/named/bind/chroot/etc/named.conf
CPUs found: 4
worker threads: 4
UDP listeners per interface: 4
number of zones: 103 (99 automatic)
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is ON
recursive clients: 0/900/1000
tcp clients: 0/150
TCP high-water: 0
server is up and running
reload. Recarga el contenido de una sola zona.
[named@dns3 bind]$ rndc reload test.com IN shidc
zone reload up-to-date
Simplemente notifique la información de cierta zona
[named@dns3 bind]$ rndc notify test.com IN shidc
El registro de casos con el siguiente comando:
[named@dns3 bind]$ rndc notify test.com IN hzidc
Reciba esta notificación del nodo, verifique el número de serie y descubra que es el mismo que el actual, por lo que terminará con: "la zona está actualizada".
- Actualizar los datos en caché de una vista
[named@dns3 bind]$ rndc flush shidc
Explicación detallada del archivo de configuración named.conf
Configuración general
include "/path/file"; # Carga archivos externos
key "rndc-key" {
# configuración relacionada con rndc
};
controls {
# configuración relacionada con rndc
};
options{
# Configuración global
}
logging{
# Configuración de registro
}
zone "zone name" IN {
# Configuración de zona (nombre de dominio)
}
view. el archivo de configuración
acl acl_name1 {192.168.11.0/24;}; #lista de acl, utilizada para llamadas posteriores, esta parte generalmente se coloca en la parte superior
acl acl_name2 {!192.168.11.0/24;any;};
include "/path/file"; # Cargar archivos externos
key "rndc-key" {
# configuración relacionada con rndc
};
controls {
# configuración relacionada con rndc
};
options{
# Configuración global
}
logging{
# Configuración de registro
}
view "view_name1" {
match-clients {"acl_name1";}; # Definir el segmento de red que coincide con la vista
zone "zone name" IN {
# Configuración de zona (nombre de dominio)
}
}
view "view_name2" {
match-clients {"acl_name2";}; # Defina la zona de red que coincide con view
zone "zone name" IN {
# Zone (domain name) configuration.
}
}
# Nota: Después de usar view, todas las zonas deben incluirse En el bloque de vista
Tomemos el siguiente archivo de configuración para ilustrar el caso
[named@dns3 etc]$ pwd
/home/named/bind/chroot/etc
[named@dns3 etc]$ cat named.conf
key "rndc-key" {
algorithm hmac-sha256;
secret "hskjdhaksdhakjh//KHKhi5D6NFfqvjlt/Ge4duMQU=";
};
controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { "rndc-key"; };
};
options{
listen-on port 53{
201.131.200.26;
};
listen-on-v6 port 53{
fe80::266f:72f2:ec0c:4212;
};
version "bind 9.17.3";
directory "/home/named/bind/chroot/var/named";
pid-file "/home/named/bind/chroot/var/run/named.pid";
session-keyfile "/home/named/bind/chroot/var/run/session.key";
dump-file "/home/named/bind/chroot/var/named/data/cache_dump.db";
statistics-file "/home/named/bind/chroot/var/named/data/named_stats.txt";
memstatistics-file "/home/named/bind/chroot/var/named/data/named_mem_stats.txt";
recursion yes;
allow-query{
any;
};
allow-query-cache{
any;
};
allow-transfer{
192.168.101.172;
};
notify yes;
also-notify{
192.168.101.172;
};
/* Path to ISC DLV key */
bindkeys-file "/home/named/bind/chroot/etc/named.iscdlv.key";
managed-keys-directory "/home/named/bind/chroot/var/named/dynamic";
};
logging {
channel default_debug {
file "/home/named/bind/chroot/log/named.run" versions 10 size 128m;
severity dynamic;
print-category yes;
print-severity yes;
print-time yes;
};
channel queries_info {
file "/home/named/bind/chroot/log/query.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category queries {
queries_info;
default_debug;
};
channel notify_info {
file "/home/named/bind/chroot/log/notify.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category notify {
notify_info;
default_debug;
};
channel xfer_in_log {
file "/home/named/bind/chroot/log/xfer_in.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
channel xfer_out_log {
file "/home/named/bind/chroot/log/xfer_out.log" versions 10 size 128m;
severity info;
print-category yes;
print-severity yes;
print-time yes;
};
category xfer-in { xfer_in_log; };
category xfer-out { xfer_out_log; };
};
include "/home/named/bind/chroot/etc/acls/shidc";
include "/home/named/bind/chroot/etc/acls/hzidc";
include "/home/named/bind/chroot/etc/acls/aliyun-east1";
include "/home/named/bind/chroot/etc/views/shidc";
include "/home/named/bind/chroot/etc/views/hzidc";
include "/home/named/bind/chroot/etc/views/aliyun-east1";
Aquí la configuración de un cierto acl
[named@dns3 etc]$ cat /home/named/bind/chroot/etc/acls/shidc
acl shidc {
10.11.0.0/16;
# omita los segmentos de red restantes, el formato es el mismo
};
Aquí la configuración de un view determinado.
[named@dns3 etc]$ cat /home/named/bind/chroot/etc/views/shidc
view "shidc" {
match-clients {"shidc";};
zone "." in{
type hint;
file "named.root";
};
zone "blacom.com.mx" IN {
type master;
file "zone/shidc/blacom.com.mx.zone";
};
# Aquí se omiten muchas secciones de configuración de zona
};
Nota: Cada línea en el archivo de configuración debe terminar con;, {} debe tener espacios en ambos lados.
acl
La lista de control de acceso solo se puede usar después de definirla, por lo general, acl se debe definir en la parte superior de named.conf
Además de la acl definida por nosotros mismos, hay 4 acls integradas en bind:
- any: cualquier host
- none: ningún host
- local: el host anfitrión
- localnet: la red donde se encuentra la máquina
include
include “/path/file”;
Importar archivos relacionados. Con el fin de mantener el perfil del archivo de configuración principal, generalmente cargamos una gran sección de archivos de configuración utilizando el método de inclusión. Acl, view, zone, etc. se pueden cargar utilizando el método de include.
key+controls
Definir la configuración relacionada de los comandos de administración rndc
Como vimos en la sección de configuración al iniciar del post, el comando rndc-confgen se utilizó para generar el archivo rndc. Después de la generación, debe copiar la información de contraseña completa y otra información en el archivo de configuración principal
algorithm hmac-sha256;
Algoritmo clave
secret "hskjdhaksdhakjh//KHKhi5D6NFfqvjlt/Ge4duMQU=";
La clave
Inet 127.0.0.1 puerto 953
El servicio rndc escucha en el puerto 953 de esta máquina
allow { 127.0.0.1; } keys { "rndc-key"; };
Solo se permite el acceso a la máquina local, y la información de contraseña de autenticación utilizada es la previamente definida: rndc-key
opciones
Esta parte define principalmente la información central general
listen-on port 53 {};
Red IPv4: especifique el puerto y la dirección IP que proporcionan el servicio dns (muchos servidores pueden tener múltiples tarjetas de red)
listen-on-v6 port 53 {};
Red IPv6: especifique el puerto y la dirección IP que proporcionan servicios dns (muchos servidores pueden tener múltiples tarjetas de red)
version “version”;
Bind información de versión
directory “file_path”;
Directorio de almacenamiento de archivos de zona
pid-file “file_path”;
Ruta del archivo pid
session-keyfile “file_path”;
configuración de seguridad de dns
dump-file “file_path”;
Cuando se ejecuta el comando rndc dumpdb, el servidor almacena el nombre de la ruta del archivo de la base de datos.
statistics-file
Al usar el comando rndc stats, el servidor agregará la información estadística al nombre de la ruta del archivo. Si no se especifica, el valor predeterminado es named.stats en el directorio actual del programa del servidor.
memstatistics-file “file_path”;
Cuando se cierra el servicio, las estadísticas de uso de memoria se escribirán en este archivo
forwarders {};
Debe configurarse cuando se configura como servidor de reenvío, configure la IP del servidor ascendente en {}
recursion yes;
Active la función recursiva. Cuando el nombre de dominio solicitado no es el nombre de dominio que es responsable de resolver (es decir, no hay una configuración de zona correspondiente), en este momento, conviértase en un cliente DNS, envíe una solicitud al servidor raíz y obtenga el registro de resolución antes de regresar Cliente.
En caso afirmativo, y una consulta DNS requiere recursividad, entonces el servidor hará todo el trabajo que pueda responder a la solicitud de consulta. Si la recursividad está desactivada y el servidor no conoce la respuesta, devolverá una respuesta de referencia. El valor predeterminado es sí. Tenga en cuenta que establecer la recursividad en no; no impide que los usuarios obtengan datos de la memoria caché del servidor, solo evita que los datos nuevos se almacenen en caché como resultado de una consulta. El funcionamiento interno del servidor aún puede afectar el contenido de la memoria caché local, como la consulta de dirección NOTIFY.
allow-recursion {};
Permitir lista blanca recursiva, usar con recursividad yes arriba.
allow-query-cache {};
Permitir quién puede consultar, es decir, definir la fuente de recepción de solicitudes. Cuando se establece en cualquiera, significa que se pueden recibir todas las solicitudes de dominio
allow-transfer {};
Establezca qué host permite la transferencia de dominio con el servidor local. Permitir transferencia también se puede establecer en la declaración de zona, de modo que la opción permitir transferencia en las opciones globales no funcionará aquí. Si no se establece, el valor predeterminado es permitir la transferencia de dominio con todos los hosts
Generalmente definimos el segmento de red del nodo esclavo
allow-update {};
Permite actualizar dinámicamente la lista blanca de host de archivos de datos, generalmente establecida en none
notify yes;
En caso afirmativo (predeterminado), cuando un servidor autorizado modifica un dominio, se envía el mensaje NOTIFICACIÓN DNS. Esta información se enviará a los servidores que figuran en el registro NS del dominio (a excepción del servidor de nombres de dominio primario indicado por SOA MNAME) y a los servidores que figuran en la opción de notificación también.
Si es explícito, la notificación solo se enviará a los servidores enumerados en also-notify.
Si es no, no se enviará ningún mensaje.
Nota: La opción de notificación también se puede configurar en la declaración de zona, por lo que reemplaza la declaración de notificación en las opciones.
- also-notify {};
Defina una lista de direcciones IP del servidor de nombres de dominio utilizadas globalmente. Cada vez que se transfiere un nuevo archivo de dominio al sistema, el servidor de nombres de dominio enviará información de NOTIFICACIÓN a estas direcciones y los registros NS en estos dominios. Esto ayuda a que el archivo de dominio actualizado converja y se sincronice en el servidor de nombres de dominio relevante lo antes posible.
La lista de notificación también se puede configurar en una declaración de zona, luego la declaración de notificación en las opciones globales se invalidará aquí.
Cuando una declaración de notificación de zona se establece en no, el sistema no enviará mensajes de NOTIFICACIÓN a las direcciones IP en la lista global de notificación también. El estado predeterminado es una lista vacía (sin lista de notificación global).
logging
La declaración de registro establece una variedad de opciones de registro para el servidor de nombres de dominio. Su frase de canal corresponde al modo de salida, las opciones de formato y el nivel de clasificación, y su nombre puede usarse con la frase de categoría para definir diversa información de registro.
Solo se puede usar una declaración de registro para definir múltiples canales y categorías.
En BIND9, la configuración de registro se ejecuta solo después de leer todo el archivo de configuración. En BIND8, la parte de registro se lee y luego se ejecuta. Cuando se inicia el servidor, toda la información de registro sobre los errores de sintaxis en el archivo de configuración se transfiere al canal predeterminado (canal), o la opción "-g" se usa para especificar la conversión al error estándar.
channel
Todos los registros se enviarán a uno o más canales; puede definir todos los canales que desee. La definición de cada canal debe incluir una oración de propósito, utilizada para determinar la información de canal relacionada seleccionada, se enviará a un archivo, a una herramienta especial de syslog, a un flujo de error estándar, o se ignorará. También puede limitar arbitrariamente el nivel de información que el canal puede aceptar (el valor predeterminado es info) y definir si se incluye una marca de tiempo generada por named o si se incluye el nombre y el nivel de la clasificación (el valor predeterminado es no incluir ningún contenido).
Cuando la cláusula de destino es null, toda la información enviada al canal se descartará; en ese caso, otras opciones de canal no tienen sentido.
Cuando la cláusula de destino es file, el contenido del canal se enviará a un archivo de disco. Puede incluir el tamaño del archivo y cuántas versiones del archivo se pueden guardar.
Si utiliza la opción de archivo de registro de versions, named conservará automáticamente varias versiones de archivos de registro. Por ejemplo, si elige guardar las tres versiones antiguas del archivo lamers.log, cuando se abra, lamers.log.1 cambiará de nombre a lamers.log.2 y lamers.log.0 cambiará de nombre a lamers.log.1, lamers.log pasó a llamarse lamers.log.0. También puede configurar la versión ilimitada, para que no haya límite para la versión de copia de seguridad.
Si la opción de size está configurada para el archivo de registro, el sistema cambiará el nombre solo cuando el archivo exceda el tamaño establecido. Por defecto, no se almacenan archivos de respaldo; todos los archivos de registro existentes simplemente se agregan. La opción de size de archivo se usa para limitar el crecimiento del registro. Si el archivo excede el límite y no hay una opción de versión, named dejará de escribir en el archivo. Si se mantiene la versión de la copia de seguridad, el archivo de la copia de seguridad se nombra como se describe anteriormente y luego se crea un nuevo archivo. Si no hay una opción de versiones y no hay otro mecanismo para eliminar o reducir el archivo de registro, el sistema no continuará escribiendo datos en el registro. El estado predeterminado no limita el tamaño del archivo.
La cláusula de propósito de syslog es apuntar el canal al registro del sistema. Su parámetro es un prefijo syslog, como se describe en la ayuda de syslog. Cómo syslog procesa la información con estos prefijos, consulte la información de ayuda de syslog.conf.
La cláusula de gravedad funciona como "prioridades" en syslog. La única diferencia es que los usuarios pueden escribir directamente en un archivo en lugar de usar syslog para escribir en un archivo. El canal no seleccionará información inferior al nivel de gravedad; se aceptará información con un nivel de gravedad alto.
Si el usuario usa syslog, la prioridad de syslog.conf también determinará qué pasará eventualmente. Por ejemplo, si la facilidad y la gravedad del canal se definen como daemon y depuración, no solo registrará la información daemon.warning a través de syslog.conf. Esto último hará que se descarte la información de que la gravedad es información y aviso. Si la situación es la opuesta, named solo registrará información de advertencia o de nivel superior, mientras que syslogd registrará toda la información del canal.
La cláusula de propósito stderr envía el canal al flujo de error estándar del servidor. Se utiliza cuando el servidor se ejecuta en primer plano, por ejemplo, cuando está en modo de depuración, el servidor puede proporcionar información de depuración enriquecida. Si el nivel de depuración global del servidor (nivel de depuración global) es mayor que 0, se activará el modo de depuración. El nivel de depuración global se puede establecer estableciendo el parámetro "-d" más un número positivo al iniciar named o ejecutar rndc trace. Si desea desactivar el modo de depuración, establezca el nivel de depuración global en 0 o ejecute rndc notrace. Toda la información de depuración en el servidor tiene un nivel de depuración, y el nivel de depuración más alto proporciona una salida más detallada.
Si se usa el parámetro print-time, también se registrarán la fecha y la hora. print-time también se puede configurar para el canal syslog, pero debido a que syslog también imprime la fecha y la hora, en general, esto no tiene sentido. Si se establece el parámetro de categoría de impresión, también se registrará la categoría de la información. Si se establece el parámetro de severidad de impresión, también se registrará el nivel de severidad de la información. Las opciones print-xxx se pueden combinar de varias maneras, y el formato de salida único está en este orden: tiempo, clasificación y gravedad.
El canal default_debug tiene una naturaleza especial: produce resultados solo cuando el nivel de depuración del servidor no es 0. En general, escribirá el archivo named.run en el directorio de trabajo del servidor. Por razones de seguridad, cuando se usa el parámetro "-u" en las opciones de la línea de comando, el archivo named.run solo se generará cuando se use el nuevo UID para el named. La información de depuración generada por el startup named y ejecutándose como root Será descartado. Si el usuario necesita estos resultados, debe ejecutar el servidor con el parámetro "-g" y redirigir el error estándar a un archivo.
Una vez que se define un canal, no se puede redefinir. De esta manera, no puede modificar los canales integrados, pero puede modificar los registros de registro predeterminados señalando la clasificación a los canales que ha definido.
category
Aquí hay muchas categorías, y los usuarios pueden definir los registros que desean ver o no quieren ver de acuerdo con sus necesidades. Si no asigna una categoría a ciertos canales, la información de registro de esta categoría se enviará al canal de categoría predeterminado. Si el usuario no establece una categoría predeterminada, el sistema utilizará el siguiente "default":
category "default" { "default_syslog"; "default_debug"; };
Como ejemplo, suponga que desea registrar eventos de seguridad en un archivo, pero también desea mantener el archivo de registro predeterminado. Es mejor configurarlo de la siguiente manera:
channel "my_security_channel" {
file "my_security_file";
severity info;
};
category "security" {
"my_security_channel";
"default_debug";
};
# Para descartar toda la información de una categoría, puede establecer el canal nulo:
category "xfer-out" { "null"; };
category "notify" { "null"; };
La siguiente es una breve descripción de las categorías y descripciones concisas relacionadas utilizadas aquí. Para obtener más información, consulte el manual del administrador de bind9 provisto por el sitio web oficial

view
La configuración del segmento de view es relativamente simple, principalmente dividida en dos partes, podemos verla directamente a través del caso anterior:
- Utilice match-clients para hacer coincidir la fuente de ip
- La zone a analizar se coloca en el bloque de view, después de hacer coincidir la fuente, los datos del archivo de zona correspondiente se utilizarán para responder a la solicitud.
zone
La zona puede existir sola o incluida en la vista, y el formato de configuración es el mismo sin importar de qué manera.
type master;
El campo de type indica las responsabilidades de la tarea del servidor actual. El type puede ser:
- hint. Rol de la raíz
- master. El papel maestro. Puede responder a la solicitud de resolución del nombre de dominio. El origen de datos es un archivo de zona local.
- slave. Puede responder a la solicitud de resolución del nombre de dominio. No utilice sus propios datos, la fuente de datos son datos de zona sincronizados desde el maestro
- forward. No responda directamente a las solicitudes de resolución de nombres de dominio. Después de recibir la solicitud, la reenviará directamente al servidor ascendente configurado
Archivo de configuración zone detallado
$TTL 86400
@ IN SOA test.com. admin.test.com. (
57 ; serial
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
IN NS dns.test.com.
IN MX 5 mail
dns IN A 192.168.0.49
mail IN A 192.168.0.10
www IN A 192.168.0.11
$TTL 86400
El tiempo de espera de caché de los registros de recursos, para simplificar la configuración de los registros RR, de modo que podamos mover el TTL al frente y configurarlo de manera uniforme, lo que equivale a un valor predeterminado aquí, que tiene efecto para todos los registros
La unidad es s, por ejemplo, aquí hay 86400 segundos, que es un día.
@
El símbolo en la primera columna representa el nombre de dominio correspondiente a la zona, por ejemplo, escrito en test.com.zone, @ representa test.com. (Tenga en cuenta que no está determinado por el nombre, sino por la configuración en named.conf)
SOA
Si tiene varios servidores DNS para administrar el mismo nombre de dominio, es mejor usar el método maestro/esclavo para la administración.
SOA se relaciona principalmente con la zona. Habrá un total de siete parámetros después de SOA. Los significados de estos siete parámetros son:
Parte 2 de este articulo aqui:
https://foro.wisp.mx/d/4-implementacion-de-servidor-dns-maestro-esclavo-wisp-parte-2
Es posible que necesite estar registrado como socio Wisp para tener acceso al articulo.