注:这是一个转发我之前的问题,被搁置,并要求重新措辞以使其更加清晰(希望这更有意义)
我安装了一个 DNS 服务器bind
,我尝试将其设置为托管一个父域 ( example.org
) 和两个子域 (cnc.example.org
和report.example.org
),以便任何域中的设备都可以通过单个 DNS 服务器提供 DNS 查询服务。
我的第一个问题这可能吗?
如果是这样,为什么我会收到以下错误?
当我nslookup host1
从report.example.org
我收到的域中执行此操作时
server can't find host1: SERVFAIL
当我nslookup host2
从cnc.example.org
我收到的域中执行此操作时
server can't find host1: SERVFAIL
设置如下:
主机1:
- IP 192.168.252.21/24
- 域名解析 192.168.252.22
/etc/hosts
包含host1.cnc.example.org
主机2:
- IP 192.168.252.20/24
- 域名解析 192.168.252.22
/etc/hosts
包含host2.report.example.org
DNS服务器:
- IP 192.168.252.22/24
- 域名解析 127.0.0.1
/etc/hosts
包含DNSServer.example.org
named.conf.local
配置
/
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "example.org" {
type master;
file "/etc/bind/zones/example.org";
# allow-transfer { 192.168.252.22; };
};
zone "cnc.example.org" {
type master;
file "/etc/bind/zones/cnc.example.org";
# allow-transfer { 192.168.252.22; };
};
zone "report.example.org" {
type master;
file "/etc/bind/zones/report.example.org";
# allow-transfer { 192.168.252.22; };
};
zone "252.168.192.in-appr.arpa" {
type master;
file "/etc/bind/zones/reverse/rev.252.168.192";
allow-transfer { 192.168.252.22; };
};
example.org
配置
;
; BIND data for example.org or report.example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
IN NS DNSServer.example.org.
; main domain name servers - A records
DNSServer IN A 192.168.252.22
;delegated zones
cnc.example.org. IN NS DNSServer.example.org.
report.example.org. IN NS DNSServer.example.org.
* DNSServer 上 /etc/resolv.conf 的输出 *
# Generated by NetworkManager
search example.org
nameserver 127.0.0.1
* host1 上 /etc/resolv.conf 的输出 *
# Generated by NetworkManager
search report.example.org
nameserver 192.168.252.22
* 主机 2 上 /etc/resolv.conf 的输出 *
# Generated by NetworkManager
search cnc.example.org
nameserver 192.168.252.22
* DNSServer 上的 dig DNSServer 的输出 *
root@DNSServer:/etc/bind/zones/reverse# dig DNSServer
; <<>> DiG 9.10.3-P4-Debian <<>> DNSServer
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 45573
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;DNSServer. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 27 10:47:23 GMT 2017
;; MSG SIZE rcvd: 38
* 使用 dig DNSServer.example.org 输出 *
root@DNSServer:/home/osboxes# dig DNSServer.example.org
; <<>> DiG 9.10.3-P4-Debian <<>> DNSServer.example.org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12335
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;DNSServer.example.org. IN A
;; ANSWER SECTION:
DNSServer.example.org. 10800 IN A 192.168.252.22
;; AUTHORITY SECTION:
example.org. 10800 IN NS DNSServer.example.org.
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 27 11:01:19 GMT 2017
;; MSG SIZE rcvd: 79
* DNSServer 上的 dig host1 的输出 *
root@DNSServer:/etc/bind/zones/reverse# dig host1
; <<>> DiG 9.10.3-P4-Debian <<>> host1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 19414
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;host1. IN A
;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mon Nov 27 10:48:15 GMT 2017
;; MSG SIZE rcvd: 40
cnc.example.org
配置
;
; BIND data for example.org or report.example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
@ IN NS DNSServer.example.org.
; main domain name servers - A records
;DNSServer IN A 192.168.252.22
;192.168.252.0/24 - A Records
host1.cnc.example.org. IN A 192.168.252.21
report.example.org
配置
;
; BIND data for example.org or report.example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
@ IN NS DNSServer.example.org.
; main domain name servers - A records
DNSServer IN A 192.168.252.22
;192.168.252.0/24 - A Records
host2.report.example.org. IN A 192.168.252.20
谢谢
答案1
您可以使用委派,但除非您确实需要它,否则我建议您保持简单并使用包含example.org
、cnc.example.org
和 的一个区域report.example.org
。
;
; BIND data for example.org
;
$TTL 3h
@ IN SOA DNSServer.example.org. root.example.org. (
1 ; serial
3h ; refresh
1h ; retry
1w ; expire
1h ) ; minimum
;
; main domain name servers - NS records
IN NS DNSServer.example.org.
; main domain name servers - A records
DNSServer IN A 192.168.252.22
; public targets
cnc IN CNAME host1.cnc
report IN CNAME host2.report
; hosts delivering services
host1.cnc IN A 192.168.252.21
host2.report IN A 192.168.252.20
引用评论中的内容:
当我在 DNS 服务器上时,
nslookup host1
我得到root@host1:/home/osbixes# nslookup host2 Server: 127.0.0.1 Address 127.0.0.1#53 ** server can’t find host2: SERVFAIL
DNSServer 上没有搜索路径,但域是example.org
,这意味着所有不合格的名称都必须在该域中。没有正确host2.example.org
地nslookup
未能返回您的答案。在这种情况下,您要么需要将domain example.org
您的替换/etc/resolv.conf
为search example.org report.example.org
,要么查找nslookup host2.report
。
从主机1或主机2我得到
root@host1:/home/osbixes# nslookup host2 Server: 192.168.252.22 Address 192.168.252.22#53 ** server can’t find host2: SERVFAIL
同样的原因。您的域(搜索路径)/etc/resolv.conf
不包含包含的组件,host2
因此在任何地方nslookup
都看不到不合格的名称host2
。
我假设host1 和 host2 上的
/etc/hosts
和/etc/hostname
文件应该仍然是host1.cnc.example.org
和host2.report.example.org
/etc/hosts
当你说“应该”时,我真的不知道你的意思是什么host1.cnc.example.org
。该/etc/hosts
文件是主机名和 IP 地址之间映射的另一种方式。如果您只有两到三个主机名,您不妨避免内部 DNS 的复杂性,只需将这些条目放入/etc/hosts
.另一方面,如果您拥有合理数量的主机,那么 DNS 对于本地网络来说是一个很好的集中式解决方案。 (但请记住,这是nslookup
故意忽略的/etc/hosts
。)
当我这样做时,从任一主机
nslookup host1.cnc.example.org
,或者nslookup host2.report.example.org
它正确解析了 IP 地址
是的。您提供了完全限定的名称,并且nslookup
可以bind
正确解析。这证明任一 DNS 运行正常。
我需要一个 DNS 服务器来处理 和 的任何查询
example.org
,cnc.example.org
以便report.example.org
当新设备与网络通信以请求执行新命令时,它会查询cnc.example.org
并定向到host1.cnc.example.org
(192.168.252.21),但当它想要发送报告时返回网络,它查询report.example.org
域并定向到host2.report.example.org
(192.168.252.20)
为此,您将CNAME
在 DNS 中使用(别名)记录,以便将 的查询report.example.org
映射到主机host2.report.example.org
。请注意,您的问题中没有任何技术原因,为什么host2
不应该调用host2.example.org
。CNAME
记录可以指向任何地方,而不仅仅是当前(子)域中的主机。
答案2
是的。但无需为子域创建单独的配置。
末尾的“A”.
表示完整域名,没有“A”.
则表示原始域的子域。
cnc.example.com
仅在配置中添加这样的条目example.com
。
host1.cnc IN A 192.168.252.21
因此,您需要以下更新
- 删除
cnc.example.org
并report.example.com
从named.conf.local
.
在父域的配置中添加与子域对应的所有条目(不带结尾)。您还可以在父母的区域中明确提及他们,例如host1.cnc.example.com. IN A 192.168.252.21
cnc.example.com
删除和对应的区域文件report.example.com
并重新启动BIND
服务器。