设为首页 收藏本站
查看: 601|回复: 0

[经验分享] CentOS 7系统上架设DNS服务

[复制链接]

尚未签到

发表于 2018-4-28 12:49:09 | 显示全部楼层 |阅读模式
  文档说明:
  本文档以一个案例来介绍如何在CentOS 7系统上部署DNS服务。该案例仅是我对如何部署DNS服务的知识总结,并非是生产环境中存在的案例。并且,该案例中用到的CentOS系统均是安装在VMware虚拟机内的,虽然一般情况下这不会有什么不妥,但还是特别说明一下。
  案例说明:
  本案例使用了两台VMware虚拟机。两台虚拟机上均安装CentOS 7(详细版本号为7.0.1406,核心版本号为3.10.0-123.el7.x86_64),其中一台虚拟机用于模拟Master DNS服务器(假设IP为172.31.2.2),另一台虚拟机用于模拟Slave DNS服务器(假设IP为172.31.2.3)。
  并且,假设DNS服务器所在园区网有自己的合法域名,为speedsnail.com,允许所有来源的主机对该域名进行解析。而当园区网内的主机要访问外网域名时,DNS服务器会先查本地缓存,查不到则将该解析请求转发给ISP的DNS服务器(假设IP为202.96.128.86和202.96.128.166),而不是转发给.(root)服务器。并且,只会对内网主机的解析请求进行转发(假设内网网段范围为172.31.0.0/16),而不会对外网主机的解析请求进行转发。
  DNS服务简要介绍:
  DNS服务由BIND软件提供,启动后服务名为named,管理工具为rndc,debug工具为dig。主要配置文件为/etc/named.conf
  要架设本案例中DNS服务,可按照如下步骤进行:
  1.      在chroot环境下安装BIND软件
  要安装BIND软件,并让它运行在chroot环境下。那么只需安装bind-chroot软件,其它软件(包括BIND软件本身)也会自动进行安装,也即只需执行命令:
[root@localhost~]# yum install bind-chroot

  执行上述命令后,yum程序就提示安装/升级下述软件了:

  安装完成后,就需要启动named-chroot服务,并将它设置为开机启动:
[root@localhost ~]# systemctl start named-chroot

[root@localhost ~]# systemctl enablenamed-chroot

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

  2.      设定主DNS服务器上的配置文件/etc/named.conf
  在修改主DNS服务器上的配置文件/etc/named.conf之前,先对其备份:
[root@localhost~]#cp –a /etc/named.conf/etc/named.conf.raw

  然后将其内容修改成如下所示:
  -------------------------------------------------------------------------------------------------------------------------------------
  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 {                      //(接上面)当然,在转发之前,还会先查本地缓存
  202.96.128.86;
  202.96.128.166;
  };
  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 "speedsnail.com" IN {                            //设定域speedsnail.com的语句
  type master;                                  //指明本服务器是这个域的主DNS服务器
  file "speedsnail.com.zone";                    //指定这个域的配置文件为/var/named/speedsnail.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配置文件
  在上面的配置文件named.conf中,因为有定义一个正向解析的域speedsnail.com,所以也要设定这个域的配置文件speedsnail.com.zone。在工作目录/var/named下创建这个配置文件,并将它的内容修改成如下所示:
  -------------------------------------------------------------------------------------------------------------------------------------
  $ORIGIN speedsnail.com.
  $TTL 86400
  ;
  ;在zone的配置文件中,它是以分号来作为批注语句标识符的。
  ;修改这个配置文件时,要注意,名称最后面没有加句点的是主机名,最后面加了句点的是FQDN(除了$ORIGIN那里)。
  ;$ORIGIN那里填域名。下面的@符号会引用这里填写的值。如果不填,则会引用主配置文件中zone语句后面的值。
  ;$TTL表示timeto live值,表示当其它DNS查询到本zone的DNS记录时,这个记录能在它的DNS缓存中存在多久,单位为秒。
  ;
  @      IN  SOA         dns1.speedsnail.com.  xie.speedsnail.com.  (
  2015040101
  21600
  3600
  604800
  86400 )
  ;
  ;SOA后面的两个参数分别是主DNS服务器主机名和管理者邮箱(xie@speedsnail.com)。因为@符号有特殊含义,所以写成这样。
  ;括号内的第一个参数是序号,代表本配置文档的新旧,序号越大,表示越新。每次修改本文档后,都要将这个值改大。
  ;第二个参数是刷新频率,表示slave隔多久会跟master比对一次配置档案,单位为秒。
  ;第三个参数是失败重新尝试时间,单位为秒
  ;第四个参数是失效时间,单位为秒。
  ;在BIND9中,第五个参数表示其它DNS服务器能缓存negative answers的时间,单位为秒。
  ;
  @      IN  NS          dns1.speedsnail.com.
  IN  NS          dns2.speedsnail.com.
  dns1   IN  A            172.31.2.2
  dns2   IN  A            172.31.2.3
  ;
  ;类型NS定义指定域的DNS服务器主机名(如dns1.speedsnail.com),不管是主DNS还是从DNS。
  ;类型A定义指定主机(如dns1)的IP地址。如果是使用的IPv6地址,则需使用类型AAAA。
  ;
  @         IN  MX  10     mail1.speedsnail.com.
  IN  MX  20     mail2.speedsnail.com.
  mail1    IN  A              172.31.2.4
  mail2    IN  A              172.31.2.5
  ;
  ;类型MX定义指定域的邮件服务器主机名(如mail1.speedsnail.com)。
  ;MX后面的数字为优先级,越小越优先。同样的优先级值则可以在多台邮件服务器之间进行负载分担。
  ;
  www     IN  CNAME      servs.speedsnail.com.
  ftp        IN  CNAME     servs.speedsnail.com.
  servs    IN   A              172.31.2.6
  ;
  ;类型CNAME用于定义别名。通常用于同一台主机提供多个服务的情况。
  ;以这里的设定为例,当要解析ftp.speedsnail.com的IP时,它会解析成主机servs.speedsnail.com的IP。
  ;
  forum   IN A              172.31.2.7
  travel    IN A              172.31.2.8
  IN A              172.31.2.9
  ;
  ;如上面所示,也可以直接设定某一台主机(如forum.speedsnail.com)的IP。
  ;同一台主机(如travel.speedsnail.com)也可以设定多个IP。
  -------------------------------------------------------------------------------------------------------------------------------------
  4.      设置从DNS服务器
  重复第1个步骤,给从DNS服务器安装bind-chroot软件,然后设置开机启动并将它开启。做好后,就修改从DNS服务器的主配置文件/etc/named.conf。从DNS的主配置文件与主DNS的基本相同,因此直接把配置复制过去就行,但zone语句需要进行修改。如下所示,从DNS的named.conf配置文件中的zone语句:
  -------------------------------------------------------------------------------------------------------------------------------------
  zone "speedsnail.com" IN {
  type slave;                                    //指明本服务器是这个域的从DNS服务器
  file "slaves/speedsnail.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.      设置named服务
  在主DNS和从DNS服务器上,启动named服务,并将它设置为开机启动:
[root@localhost~]# systemctl start named

[root@localhost~]# systemctl enable named

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

  7.      测试与验证
  默认情况下,DNS服务的日志信息会放置到/var/log/messages文档中。如果有修改配置文件,并启动或重启named服务的话,建议第一时间先查看这个日志文档,看有没有报错:

  从DNS服务器中关于zone配置文件更新的日志:

  检查DNS服务的端口(端口53)是否有开启:

  使用dig命令在从DNS上测试主DNS能否正常解析外网网址:

  使用dig命令在从DNS上测试主DNS能否正常解析自己定义的网址:

  验证DNS Forwarders是否有正常工作:

  从上面的截图可以看出,当我在主DNS服务器(172.31.2.2)上指定DNS为自己去解析jilupian.youku.com时,抓包结果显示,服务器确实将DNS查询转发给了我所配置的ISP的DNS中的一个(202.96.128.166),这表明Forwarders有配置成功。
  在本文档最前面的案例说明部分,有提到允许内网主机的解析请求而不允许外网主机的解析请求,并且允许所有主机对域speedsnail.com的解析请求。为了验证这种限制机制是否能生效,先将主DNS服务器上的named.conf配置文件修改成如下所示:

  这样修改的话,仍然是所有主机能对域speedsnail.com进行解析,但只有主DNS服务器(172.31.2.2)自身能解析其它的域。重启主DNS上的named服务以让修改生效。然后,在从DNS服务器(172.31.2.3)上进行测试:

  可以看到,以172.31.2.2为DNS,外网网址(www.baidu.com)无法解析,而内网网址(www.speedsnail.com)仍然可以解析,这说明,限制解析请求来源IP的设定是正确的。主DNS服务器上的日志也验证了这一点:

  总结:
  从DNS软件自身的设定方面来说,在CentOS 7上部署DNS与在更早的系统上部署DNS并没有太大差别,不过底层机制可能有所改变。从系统方面来说,CentOS 7的应用程序服务管理和防火墙管理有所改变,如这篇文章里面使用了systemctl和firewall-cmd,而没有使用chkconfig和iptables。
  可用资料:
  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.pdfBv9ARM.html:BIND 9管理参考手册
  https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux:Networking Guide手册中有关于DNS服务器架设和配置的介绍。
  附件是我这篇文章里使用到的几个配置文件,有需要可下载。
  本文出自 “技术永不止步” 博客,请务必保留此出处http://techsnail.blog.51cto.com/9807313/1627731

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-453173-1-1.html 上篇帖子: CentOS7+Mysql 下篇帖子: PXE+kickstart实现自动安装centOS6.5
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表