一个区域文件中的不同域名 – Bind9 DNS

我必须为100个域创buildANSlogging,我可以按照以下默认/常用方式执行此操作

一个域的示例a.com

nano /etc/bind/named.conf.default-zones 

附加

 zone "a.com" { type master; file "/etc/bind/a.com"; }; 

然后创build一个.com区域文件并添加以下内容

 nano /etc/bind/a.com $TTL 1h @ IN SOA a.com. root.a.com. ( 2013080701 ; serial 3h ; refresh 1h ; retry 1w ; expiry 1d ) ; minimum a.com. IN NS a.com. a.com. IN A 11.11.11.11 

这种方式的问题是我必须手动创build100个区域文件并更新默认区域文件并创build100个匹配的区域条目

我想知道是否有办法可以做到像下面的理论伪代码

 nano /etc/bind/named.conf.default-zones zone "." { type master; file "/etc/bind/all"; }; nano /etc/all $TTL 1h @ IN SOA a.com. root.a.com. ( 2013080701 ; serial 3h ; refresh 1h ; retry 1w ; expiry 1d ) ; minimum a.com. IN NS a.com. a.com. IN A 11.11.11.11 b.com. IN NS b.com. b.com. IN A 22.22.22.22 c.com. IN NS c.com. c.com. IN A 33.33.33.33 d.com. IN NS d.com. d.com. IN A 44.44.44.44 e.com. IN NS e.com. e.com. IN A 55.55.55.55 ... 

这样我们只需要更新所有的区域文件并添加我们的条目。

有点。

你不能简单地把所有东西都放进去。 如你的例子。 从技术上讲,你可以,但是你会让自己的问题远远多于你想要解决的问题。 只是不要。 '' 是所有DNS的根区域。 你应该已经有'。' 定义为types提示区域。

您需要在configuration文件中定义每个区域,但是您可以将它们全部指向一个文件。

 zone "a.com" { type master; file "/etc/bind/default-zone"; }; zone "b.com" { type master; file "/etc/bind/default-zone"; }; zone "c.com" { type master; file "/etc/bind/default-zone"; }; zone "d.com" { type master; file "/etc/bind/default-zone"; }; 

我个人做的是上面的和大量使用$ INCLUDE指令的组合 。

更像:

 zone "a.com" { type master; file "/etc/bind/a.com-zone"; }; zone "b.com" { type master; file "/etc/bind/b.com-zone"; }; zone "c.com" { type master; file "/etc/bind/c.com-zone"; }; zone "d.com" { type master; file "/etc/bind/d.com-zone"; }; 

在一个名为say default-zone-data的文件中:

 $TTL 1h @ IN SOA a.com. root.a.com. ( 2013080701 ; serial 3h ; refresh 1h ; retry 1w ; expiry 1d ) ; minimum IN NS ns1.example.com. IN NS ns2.example.com. IN NS ns3.example.com. 

那么你的个人区域文件将如下所示:

a.com区:

 $INCLUDE default-zone-data a.com. IN A 11.11.11.11 

b.com区:

 $INCLUDE default-zone-data b.com. IN A 22.22.22.22 

c.com区:

 $INCLUDE default-zone-data c.com. IN A 33.33.33.33 

d.com区:

 $INCLUDE default-zone-data d.com. IN A 44.44.44.44 

这可能看起来像很多工作,但你可以用一个简单的shell脚本来消除几乎所有的手动工作。

您可以使用脚本制作100个文件。

这是一个Python示例。

 from jinja2 import Template template = '''$TTL 1h @ IN SOA {{ zone }} root.{{ zone }} ( 1 ; serial 3h ; refresh 1h ; retry 1w ; expiry 1d ) ; minimum {{ zone }} IN NS {{ zone }} {{ zone }} IN A {{ ip }}''' dnsfile = Template(template) zones = { 'a.com.':'11.11.11.11', 'b.com.':'22.22.22.22', 'c.com.':'33.33.33.33' } for zone, ip in sorted(zones.items()): with open('/var/named/zones/{}dns'.format(zone), 'w+') as f: f.write(dnsfile.render(zone=zone, ip=ip))