BIND¶
Acá hay algunas notas sobre Bind pero no mucho más.
Esta guía parte a partir de la instalación del paquete
bind9
en Debian, versión 9.10.3.
Para iniciar/parar el servidor:
service bind9 status
service bind9 start
service bind9 stop
service bind9 restart
service bind9 reload
General¶
Inicialmente existen los siguientes archivos en /etc/bind/
:
bind.keys
.db.0
.db.127
.db.255
.db.empty
.db.local
.db.root
.named.conf
.named.conf.default-zones
.named.conf.local
.named.conf.options
.rndc.key
.zones.rfc1918
.
El archivo de configuración principal es /etc/bind/named.conf
, en Debian se
recomienda no editarlo ya que ese archivo lo unico que hace es importar la
configuración presente en los otros tres archivos de configuración:
named.conf.default-zones
: Tiene configuradas los servidores root y las zonas por defecto, ya sean forward, reverse o de broadcast. Esto es obligatorio según la RFC 1912 sección 4.1. En mi caso define las zonas:// prime the server with knowledge of the root servers zone "." { type hint; file "/etc/bind/db.root"; }; // be authoritative for the localhost forward and reverse zones, and for // broadcast zones as per RFC 1912 zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; };
named.conf.local
: No tiene nada, acá más adelante debemos poner nuestros dominios.named.conf.options
: Tiene las opciones del servidor, en mi caso tenía:options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 listen-on-v6 { any; }; };
Los archivos que empiezan en db
contienen los registros DNS, por lo tanto
estos archivos son los que más nos importan cuando configuramos un servidor
primario. Por convención, si contiene los registros del dominio dominio.com
se llama db.dominio.com
.
Cache¶
Lo único que hay que hacer es agregar los servidores a consultar en
/etc/bind/named.conf.options
, partiendo de el archivo mostrado en la sección
anterior, y agregando a 8.8.8.8
y 8.8.4.4
quedaría:
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0's placeholder.
forwarders {
8.8.8.8;
8.8.4.4;
};
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
Nota
Hay que tener cuidado de que no haya servidores DNS configurados en la
máquina, a mi me pasó que BIND terminó preguntando a servidores listados en
/etc/resolv.conf
pero que no estaban en /etc/bind/named.conf.options
.
Para comprobar los archivos usar sudo named-checkconf
, después reiniciar el
servidor con sudo service bind9 restart
.
Primario¶
Se debe indicar el dominio a administrar en /etc/bind/named.conf.local
,
se debe indicar ahí cuál va a ser el archivo que va ser la base de datos de
registros, en este caso voy a administrar midominio.com
, por lo tanto la
convención es poner los registros en /etc/bind/db.midominio.com
.
El archivo /etc/bind/named.conf.local
quedaría:
zone "midominio.com" {
type master;
file "/etc/bind/db.midominio.com";
allow-transfer {
10.0.0.11;
};
};
El archivo /etc/bind/db.midominio.com
va a llevar los registros, que
explico ahora. allow-transfer
especifica los servidores secundarios.
Archivo de registros¶
El archivo de registros tiene columnas de datos separados por espacios. Cada línea es un registro y los datos que lleva depende del tipo de registro.
Dentro de este archivo, hay dos directivas importantes:
$ORIGIN
: Es reemplazado por el nombre de dominio que estamos configurando, es el escrito en/etc/bind/named.conf.local
.$TTL
: Permite establecer el TTL por defecto de esta zona.
Algo que hay que saber es que todos los nombres que se escriban y no terminen en
.
, serán relativos al dominio, es decir, se le agregará $ORIGIN
. Por
ejemplo al escribir host.midominio.com
se vuelve
host.midominio.com.midominio.com
. Si se omite un nombre, se usará
$ORIGIN
. Por último, si se escribe @
también será reemplazado por
$ORIGIN
.
A: Asigna una IP4 a un nombre:
{nombre} IN A {IPv4}
A: Asigna una IPv6 a un nombre:
{nombre} IN AAAA {IPv6}
CNAME: Asigna un alias a un nombre:
{alias} IN CNAME {nombre_real}
MX: Especifica a qué host irán los mails que llegan a esta zona, se prefieren los registros con preferencia menor:
{zona} IN MX {preferencia} {nombre_host}
NS: Anuncia servidor autoritativo para cierta zona, ya sea primario o secundario:
{zona} IN NS {nombre_host}
SOA: Anuncia información general, los tiempos van en segundos:
{zona} IN SOA {servidor_primario} {mail_hostmaster} ( {serial} {time_to_refresh} {time_to_retry} {time_to_expire} {ttl_minimo} )
{servidor_primario}
: Servidor primario de la zona.{mail_hostmaster}
: Mail del administrador, el primer punto se transforma en@
, entonces se deben escapar los puntos que son parte del mail. Por ej:el\.admin.midominio.com
se vuelveel.admin@midominio.com
.{serial}
: Es un número que se debe incrementar cada vez que se cambia algún registro para indicar cambios a los demás servidores.{time_to_refresh}
: Indica el tiempo que debe esperar el servidor secundario para refrescar.{time_to_retry}
: Indica el tiempo que debe esperar el servidor secundario para reintentar un refresco fallido.{time_to_expire}
: Si no se produce un refresco en ese tiempo, el servidor secundario deja de responder como autoritativo.{ttl_minimo}
: Especifica el TTL mínimo de los registros en los cachés.
El primer registro debe ser el SOA, los comentarios se hacen con ;
.
El archivo /etc/bind/db.midominio.com
quedaría por ejemplo:
; Especificar como primario a ns1.midominio.com y como administrador
; a admin@midominio.com
@ IN SOA ns1 admin (
1 ; serial
10800 ; time_to_refresh: 3 horas
2600 ; time_to_retry: 1 hora
604800 ; time_to_expire: 1 semana
86400 ) ; ttl_minimo: 1 dia
; Configurar como autoritativo a ns1.midominio.com y ns2.midominio.com
@ IN NS ns1
@ IN NS ns2
; Especificar IP de ns1.midominio.com y ns2.midominio.com
ns1 IN A 10.0.0.10
ns2 IN A 10.0.0.11
; Especificar IP de host1.midominio.com y host2.midominio.com
host1 IN A 10.0.0.100
host2 IN A 10.0.0.101
Para comprobar los archivos usar sudo named-checkconf
y sudo
named-checkzone /etc/bind/db.midominio.com
, después reiniciar el
servidor con sudo service bind9 restart
.
Si se quiere delegar un subdominio, hay que simplemente agregar un record NS:
subdominio IN NS ns1.subdominio
subdominio IN NS ns2.subdominio
ns1,subdominio IN A 20.0.0.10
ns2,subdominio IN A 20.0.0.11
Por hacer
Agregar DNS reverso.
Aprender bien la diferencia entre zona, dominio y nombre y arreglar esto.
Secundario¶
Se debe indicar el dominio a administrar en /etc/bind/named.conf.local
, se
debe indicar ahí cuál va a ser el archivo que va ser la base de datos de
registros, en este caso voy a administrar midominio.com
, por lo tanto la
convención es poner los registros en /var/lib/bind/db.midominio.com
. Se pone
en /var/lib/bind
en lugar de /etc/bind
ya que de otra forma BIND no
tiene permisos para guardar el archivo.
El archivo /etc/bind/named.conf.local
quedaría:
zone "midominio.com" {
type slave;
file "/var/lib/bind/db.midominio.com";
masters {
10.0.0.10;
};
};
El archivo /var/lib/bind/db.midominio.com
va a llevar los registros traídos
del servidor maestro indicado en masters
.