我想将 bind9 配置为本地 DNS,完全不访问互联网。因此,我的虚拟域 xy.com 中有 5 台 PC。此域内无法访问互联网。
DNS 服务器有如下条目:
- pc1.xy.com 在 10.1.1.1
- pc2.xy.com 在 10.1.1.2
- 。
- 。
- pc5.xy.com 在 10.1.1.5
Bind 配置正确,但是当我在 DNS 服务器上执行“dig @localhost pc1”时,它不起作用,因为它无法联系根服务器。但我只希望它是本地的,并回答 pc1 拥有哪个 IP。
我怎样才能实现这个目标?
答案1
为了实现这一点,您需要创建一个虚假的根区域来替换通常配置的“root.hints”区域。
输入named.conf
这个:
zone "." IN {
type master;
file "fake.root";
};
并输入fake.root
:
$TTL 300
. IN SOA ns. hostmaster.xy.com. (
20120101 1800 900 604800 86400
)
. IN NS ns
ns IN A 127.0.0.1
这将阻止所有访问互联网以获取真实根提示的尝试。
您也可以将您的pcN.xy.com
条目直接放入该根区域 - 没有必要将它们放在自己的xy.com
区域文件中,因此您只需将以下内容附加到fake.root
:
$ORIGIN xy.com.
pc1 IN A 10.1.1.1
pc2 IN A 10.1.1.2
pc3 IN A 10.1.1.3
pc4 IN A 10.1.1.4
pc5 IN A 10.1.1.5
除了您可能需要的任何内容(ACL?)之外,options { }
就是这样 - 不需要其他任何内容。
答案2
您需要禁用递归:
添加到配置:
allow-transfer {“none”;};
allow-recursion {“none”;};
我的配置“named.conf”如下所示(在 RHEL 系统上):
options {
allow-query {
any;
};
allow-recursion {
none;
};
答案3
您没有足够详细地描述您的配置。我认为您缺少权威部分。您需要在配置文件中包含如下块:
zone "domain.lan" {
type master;
file "master/db.domain.lan";
allow-update { none; };
};
其中master/db.domain.lan
应该指向区域文件,该文件应包含您上面发布的记录。此外,区域文件的标头中应该有 SOA(授权起始)记录。区域文件应如下所示:
domain.lan. 86400 IN SOA dns.domain.lan. root.dns.domain.lan. ( 1 10800 3600 6044800 86400 )
86400 IN NS dns.domain.lan.
dns.domain.lan. 86400 IN A 10.10.10.1
pc.domain.lan. 86400 IN A 10.10.10.2
您可以根据需要自定义名称/值/IP。