%20Definition%20f%C3%BCr%20eine%20BIND9-Zonendatenbank.png)
Ich verwende BIND9 auf einem Linux-System. In meinen Zonen-DB-Dateien habe ich mehrere Vorkommen für dieselbe IP in mehreren IN A
Einträgen. Beispielsweise beziehen sich meine Einträge www
, mail
, ns
, usw. IN A
auf dieselben IP-Adressen. Ich möchte und kann keine IN CNAME
Einträge dafür verwenden.
Ein Teil meiner DNS-Zonen-Datenbankdatei könnte beispielsweise folgendermaßen aussehen:
...
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_
...
Im obigen Beispiel muss ich an jeder Stelle, an der ich beispielsweise eingeben muss _ip1_
, das a eingebengleiche IP-Adresse. Dies ist fehleranfällig.
Wie kann ich ein „Makro“ oder eine „Konstante“ definieren und später in einer BIND9-Datenbankdatei verwenden?
Antwort1
Sie können in einer Bind9-Zonendatei keine Variablen oder Konstanten definieren. Bind9 unterstützt nur $ORIGIN
, $TTL
und $GENERATE
als $INCLUDE
„programmgesteuerte“ Einträge, von denen keiner das tut, was Sie brauchen.
Es wäre ziemlich trivial, ein vorlagenähnliches System zu verwenden. Sie könnten ein Bash-Skript mit einem verwenden heredoc
oder das envsubst
Dienstprogramm:
- Erstellen Sie eine Zonendatei „Vorlage“:
ns1 IN A $ip1
IN AAAA $ip2
ns2 IN A $ip3
IN AAAA $ip4
...
wwwa IN A $ip1
IN AAAA $ip2
- Schreiben Sie ein kleines Shell-Skript, das die Variablen setzt und die Erweiterung durchführt, zum Beispiel:
#!/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