广州睿东网络科技有限公司是国内最专业的香港空间,云主机,香港VPS,香港服务器租用提供商,专注为国内站长提供高速且稳定的香港空间,云主机,香港VPS,香港服务器租用,欢迎您的选购!
当前位置:首页 -> 香港主机 -> 美国空间

CentOS 7系统上架设DNS服务

云服务器 34℃ 1884评论

文档说明:

本文档以一个案例来介绍如何在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

投诉
喜欢 (1884)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: