DNS服务器分类与bind-chroot服务配置

1. DNS服务器分类

    DNS服务器从业务逻辑上一般分为权威服务器与缓存服务器。权威服务器直接负责对域名进行解析,各种记录,比如A记录,CNAME记录就是写在权威服务器的配置文件;缓存服务器负责向上级DNS服务器转发客户端的查询请求,同时将查询结果进行缓存,缓存服务器上不进行域名解析的配置。

1.1 权威服务器

    权威服务器分为主服务器,从服务器,隐形服务器。

1.1.1 主服务器

    Master (Primary) Name Servers,即主服务器,负责加载本地DNS配置文件。
主服务器
    配置方法:
    在named.conf的区域配置中进行声明:

// example.com fragment from named.conf 
// defines this server as a zone master
zone "example.com" in{
	type master;
	file "pri.example.com";
};
1.1.2 从服务器

    Slave Name Servers,即从服务器,使用区域传输检索区域的权威服务器。
从服务器
    从服务器通过区域传输(zone transfer)从主服务器或其他从服务器获得区域数据。主服务器与从服务器的主要区别就是:从服务器通过区域传输获取其区域数据,而主服务器从本地文件系统获取其区域数据。前面两句话好像有点啰嗦了。
    那么,什么情况下,一台从服务器会成为其他从服务器的区域传输源呢?
    如果你想隐藏主服务器,那么就需要将从服务器放置在防火墙public区域来对外提供服务。为了让服务存在弹性,可以使用2台从服务器。第2台从服务器可以从主服务器同步数据,也可以从第1台从服务器同步数据。当第1台从服务器与主服务器同步数据后,默认会向第2台从服务器发送NOTIFY消息开始配置同步,这就导致了一点点延时。
    从属服务器必须定期发送刷新查询,以确定区域内容是否已更新。通过发送对该区域的SOA记录的查询并检查序列号是否已更新来完成此操作。
    配制方法:
    从服务器中namd.conf配置如下

// example.com fragment from named.conf 
// defines this server as a zone slave
zone "example.com" in{
	type slave;
	file "sec/sec.example.com";
	masters {192.168.23.17;};
};
1.1.3 隐身服务器

    Stealth Name Server,又名DMZ 服务器或 Hidden Master服务器。隐身服务器被定义为没有出现在该域的任何公共可见 NS记录中的名称服务器。隐身服务器可以大致定义为具有以下特征:
    1.某组织需要一个公共DNS才能访问其公共服务,例如Web,邮件,ftp等。
    2.某组织不希望整个世界通过查询或DNS服务而威胁到其内部主机。
隐身服务器
    上图为隐身服务器的拓扑。Public DNS提供权威响应,包括公共可见的服务,它不得接受来自隐身服务器的传输数据。
    典型的Public DNS配置如下:

; public zone master file
; provides minimal public visibility of external services
example.com.  IN      SOA   ns.example.com. root.example.com. (
                              2003080800 ; se = serial number
                              3h         ; ref = refresh
                              15m        ; ret = update retry
                              3w         ; ex = expiry
                              3h      ; min = minimum
                              )
              IN      NS      ns1.example.com.
              IN      NS      ns2.example.com.
              IN      MX  10  mail.example.com.
ns1           IN      A       192.168.254.1
ns2           IN      A       192.168.254.2
mail          IN      A       192.168.254.3
www           IN      A       192.168.254.4
ftp           IN      A       192.168.254.5

    隐身服务器配置为提供可见的内部和外部服务,提供递归查询和所有其他方式的其他服务。配置文件如下:

; private zone master file used by stealth server(s)
; provides public and private services and hosts
example.com.  IN      SOA   ns.example.com. root.example.com. (
                              2003080800 ; se = serial number
                              3h         ; ref = refresh
                              15m        ; ret = update retry
                              3w         ; ex = expiry
                              3h         ; min = minimum
                              )
              IN      NS      ns1.example.com.
              IN      NS      ns2.example.com.
              IN      MX  10  mail.example.com.
; public hosts
ns1           IN      A       192.168.254.1
ns2           IN      A       192.168.254.2
mail          IN      A       192.168.254.3
www           IN      A       192.168.254.4
ftp           IN      A       192.168.254.5
; private hosts 
joe           IN      A       192.168.254.6
bill          IN      A       192.168.254.7
fred          IN      A       192.168.254.8
....
accounting    IN      A       192.168.254.28
payroll       IN      A       192.168.254.29

    从配置文件可见,隐身服务器是出于安全需求而诞生的。

1.2 缓存服务器

    Caching Name Servers,即缓存服务器。缓存服务器从另一台服务器(主服务器)获取信息来响应主机查询,然后将数据缓存到本地。在第二次或更多次请求相同数据时,缓存服务器将使用其本地缓存的数据进行响应,直到响应的生存时间(TTL)值到期为止,此时缓存服务器将刷新来自区域主服务器的数据。
    如果缓存服务器直接从其区域主服务器获取数据,则它的响应为“权威”;如果数据是从其缓存中提供的,则响应为“非权威”。
递归服务器
    上图中,2为递归查询,3,4,5为迭代查询。可以看出递归查询与迭代查询的不同:递归查询是接受客户端的查询委托,并将最终的查询结果返回给客户端;迭代查询只能根据每次的查询结果逐步推导出结果。举个不恰当的例子,相当于去饭店点了一个宫保鸡丁,点菜的过程类似递归查询,客户提出需求,饭店反馈一盘已经做好的菜;厨师按照菜谱到菜市场买鸡胸肉,辣椒,胡萝卜,再回到厨房加工好,类似迭代查询。如果宫保鸡丁做多了,刚好卖给第二个人,第三个人……和缓存服务器很像嘛。唉,饿了。
    典型配置如下,注意recursion yes一定要开启:

// options section fragment of named.conf 
// recursion yes is the default and may be omitted
options {
	directory "/var/named";
	version "not currently available";
	recursion yes;
};
// zone section
....
// the DOT indicates the root domain = all domains
zone "." IN {
	type hint;
	file "root.servers";
};

    在生产环境中,为了更加规范和安全,权威服务器和缓存服务器应该使用不同主机。当然,在实验中就无所谓了,使用1台主机就可以了。

2. bind-chroot服务配置

2.1 安装

    操作系统为centos7,DNS服务器IP为192.168.20.160。
    按照https://linux.cn/article-4735-1.html,按部就班执行可以了。需要注意的地方有两点:
    1.因为是chroot,所以自始至终需要修改的是/var/named/chroot/etc/named.conf,跟/etc/named.conf没关系。/etc/namd.conf不需要修改。
    2.要注意/var/named/chroot/etc/named.conf的配置,这两个地方如果不配置为any,DNS服务会因为没有权限而无法使用:

listen-on port 53 { any; };
...
allow-query     { any; };

    安装包,创建文件/文件夹

# yum install bind-chroot bind -y
# cp -R /usr/share/doc/bind-*/sample/var/named/* /var/named/chroot/var/named/
# touch /var/named/chroot/var/named/data/cache_dump.db
# touch /var/named/chroot/var/named/data/named_stats.txt
# touch /var/named/chroot/var/named/data/named_mem_stats.txt
# touch /var/named/chroot/var/named/data/named.run
# mkdir /var/named/chroot/var/named/dynamic
# touch /var/named/chroot/var/named/dynamic/managed-keys.bind
# chmod -R 777 /var/named/chroot/var/named/data
# chmod -R 777 /var/named/chroot/var/named/dynamic
# cp -p /etc/named.conf /var/named/chroot/etc/named.conf

    修改named.conf文件

# vi /var/named/chroot/etc/named.conf

zone "example.local" {
    type master;
    file "example.local.zone";
};

zone "20.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.20.zone";
};

    配置域文件/var/named/chroot/var/named/example.local.zone

;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum
 
;       Define the nameservers and the mail servers
 
               IN      NS      ns1.example.local.
               IN      NS      ns2.example.local.
               IN      A       192.168.20.244
               IN      MX      10 mx.example.local.
 
centos7          IN      A       192.168.20.244
mx               IN      A       192.168.20.160
ns1              IN      A       192.168.20.244
ns2              IN      A       192.168.20.160

    配置域文件/var/named/chroot/var/named/192.168.20.zone

;
;       Addresses and other host information.
;
$TTL 86400
@       IN      SOA     example.local. hostmaster.example.local. (
                               2014101901      ; Serial
                               43200      ; Refresh
                               3600       ; Retry
                               3600000    ; Expire
                               2592000 )  ; Minimum
 
20.168.192.in-addr.arpa. IN      NS      centos7.example.local.
 
244.20.168.192.in-addr.arpa. IN PTR mx.example.local.
160.20.168.192.in-addr.arpa. IN PTR ns1.example.local.
244.20.168.192.in-addr.arpa. IN PTR ns2.example.local.

    初始化配置并启动

# /usr/libexec/setup-named-chroot.sh /var/named/chroot on
# systemctl stop named
# systemctl disable named
# systemctl start named-chroot
# systemctl enable named-chroot

2.2 验证

    修改服务器DNS配置:

# cat /etc/resolv.conf 
# Generated by NetworkManager
search localdomain
nameserver 192.168.20.160

    查询结果如下:

# dig example.local

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> example.local
;; global options: +cmd
;; Got answer:
;; WARNING: .local is reserved for Multicast DNS
;; You are currently testing what happens when an mDNS query is leaked to DNS
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36898
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: c76ababfcccd3ebecc4dc24b5db15e776846d6b67e7b735a (good)
;; QUESTION SECTION:
;example.local.                 IN      A

;; ANSWER SECTION:
example.local.          86400   IN      A       192.168.20.244

;; AUTHORITY SECTION:
example.local.          86400   IN      NS      ns1.example.local.
example.local.          86400   IN      NS      ns2.example.local.

;; ADDITIONAL SECTION:
ns1.example.local.      86400   IN      A       192.168.20.244
ns2.example.local.      86400   IN      A       192.168.20.160

;; Query time: 3 msec
;; SERVER: 192.168.20.160#53(192.168.20.160)
;; WHEN: Thu Oct 24 16:19:03 CST 2019
;; MSG SIZE  rcvd: 154

    因为同时开启了缓存服务器的选项,所以也可以DNS到其他域名:

# dig www.baidu.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19532
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 5, ADDITIONAL: 6

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: 300f7df1701700c36fad4aaa5db15ed9c93066602704356e (good)
;; QUESTION SECTION:
;www.baidu.com.                 IN      A

;; ANSWER SECTION:
www.baidu.com.          1200    IN      CNAME   www.a.shifen.com.
www.a.shifen.com.       300     IN      A       220.181.38.150
www.a.shifen.com.       300     IN      A       220.181.38.149

;; AUTHORITY SECTION:
a.shifen.com.           1199    IN      NS      ns4.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns1.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns3.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns5.a.shifen.com.
a.shifen.com.           1199    IN      NS      ns2.a.shifen.com.

;; ADDITIONAL SECTION:
ns5.a.shifen.com.       1199    IN      A       180.76.76.95
ns3.a.shifen.com.       1199    IN      A       112.80.255.253
ns2.a.shifen.com.       1199    IN      A       220.181.33.32
ns1.a.shifen.com.       1199    IN      A       61.135.165.224
ns4.a.shifen.com.       1199    IN      A       14.215.177.229

;; Query time: 1567 msec
;; SERVER: 192.168.20.160#53(192.168.20.160)
;; WHEN: Thu Oct 24 16:20:41 CST 2019
;; MSG SIZE  rcvd: 299

参考文档
https://bind9.readthedocs.io/en/latest/
http://www.zytrax.com/books/dns/ch4/
https://www.isc.org/bind/
https://datatracker.ietf.org/doc/rfc1996
https://linux.cn/article-4735-1.html

猜你喜欢

转载自blog.csdn.net/zsx0728/article/details/102718012