我必须为100个域创buildA和NSlogging,我可以按照以下默认/常用方式执行此操作
一个域的示例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))