Replicar un servidor de DNS de un maestro a un esclavo

Tenemos que montar 2 servidores de DNS, un maestro y un esclavo, el esclavo simplemente va a recibir las actualizaciones del maestro, así que los cambios sólo los vamos a realizar al servidor de DNS maestro.

Instalamos bind en ambos equipos

# apt-get install bind9

Y creamos los ficheros de zona en /var/lib/bind/, por ejemplo el de capa8.cat

# vi capa8.cat.hosts
$ttl 1800
capa8.cat.      IN      SOA     ns1.craem.net. hostmaster.craem.net. (
                        1386607334
                        10800
                        3600
                        604800
                        38400
                )

                IN      NS      ns1.capa8.cat.
                IN      NS      ns2.capa8.cat.
                IN      MX  10  mx1.capa8.cat.

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

@                               IN      A       81.184.1.215

;; PLACE 1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

c-router                1H      IN      A       109.69.8.25
c-radius                1H      IN      A       109.69.8.26
c-proxmox               1H      IN      A       109.69.8.27

;; CRAEM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

jabber                  1H      IN      A       109.69.10.129
nagios                  1H      IN      A       109.69.10.129
cloud                   1H      IN      A       109.69.10.130
ns1                     1H      IN      A       109.69.10.133
vmadmin                 1H      IN      A       10.138.13.82

zeus                    1H      IN      A       81.184.1.215
sip                     1H      IN      A       188.165.119.7

mx1                     1H      IN      A       81.184.1.215
www                     1H      IN      CNAME   zeus

;; BLACKHOLD ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

alfresco                1H      IN      A       109.69.10.136
;;syslog                1H      IN      A       109.69.10.137
ns2                     1H      IN      A       109.69.10.138

alfresco.guifi          1H      IN      A       10.228.192.215
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Atención, MX no puede ser CNAME, tiene que ser A y A siempre va vinculado a una IP.

Y para gestionar las inversas, para ejemplo para el rango 109.69.10.128/27

# vi 109.69.10.128_27.rev
$ORIGIN 128/27.10.69.109.in-addr.arpa.
$TTL    28800
@       IN      SOA     ns1.capa8.cat. hostmaster.capa8.cat. (
                        1384107250 ;serial number
                        10800      ;refresh
                        3600       ;update retry
                        604800     ;expiry
                        38400      ;nx =nxdomain ttl
        )
        IN      NS      ns1.capa8.cat.
129     IN      PTR     ns1.capa8.cat.
130     IN      PTR     www.capa8.cat.
131     IN      PTR     mx1.capa8.cat.
132     IN      PTR     ip132.capa8.cat.
133     IN      PTR     ip133.capa8.cat.
134     IN      PTR     ip134.capa8.cat.
135     IN      PTR     ip135.capa8.cat.
136     IN      PTR     ip136.capa8.cat.
137     IN      PTR     ip137.capa8.cat.
138     IN      PTR     ns2.capa8.cat.
139     IN      PTR     ip139.capa8.cat.
140     IN      PTR     ip140.capa8.cat.
141     IN      PTR     ip141.capa8.cat.
142     IN      PTR     ip142.capa8.cat.
143     IN      PTR     ip143.capa8.cat.
144     IN      PTR     ip144.capa8.cat.
145     IN      PTR     ip145.capa8.cat.
146     IN      PTR     ip146.capa8.cat.
147     IN      PTR     ip147.capa8.cat.
148     IN      PTR     ip148.capa8.cat.
149     IN      PTR     ip149.capa8.cat.
150     IN      PTR     ip150.capa8.cat.
151     IN      PTR     ip151.capa8.cat.
152     IN      PTR     ip152.capa8.cat.
153     IN      PTR     ip153.capa8.cat.
154     IN      PTR     ip154.capa8.cat.
155     IN      PTR     ip155.capa8.cat.
156     IN      PTR     ip156.capa8.cat.
157     IN      PTR     ip157.capa8.cat.
158     IN      PTR     ip158.capa8.cat.
159     IN      PTR     ip159.capa8.cat.

;; para generar automáticamente estas líneas
;; $GENERATE 129-159 $ PTR ip-$.capa8.cat.

Este será el contenido del fichero /etc/bind/named.conf.local (en este servidor de dns estoy gestionando/tengo delegados 3 rangos de red distintos.

// RANG 0
zone "24/29.8.69.109.in-addr.arpa" {
        type master;
        file "/var/lib/bind/109.69.8.24_29.rev";
        allow-query { any; };
        };

// RANG 1 
zone "128/27.10.69.109.in-addr.arpa" {
        type master;
        file "/var/lib/bind/109.69.10.128_27.rev";
        allow-query { any; };
        };

// RANG 2 
zone "192/26.10.69.109.in-addr.arpa" {
        type master;
        file "/var/lib/bind/109.69.10.192_26.rev";
        allow-query { any; };
        };

// master capa8.cat
zone "capa8.cat" {
        type master;
        file "/var/lib/bind/capa8.cat.hosts";
        };

Una vez realizado esto en el servidor maestro, vamos a replicar estos ficheros en el servidor esclavo.

Nota: Esto no se hace así, la forma correcta de hacerlo es usar el modo maestro-esclavo de bind. Pendiente de documentar :P Pero así también funciona hehe

Primero hacemos un ssh-copy-id para poder acceder a ns2.capa8.cat desde ns1.capa8.cat sin tener que poner el password.

# cd
# cd .ssh
# ssh-keygen -t rsa
# ssh-copy-id -i id_rsa.pub root@109.69.10.138
# ssh root@109.69.10.138

Y creamos un script que replique los ficheros al secundario automáticamente.

# vi /root/scripts/dns_primary_to_slave.sh
#!/bin/bash

VAR=$(rsync -av --delete /var/lib/bind/ root@109.69.10.138:/var/lib/bind/ |wc -l)
rsync -av --delete /etc/bind/ root@109.69.10.138:/etc/bind/

if [ "$VAR" -gt 4 ]; then
        echo "reboto bind ns2"
        ssh root@109.69.10.138 '/etc/init.d/bind9 restart'
fi

Le damos permisos de ejecución

# chmod +x /root/scripts/dns_primary_to_slave.sh

Y haremos que el script se ejecute cada 10 minutos en cron. Añadimos este contenido al final del fichero:

# vi /etc/crontab
# dns primary to slave
*/10 *  * * *   root    /root/scripts/dns_primary_to_slave.sh

¡Y a replicar!

Thnks craem y fompi :)
Ah! y no me olvido de ZUNbado que siempre le doy la brasa con los dns de marsupi! :D

5 Comments

  1. Pingback: dnsservices: interno por guifi, externo a mano | Blackhold

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.