我必须创造A和国家标准100 个域名的记录,我可以通过以下默认/常用方式执行此操作
以一个域为例,一个
nano /etc/bind/named.conf.default-zones
附加
zone "a.com" {
type master;
file "/etc/bind/a.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
这种方式的问题是我必须手动创建100 个区域文件并更新默认区域文件并创建 100 个匹配区域条目
我想知道是否有办法可以做到类似以下的事情理论伪代码
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
...
这样,我们只需要更新所有区域文件并添加我们的条目。
答案1
有点。
您不能像您的示例一样简单地将所有内容都放在“。”中。从技术上讲您可以这样做,但这样做会给自己带来比您尝试解决的问题更多的问题。千万不要这样做。“。”是所有 DNS 的根区域。您应该已经将“。”定义为类型提示区域。
您需要在配置文件中定义每个区域,但您当然可以将它们全部指向一个文件。
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";
};
在名为 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 脚本消除几乎所有的手动工作。
答案2
您可以使用脚本创建 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))