Определение константы (или макроса) для базы данных зоны BIND9

Определение константы (или макроса) для базы данных зоны BIND9

Я использую 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утилиту:

  1. Создайте файл зоны «шаблон»:
ns1  IN A    $ip1
     IN AAAA $ip2
ns2  IN A    $ip3
     IN AAAA $ip4
...
wwwa IN A    $ip1
     IN AAAA $ip2
  1. Напишите небольшой скрипт оболочки, который устанавливает переменные и выполняет расширение, например:
#!/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

Связанный контент