Centos7上搭建DNS服务

本文介绍Centos7上搭建bind DNS服务;

基本环境:
    Centos7.2 x86_64为 Master DNS服务器(172.31.2.2)
    Centos7.2 x86_64为 slave服务器(172.31.2.3)
    DNS服务器的合法域名:ly.com
    要求:允许所有来源的主机对改域名进行解析,内网其他主机访问外网时候走ISP的DNS,只解析内网IP主机(172.31.0.0/16)的请求进行转发,不会对外网主机的解析请求进行转发。

说明:
   DNS服务由bind软件提供,启动后服务名为named,管理工具为rndc,debug工具为dig,主要配置文件/etc/named.conf
安装部署bind如下:

1.在chroot环境下安装BIND

  #安装bind
yum install bind-chroot
  #启动bind
systemctl start named-chroot
  #开机启动
systemctl enable named-chroot
  #验证bind状态
systemctl status named-chroot

2.配置配置文件(/etc/named.conf)

  #备份配置文件
cp –a /etc/named.conf/etc/named.conf.raw
  #修改配置文件
vim /etc/named.conf

options {
       listen-on port 53 { any; };           //侦听来自任意源IP对端口53的访问
       listen-on-v6 port 53 { ::1; };          //设定IPv6侦听端口的,因为没有用到,所以保持默认
       directory    "/var/named";         //该项设定工作目录
       dump-file   "/var/named/data/cache_dump.db";   //执行命令rndcdumpdb后会把database保存到该指定档案
       statistics-file "/var/named/data/named_stats.txt";   //执行命令rndcstats后会把统计数据保存到该指定档案
       memstatistics-file "/var/named/data/named_mem_stats.txt";  //记录内存使用数据的文档路径
       allow-query  { 172.31.0.0/16; };     //指定只有内网网段主机才能进行DNS查询(authoritative data)
       recursion yes;                     //这个选项控制是否开启服务器的递归查询功能
       allow-recursion { 172.31.0.0/16; };  //指定只有内网网段主机才能进行递归查询
       forward first;                     //接收到查询请求时,会先转发到forwarders指定的DNS,查不到再执行递归
       forwarders {                      //(接上面)当然,在转发之前,还会先查本地缓存
                223.5.5.5;
                223.6.6.6;
       };
     dnssec-enable no;               //这部分是设置DNSSEC的。把它关掉,默认为yes。
     dnssec-validationno;             //关掉,默认为yes。
     dnssec-lookaside no;             //关掉,默认为auto
     bindkeys-file "/etc/named.iscdlv.key";
     managed-keys-directory "/var/named/dynamic";
     pid-file"/run/named/named.pid";               //named服务的PID文件存放位置,保持默认。
     session-keyfile "/run/named/session.key";       //TSIG会话密钥存放文件路径,保持默认。
};
logging {                                             //设置日志的语句
     channel default_debug {
            file"data/named.run";
            severity dynamic;
       };
};
zone "." IN {                                           //设定root zone的语句
       type hint;                                     //hint类型专门用于root域
       file "named.ca";                               //root域的配置文件为/var/named/named.ca
};
zone "ly.com" IN {                            //设定域ly.com的语句
       type master;                                  //指明本服务器是这个域的主DNS服务器
       file "ly.com.zone";                    //指定这个域的配置文件为/var/named/ly.com.zone
       allow-transfer { 172.31.2.3; };                   //指定这个域的从DNS服务器的IP
       allow-query { any; };                           //允许来自任意IP对这个域的解析请求
};
include"/etc/named.rfc1912.zones";                   //zone语句也可以写在这个文件里面
include "/etc/named.root.key";                         //root域的key文件,与DNSSEC有关

3.设定DNS服务器上zone的配置文件

vi /var/named/ly.com.zone
$ORIGIN ly.com.
$TTL 86400
;
;在zone的配置文件中,它是以分号来作为批注语句标识符的。
;修改这个配置文件时,要注意,名称最后面没有加句点的是主机名,最后面加了句点的是FQDN(除了$ORIGIN那里)。
;$ORIGIN那里填域名。下面的@符号会引用这里填写的值。如果不填,则会引用主配置文件中zone语句后面的值。
;$TTL表示timeto live值,表示当其它DNS查询到本zone的DNS记录时,这个记录能在它的DNS缓存中存在多久,单位为秒。
@ IN SOA dns1.ly.com. xie.ly.com.  (
        2017083012
        21600
        3600
        604800
        86400 )
;
;SOA后面的两个参数分别是主DNS服务器主机名和管理者邮箱(xie@ly.com)。因为@符号有特殊含义,所以写成这样。
;括号内的第一个参数是序号,代表本配置文档的新旧,序号越大,表示越新。每次修改本文档后,都要将这个值改大。
;第二个参数是刷新频率,表示slave隔多久会跟master比对一次配置档案,单位为秒。
;第三个参数是失败重新尝试时间,单位为秒
;第四个参数是失效时间,单位为秒。
;在BIND9中,第五个参数表示其它DNS服务器能缓存negative answers的时间,单位为秒。
;
@ IN NS dns1.ly.com.
  IN NS dns2.ly.com.
dns1  IN  A  172.31.2.2
dns2  IN  A  172.31.2.3
;
;类型NS定义指定域的DNS服务器主机名(如dns1.ly.com),不管是主DNS还是从DNS。
;类型A定义指定主机(如dns1)的IP地址。如果是使用的IPv6地址,则需使用类型AAAA。
;
@  IN  MX  10  mail1.ly.com.
   IN  MX  20  mail2.ly.com.
mail1  IN  A  172.31.2.4
mail2  IN  A  172.31.2.5
;
;类型MX定义指定域的邮件服务器主机名(如mail1.ly.com)。
;MX后面的数字为优先级,越小越优先。同样的优先级值则可以在多台邮件服务器之间进行负载分担。
;
www  IN  CNAME  servs.ly.com.
ftp  IN  CNAME  servs.ly.com.
servs  IN  A  172.31.2.6
;
;类型CNAME用于定义别名。通常用于同一台主机提供多个服务的情况。
;以这里的设定为例,当要解析ftp.ly.com的IP时,它会解析成主机servs.ly.com的IP。
;
forum  IN  A   172.31.2.7
travel IN  A   172.31.2.8
       IN  A   172.31.2.9
;
;如上面所示,也可以直接设定某一台主机(如forum.ly.com)的IP。
;同一台主机(如travel.ly.com)也可以设定多个IP。

4.设置DNS服务器

设置从DNS服务器
  重复第1个步骤,给从DNS服务器安装bind-chroot软件,然后设置开机启动并将它开启。做好后,就修改从DNS服务器的主配置文件/etc/named.conf。从DNS的主配置文件与主DNS的基本相同,因此直接把配置复制过去就行,但zone语句需要进行修改。如下所示,从DNS的named.conf配置文件中的zone语句:

zone "ly.com" IN {
       type slave;                                    //指明本服务器是这个域的从DNS服务器
       file "slaves/ly.com.zone";              //从DNS的zone配置文件一定要放置在工作目录下的slaves目录中
       masters { 172.31.2.2; };                         //指定这个域的主DNS服务器的IP
       allow-query { any; };                           //允许来自任意IP对这个域的解析请求
};

  与主DNS不同的是,从DNS上的zone配置文件不需要手动建立,它会通过同步自动建立。因此,从DNS上的配置文件这样就设置好了。

5.开放端口

  在主DNS和从DNS服务器上放通tcp和udp端口53:
[root@localhost~]# firewall-cmd --zone=public--add-port=53/tcp --permanent
[root@localhost~]# firewall-cmd --zone=public--add-port=53/udp --permanent

  重启防火墙以让更改立刻生效:
[root@localhost~]# firewall-cmd –reload
  可使用以下命令检查配置是否成功:
[root@localhost~]# firewall-cmd --list-all

6.设置开机启动

  在主DNS和从DNS服务器上,启动named服务,并将它设置为开机启动:
[root@localhost~]# systemctl start named
[root@localhost~]# systemctl enable named

  上述命令执行完后,如果没什么问题,可使用下述命令来验证named服务的状态:
[root@localhost~]# systemctl status named

7.测试和验证

  7.1.默认情况下,DNS服务的日志信息会放置到/var/log/messages文档中。如果有修改配置文件,并启动或重启named服务的话,建议第一时间先查看这个日志文档,看有没有报错:
  7.2从DNS服务器中关于zone配置文件更新的日志:
  7.3检查DNS服务的端口(端口53)是否有开启:
  7.4使用dig命令在从DNS上测试主DNS能否正常解析外网网址:
  7.5使用dig命令在从DNS上测试主DNS能否正常解析自己定义的网址:
  7.6 验证DNS Forwarders是否有正常工作:
允许内网主机的解析请求而不允许外网主机的解析请求,并且允许所有主机对域ly.com的解析请求。
为了验证这种限制机制是否能生效,先将主DNS服务器上的named.conf配置文件修改成如下所示:
这样修改的话,仍然是所有主机能对域ly.com进行解析,但只有主DNS服务器(172.31.2.2)自身能解析其它的域。
重启主DNS上的named服务以让修改生效。然后,在从DNS服务器(172.31.2.3)上进行测试:
可以看到,以172.31.2.2为DNS,外网网址(www.baidu.com)无法解析,而内网网址(www.ly.com)仍然可以解析,这说明,限制解析请求来源IP的设定是正确的。
主DNS服务器上的日志也验证了这一点:

8.其他linxu内网机器测试

指定DNS服务器
CentOS7指定DNS服务器方法:

systemctl restart NetworkManager.service
nmcli connection show
nmcli con mod eth0 ipv4.dns "172.31.2.2 223.5.5.5"
nmcli con up eth0

利用dig工具测试主DNS能否正常解析外网网址:
# 如果没安装dig命令,可以使用下面命令安装
yum install bind-utils
dig @172.31.2.2 www.baidu.com

参考:

可用资料:
named.conf(5):说明/etc/named.conf中各语句格式的man文档
/usr/share/doc/bind*/sample/etc/named.conf:/etc/named.conf的配置范例
/usr/share/doc/bind*/sample/etc/named.rfc1912.zones:与文档/etc/named.rfc1912.zones的默认内容是一样的
/usr/share/doc/bind*/Bv9ARM.pdf或Bv9ARM.html:BIND 9管理参考手册
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux:Networking Guide手册中有关于DNS服务器架设和配置的介绍。

8 条评论

发表评论

*