我们目前有一个私有 DNS 服务,希望将其迁移到 Bind9。因此,我必须将当前配置迁移到 Bind9,但我在设置时遇到了麻烦。
以下是上下文。
我有一个公共域名”acme.com“由注册商管理。我在此注册商处管理公共域名,例如:
acme.com IN A < Public IP server 1 >
www.acme.com IN A < Public IP server 1 >
*.acme.com IN A < Public IP server 1 >
other.acme.com IN A < Public IP server 2 >
在公司的内部 DNS 服务器上,我们有“acme.com“ 例如 ”application-1.acme.com“。
我所做的 Bind9 配置暂时允许我解析公共域名,例如“google.com“以及私人域名,例如”application-1.acme.com“。
但是,如果我尝试解析由我们的注册商管理的域名,例如“acme.com“ 或者 ”www.acme.com“,DIG应用程序给了我这样的答案:
dig @10.0.0.254 acme.com
; <<>> DiG 9.11.5-P4-5.1+deb10u2-Debian <<>> @10.0.0.254 acme.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25017
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: a231205f94a3ec92010000005fa95de884db288162c0f9b9 (good)
;; QUESTION SECTION:
;acme.com. IN A
;; AUTHORITY SECTION:
acme.com. 600 IN SOA ns1.acme.inc. admin. acme.inc. 2020110501 3600 600 86400 600
;; Query time: 2 msec
;; SERVER: 192.168.0.245 #53(10.0.0.254)
;; WHEN: Mon Nov 09 16:19:03 CET 2020
;; MSG SIZE rcvd: 124
这是我的命名配置文件文件:
acl "trusted" {
// some ip range
};
options {
directory "/var/cache/bind";
listen-on { any; };
listen-on-v6 { any; };
allow-query { any; };
allow-transfer { none; };
pid-file "/var/run/named/named.pid";
allow-recursion { trusted; };
recursion yes;
forward only;
forwarders { 8.8.8.8; 8.8.4.4; };
dnssec-validation auto;
auth-nxdomain no;
};
view "trusted" {
match-clients { trusted; };
recursion yes;
zone "acme.com" IN {
type master;
file "/etc/bind/zones/acme.com.zone";
};
};
这里acme.com.zone文件:
$TTL 3600;
@ IN SOA ns1.acme. admin.acme. (
2020110501;
3600;
600;
86400;
600 );
IN NS ns1.acme.
ns1.acme. IN A 10.0.0.254
application-1 IN A 10.0.1.1
application-2 IN A 10.0.1.2
application-3 IN A 10.0.1.3
我不明白我的设置有什么问题。
答案1
由于 BIND 服务器权威性对于example.com
,即使对于NXDOMAIN
子域,它也不会执行递归。您需要使用另一级子域application.sub.example.com
,或者使用以下方式配置单独的例外情况响应政策区域(保护区)。
答案2
事后并没有多大帮助,但一般来说,您不希望拥有一个内部/私有 DNS 服务器,其内部主机名与您用于公共主机名的主机名位于(相同)顶级域区域中。
因为当您这样做时,您会得到现在所面临的情况:某种形式的影子簿记,以确保您的内部 DNS 将为您的注册商在其 DNS 中存在的每个公共 DNS 记录返回相同的结果。
最好在您的域中指定一个子域供内部使用(例如,int.example.com
使用记录application-1.int.example.com
和application-2.int.example.com
等),或者当您同时拥有这两个域时:内部使用 example.net,公开使用 example.com。
按照您的要求,一种解决方法是将您的公共 DNS 记录复制到您的内部 DNS 中,并获取以下内容:
$TTL 3600;
@ IN SOA ns1.example. admin.example. (
2020110501;
3600;
600;
86400;
600 );
IN NS ns1.example.com.
ns1.example.com. IN A 10.0.0.254
application-1.example.com. IN A 10.0.1.1
application-2.example.com. IN A 10.0.1.2
application-3.example.com. IN A 10.0.1.3
example.com. IN A < Public IP server 1 >
www.example.com. IN A < Public IP server 1 >
*.example.com. IN A < Public IP server 1 >
other.example.com. IN A < Public IP server 2 >
不过,您可以简单地避免该问题,只需在公共 DNS 区域中发布您的内部主机名以及公共主机名即可:公共 DNS 中的私有 IP 地址