%20%D0%B4%D0%BB%D1%8F%20%D0%B1%D0%B0%D0%B7%D1%8B%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%20%D0%B7%D0%BE%D0%BD%D1%8B%20BIND9.png)
Я использую BIND9 в системе Linux. В моих файлах базы данных зон есть несколько вхождений одного и того же IP в нескольких IN A
записях. Например, мои записи www
, mail
, ns
, и т. д. IN A
ссылаются на одни и те же IP-адреса. Я не хочу и не могу использовать IN CNAME
записи для этого.
Например, часть моего файла базы данных зоны DNS может выглядеть примерно так:
...
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_
...
В приведенном выше примере в каждом месте, где мне нужно ввести, _ip1_
например, я должен ввести aтот же IP-адрес. Это подвержено ошибкам.
Как определить «макрос» или «константу» и использовать их позже в файле базы данных BIND9?
решение1
Вы не можете определять переменные или константы в файле зоны Bind9. Bind9 поддерживает только $ORIGIN
, $TTL
, $GENERATE
и $INCLUDE
как «программные» записи, ни одна из которых не делает то, что вам нужно.
Было бы довольно тривиально использовать систему, похожую на шаблон. Вы можете использовать скрипт bash с heredoc
, или использовать envsubst
утилиту:
- Создайте файл зоны «шаблон»:
ns1 IN A $ip1
IN AAAA $ip2
ns2 IN A $ip3
IN AAAA $ip4
...
wwwa IN A $ip1
IN AAAA $ip2
- Напишите небольшой скрипт оболочки, который устанавливает переменные и выполняет расширение, например:
#!/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