%20para%20una%20base%20de%20datos%20de%20zona%20BIND9.png)
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 A
entradas. Por ejemplo, mis entradas www
, mail
, ns
, etc. IN A
se refieren a las mismas direcciones IP. No quiero y no puedo usar IN CNAME
entradas 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 $ORIGIN
entradas "programáticas", y $TTL
ninguna 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 heredoc
o usar la envsubst
utilidad:
- 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
- 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