Definición de constante (o macro) para una base de datos de zona BIND9

Definición de constante (o macro) para una base de datos de zona BIND9

Estoy usando BIND9 en un sistema Linux. En los archivos de base de datos de mi zona tengo varias apariciones para la misma IP en varias IN Aentradas. Por ejemplo, mis entradas www, mail, ns, etc. IN Ase refieren a las mismas direcciones IP. No quiero y no puedo usar IN CNAMEentradas para esto.

Por ejemplo, parte de mi archivo db de zona DNS podría ser algo como esto:

...
ns1  IN A    _ip1_
     IN AAAA _ip2_
ns2  IN A    _ip3_
     IN AAAA _ip4_
...
wwwa IN A    _ip1_
     IN AAAA _ip2_
...
wwwb IN A    _ip3_
     IN AAAA _ip4_
...
mail IN A    _ip1_
     IN AAAA _ip2_
     IN A    _ip3_
     IN AAAA _ip4_
...
ntp  IN A    _ip1_
     IN AAAA _ip2_
     IN A    _ip3_
     IN AAAA _ip4_
...

En el ejemplo anterior, en cada lugar donde tengo que ingresar, _ip1_por ejemplo, tengo que ingresar el amisma dirección IP. Esto es propenso a errores.

¿Cómo puedo definir una "macro" o una "constante" y usarla más tarde en un archivo db BIND9?

Respuesta1

No puede definir variables o constantes en un archivo de zona Bind9. Bind9 solo admite $ORIGINentradas "programáticas", y $TTLninguna de las cuales hace lo que necesita.$GENERATE$INCLUDE

Sería bastante trivial utilizar un sistema similar a una plantilla. Podrías usar un script bash con heredoco usar la envsubstutilidad:

  1. Cree un archivo de zona de "plantilla":
ns1  IN A    $ip1
     IN AAAA $ip2
ns2  IN A    $ip3
     IN AAAA $ip4
...
wwwa IN A    $ip1
     IN AAAA $ip2
  1. Escriba un pequeño script de shell que establezca las variables y realice la expansión, por ejemplo:
#!/bin/bash

ip1='198.51.100.42'
ip2='2001:db8:1234:100::42'
ip3='198.51.100.17'
ip4='2001:db8:1234:100::17'

envsubst < template_file > real_zone_file.zone

información relacionada