Cambios masivos en Bind

Creo esta entrada como autonota para recordar los comandos que utilizo para hacer cambios masivos en los archivos de Bind9, ya que cada vez que hago cambios de servidores necesito hacer cambios en todos los dominios que tengo y cada vez son más.

Sólo para recordar la estructura de archivo bind os lo pongo aquí, los puntos importantes son el serial, ya que en cada cambio debe cambiar y luego las IPs a la que los registro A deben apuntar.

$ORIGIN example.com.
$TTL 86400
@     IN     SOA    dns1.example.com.     hostmaster.example.com. (
                    2001062501 ; serial
                    21600      ; refresh after 6 hours
                    3600       ; retry after 1 hour
                    604800     ; expire after 1 week
                    86400 )    ; minimum TTL of 1 day
;
@            IN     NS     dns1.example.com.
@            IN     NS     dns2.example.com.
@            IN     MX     10     mail.example.com.
@            IN     MX     20     mail2.example.com.
;
@            IN     A       10.0.1.2
server1      IN     A       10.0.1.2
server2      IN     A       10.0.1.2
dns1         IN     A       10.0.1.2
dns2         IN     A       10.0.1.3
;
ftp          IN     CNAME   server1
mail         IN     CNAME   server1
mail2        IN     CNAME   server2
www          IN     CNAME   server2

Para hacer un cambio en todos los archivos de zona, por ejmplo cambiar la ip del servidor de nombre dns1 10.0.1.2 por 130.89.56.76 debemos ejecutar este comando:

root@improvisa:~# find /var/cache/bind/ -type f -exec  sed -i ‘s/10.0.1.2/130.89.56.76/g’ {} \;

Este comando entrara en el directorio donde tengamos los archivos de zona, en este caso /var/cache/bind/, y sustituirá todas las ocurrencias de la ip 10.0.1.2 por 130.89.56.76.

Ahora nos queda eliminar la linea donde esté el serial y sustituirla por el nuevo serial, no nos vale encontrar el serial ya que en los archivos este será distinto, sino que tendremos que buscar la linea donde aparezca el texto «serial2» y sustituir toda la linea por la nueva, para ello utilizaremos el siguiente comando:

root@improvisa:~# find /var/cache/bind/ -type f -exec  sed -i ‘s/\(.*; serial\)/                        2013031901   ; serial/’ {} \;

Lo que hace este comando es entrar en el directorio /var/cache/bind/ donde tenemos los archivos de zona y buscar la cadena «; serial» con cualquier cosa delante, es lo que indica la expresión regular .*, es decir nos da igual el número que tenga, y sustituiremos esa ocurrencia por »                        2013031901   ; serial»

Espero que os sirva de ayuda.

Un saludo.