- Instalar bind (que contiene el daemon named) con:
- Una vez instalado bind agregamos al dominio el permiso de actualización en el archivo /etc/named.conf. Ejemplo:
zone "midominio.org" IN {
type master;
file "midominio.org.zone";
allow-update{
127.0.0.1;
};
};
- Si se desea actualizar desde otro equipo, es recomendable que se emplee dnsssec, como se describe más adelante.
- Ahora en el directorio /var/named ( el cual está definido en el parámetro directory de la sección 'options'. ) Verificamos que esté creado el file de la zona. Ejemplo de contenido del archivo: midominio.org.zone:
/var/named
[root@localhost named]# cat midominio.org.zone
$ORIGIN .
$TTL 86400 ; 1 day
midominio.org IN SOA midominio.org. micorreo.midomio.org. (
2018060602 ; serial corresponde a Año-mes-día-versión
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns.midominio.org.
A 10.0.2.15
$ORIGIN midominio.org.
ns A 10.0.2.15
tst1 A 10.0.3.1
tst2 A 10.0.3.2
- Verificamos que el usuario propietario de /var/named sea named y que tenga permisos de actualización:
[root@localhost named]# ls -ald /var/named
drwxr-x---. 6 named named 4096 Jun 6 16:06 /var/named
- Activamos el booleano de SELinux para escritura de named:
- Hacemos que se levante el named cuando arranque el sistema. (Esto se hace una sola vez):
[root@localhost named]# chkconfig named --list
named 0:off 1:off 2:on 3:on 4:on 5:on 6:off
- Reiniciamos el servidor de named
Stopping named: [ OK ]
Generating /etc/rndc.key: [ OK ]
Starting named: [ OK ]
La llave /etc/rndc.key solo la genera la primera vez que arranca el servidor named.
- Probamos la actualización de registro de DNS mediante nsupdate (la opción -v es para que se conecte por IP y -d es debug):
> server localhost
> zone midominio.org
> update add tst3.midominio.org. 86400 A 10.0.3.3
> show
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst3.midominio.org. 86400 IN A 10.0.3.3
> send
Sending update to 127.0.0.1#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 35487
;; flags:; ZONE: 1, PREREQ: 0, UPDATE: 1, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst3.midominio.org. 86400 IN A 10.0.3.3
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 35487
;; flags: qr ra; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
> quit
- Modificamos el archivo /etc/resolv.conf para que se emplee nuestro servidor de DNS. Ejemplo:
domain midominio.org
search midominio.org google.com
nameserver 127.0.0.1
nameserver 8.8.8.8
- Verificamos que sí existe el nuevo host:
10.0.3.3
- El archivo de zona (ej: midominio.org.zone ), no se actualiza hasta que no se reinicia el servidor. Sin embargo la información queda temporalmente grabada en el archivo con extensión jnl (ej: midominio.org.zone.jnl). Ejemplo:
-rw-r--r--. 1 root root 551 Jun 6 17:16 midominio.org.zone
-rw-r--r--. 1 named named 734 Jun 6 17:32 midominio.org.zone.jnl
[root@localhost named]# cat midominio.org.zone
$ORIGIN .
$TTL 86400 ; 1 day
midominio.org IN SOA midominio.org. micorreo.midomio.org. (
2018060602 ; serial corresponde a Año-mes-día-versión
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns.midominio.org.
A 10.0.2.15
$ORIGIN midominio.org.
ns A 10.0.2.15
tst1 A 10.0.3.1
tst2 A 10.0.3.2
[root@localhost named]# service named restart
Stopping named: . [ OK ]
Starting named: [ OK ]
[root@localhost named]# cat midominio.org.zone
$ORIGIN .
$TTL 86400 ; 1 day
midominio.org IN SOA midominio.org. micorreo.midomio.org. (
2018060603 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns.midominio.org.
A 10.0.2.15
$ORIGIN midominio.org.
ns A 10.0.2.15
tst1 A 10.0.3.1
tst2 A 10.0.3.2
tst3 A 10.0.3.3
# ls -l midominio.org.zone*
-rw-r--r--. 1 named named 387 Jun 6 17:33 midominio.org.zone
-rw-r--r--. 1 named named 734 Jun 6 17:32 midominio.org.zone.jnl
Como conectarse por dnssec
- Generamos el par de llaves con el comando dnsssec-genkey. Nota: En mi máquina virtual se tardó más de 2 minutos en ejecutar el comando:
Kmicorreo.midominio.org.+165+45033
[root@localhost named]# ll *micorreo.midominio.org*
-rw-r--r--. 1 root root 129 Jun 6 19:02 Kmicorreo.midominio.org.+165+45033.key
-rw-------. 1 root root 232 Jun 6 19:02 Kmicorreo.midominio.org.+165+45033.private
La extensión "key" es 'la llave pública' y la extensión "private" se supone es la privada.
- Creamos el archivo que contendrá la llave 'pública'. Ej.:
key micorreo.midominio.org. {
algorithm HMAC-SHA512;
secret "VVYc19ygyNU3kJ8tkyaL2Q6h9jw60kMbP14XSrbyTWsgDa3OfXnRkWlJ NJHKPuZ5vCR79B5/cYO1OYzB6BZjaA==";
};
- Modificamos el archivo /etc/named.conf para que ahora la conexión se haga por llave e incluimos el archivo con la llave pública. Ej.:
zone "midominio.org" IN {
type master;
file "midominio.org.zone";
allow-update{
key micorreo.midominio.org.;
127.0.0.1;
};
};
- Reiniciamos servidor para que tome los cambios:
[root@localhost named]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
- Probamos hacer la conexión ahora con la llave "pública". Nota: Deben estar presentes en el mismo directorio el archivo .key y elarchivo .private. Al invocar el nsupdate no es necesario ponerle la extensión .key o private , pero también funciona así:
[root@localhost named]# nsupdate -v -d -k Kmicorreo.midominio.org.+165+45033.key
Creating key...
> server localhost
> zone midominio.org
> update add tst4.midominio.org. 86400 A 10.0.3.4
> show
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst4.midominio.org. 86400 IN A 10.0.3.4
> send
Sending update to 127.0.0.1#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 43670
;; flags:; ZONE: 1, PREREQ: 0, UPDATE: 1, ADDITIONAL: 1
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst4.midominio.org. 86400 IN A 10.0.3.4
;; TSIG PSEUDOSECTION:
micorreo.midominio.org. 0 ANY TSIG hmac-sha512. 1528331218 300 64 Gy+LtKqROMGWjRc/DBHoviCJn54o5rwyWtk+f+tURxOkJU1q6BxKKVUY Vkp3iBNduUatbNIKyawKMnA1vxXnwg== 43670 NOERROR 0
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 43670
;; flags: qr ra; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
;; ZONE SECTION:
;midominio.org. IN SOA
;; TSIG PSEUDOSECTION:
micorreo.midominio.org. 0 ANY TSIG hmac-sha512. 1528331219 300 64 bqXuQBmqM/UBCTyfQA2x2H0VN+o3cWbdZefpQtd0dBRYTCNbY3FGQcfi 15HZk+V0QqpRwPpbBnhkPUe24/Z4Mw== 43670 NOERROR 0
> quit
- Verificamos que sí se dio de alta el nuevo host:
10.0.3.4
- Ejemplo por medio de ligas:
ln -s /var/named/Kmicorreo.midominio.org.+165+45033.key dnskey.key
ls -l
total 0
lrwxrwxrwx. 1 root root 49 Jun 6 20:42 dnskey.key -> /var/named/Kmicorreo.midominio.org.+165+45033.key
lrwxrwxrwx. 1 root root 53 Jun 6 20:42 dnskey.private -> /var/named/Kmicorreo.midominio.org.+165+45033.private
# nsupdate -v -d -k dnskey
Creating key...
> server 127.0.0.1
> zone midominio.org
> update add tst5.midominio.org. 86400 A 10.0.3.5
> show
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst5.midominio.org. 86400 IN A 10.0.3.5
> send
Sending update to 127.0.0.1#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 58893
;; flags:; ZONE: 1, PREREQ: 0, UPDATE: 1, ADDITIONAL: 1
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst5.midominio.org. 86400 IN A 10.0.3.5
;; TSIG PSEUDOSECTION:
micorreo.midominio.org. 0 ANY TSIG hmac-sha512. 1528335893 300 64 yHpONPHjgYNfoBS7Xjug01AXEMx3moPJSQu8msWh+lLduwL5yjZ97lET Ee+SXTEsmuhf4U7QFlzq+7Z5QSrX4g== 58893 NOERROR 0
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 58893
;; flags: qr ra; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
;; ZONE SECTION:
;midominio.org. IN SOA
;; TSIG PSEUDOSECTION:
micorreo.midominio.org. 0 ANY TSIG hmac-sha512. 1528335893 300 64 61pYdkJNq7E5Yro4DElMUD+b+W8cjcV65kccEiF4ZQpXAAxC7n5tMCKm Tzkz7tuuSVyWJzpOMGDnhNm2mGQ3rg== 58893 NOERROR 0
> quit
[root@localhost bin]# gethostip -d tst5
10.0.3.5
Automatización
Ejemplo de script para automatizar el proceso de alta (suponiendo que se encuentra en el mismo directorio de dnskey.private y dnskey.key):# cat addhost
#!/bin/bash
SERVER="127.0.0.1"
ZONE="midominio.org."
HOST="$1.$ZONE"
IP=$2
TTL="86400"
RECORD=" $HOST $TTL A $IP"
echo "
server $SERVER
zone $ZONE
update add $RECORD
show
send" | nsupdate -v -d -k dnskey
[root@localhost bin]# addhost tst6 10.0.3.6
Creating key...
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 0
;; flags:; ZONE: 0, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst6.midominio.org. 86400 IN A 10.0.3.6
Sending update to 127.0.0.1#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 860
;; flags:; ZONE: 1, PREREQ: 0, UPDATE: 1, ADDITIONAL: 1
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst6.midominio.org. 86400 IN A 10.0.3.6
;; TSIG PSEUDOSECTION:
micorreo.midominio.org. 0 ANY TSIG hmac-sha512. 1528336819 300 64 5rZzjNol8Zx4fZMwo9e23JsXuAEM2kaisoVr7BnLARIS9ZQsAmqKSkbv D0+1t9bC3oyVrD8zWjCBLWo9GEy5OQ== 860 NOERROR 0
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 860
;; flags: qr ra; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 1
;; ZONE SECTION:
;midominio.org. IN SOA
;; TSIG PSEUDOSECTION:
micorreo.midominio.org. 0 ANY TSIG hmac-sha512. 1528336820 300 64 8sq6u0DSsbFSO3/K2Xg/AlbMBmjWFkSsIeTzMo1wGpQmj39+s0b8Oohj lczoEIjYzy4vCQGRtZPB/RZmGh5otg== 860 NOERROR 0
[root@localhost bin]# gethostip -d tst6
10.0.3.6
Posibles errores y como solucionarlos:
Si al realizar el send aparece el error:;; ->>HEADER<<- opcode: UPDATE, status: SERVFAIL, id:
pero todo lo demás parece estar bien. Ejemplo:
> send
Sending update to 127.0.0.1#53
Outgoing update query:
;; ->>HEADER<<- opcode: UPDATE, status: NOERROR, id: 47128
;; flags:; ZONE: 1, PREREQ: 0, UPDATE: 1, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
;; UPDATE SECTION:
tst3.midominio.org. 86400 IN A 10.0.3.3
Reply from update query:
;; ->>HEADER<<- opcode: UPDATE, status: SERVFAIL, id: 47128
;; flags: qr ra; ZONE: 1, PREREQ: 0, UPDATE: 0, ADDITIONAL: 0
;; ZONE SECTION:
;midominio.org. IN SOA
- Que no esté puesto el booleano de SELinux . Esto se arregla poniendo:
Verificación de la variable:
[root@localhost named]# getsebool named_write_master_zones
named_write_master_zones --> on
- Que no haya permisos de escritura en el directorio /var/named para el usuario named. Esto se arregla poniendo:
[root@localhost named]# ls -ald /var/named
drwxr-x---. 6 named named 4096 Jun 6 17:16 /var/named
- Si al verificar el estado del servidor da: named dead but subsys locked . Ejemplo:
# service named status
version: 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5
CPUs found: 12
worker threads: 12
number of zones: 20
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/0/1000
tcp clients: 0/100
server is up and running
named dead but subsys locked
Puede ser:
El contexto de selinux no permite guardar datos, por ejemplo nos se crea el file named.pid en la carpeta /var/named/chroot/var/run/named. Ejemplo de contexto incorrecto:
# ls -aldZ /var/named/chroot/ named/
drwxr-xr-x. root root unconfined_u:object_r:named_conf_t:s0 /var/named/
drwxr-x---. root named system_u:object_r:named_conf_t:s0 /var/named/chroot/
Esto se puede arreglar arreglando el contexto con restorecon. Ej.:
restorecon -r -v /var/named/chroot
o mejor aún:
restorecon -r -v /var/named
[root@lab c]# ls -aldZ /var/named/chroot/ /var/named/
drwxr-x---. named named system_u:object_r:named_zone_t:s0 /var/named/
drwxr-x---. named named system_u:object_r:named_conf_t:s0 /var/named/chroot/
- El error:
Puede ocurrir porque:
- No se está dando la llave correcta.
- No se creó el archivo que contiene la llave pública (por ejemplo dnskeys.conf), o no se está incluyendo en el archivo de configuración de /etc/named.conf
- No se cuenta con los permisos necesarios para leer/guardar información en la carpeta /var/named. En este caso, como ya se mencionó más arriba, se recomienda verificar el boolean correspondiente de SELinux, verificar/restaurar los contextos, verificar propietarios y permisos.
No hay comentarios:
Publicar un comentario