DNS是Domain Name System 域名系统的简称,DNS可以提供为计算机,服务以及接入互联网或者局域网的任何资源提供分层的名称解析功能。DNS提供很多功能,但是最主要的是进行域名与IP地址的之间的解析。域名是分级的,一般分为:主机名.三级域名.二级域名.顶级域名.。注意,最后有一个点代表的是根域,是所有的域名的起点。
一、安装DNS软件
centos7下的DNS软件主要是伯克利加州大学研发的BIND(Berkeley Internet Name)。bind-utils软件包提供DNS查询工具,如dig,host,nslookup等。
yum -y install bindyum -y install bind-utils
配置文件解析
BIND配置文件主要分为主配置文件与域数据记录文件,主配置文件包括很多使用花括号的引起来的定义语句,在定义语句中可以设置很多个选项,主配置文件的核心功能就是定义域,以及告知计算机到哪里可以找到响应域的数据记文件。而域数据记录文件则存储具体的域名与IP之间的解析记录,DNS通过读域数据记录文件来解答客户端的查询请求。
主配置文件一般为/etc/named.conf
典型的主配置文件语法如下
statement_name {option1;option2;... ...;};
以下为/etc/named.conf文件中常用的定义语句
acl 语句允许预定义一组主机,从而控制允许还是拒绝他人访问域名服务器,BIND预定义了一些主机访问控制列表,其中any可以匹配任意IP地址,localhost可以·匹配·本地系统上所有的IP地址,localnets匹配本地系统所链接的任意网络,none将不匹配任何ip地址。
以下为定义的acl控制列表,一个为黑名单,一个为白名单。
acl black {172.16.0.0/16;192.168.9.12;};acl white {10.0.0.0/8;192.168.0.0/24;}options {allow-query { white ; };blackhole { black; };};
options语句用来定义全局配置选项,在全局配置中至少要定义一个工作路径,默认工作路径为var/named/,具体的常见参数如下
directory 设置域名服务的工作目录,默认为/var/nameddump-file 运行rndc dumpdb备份缓存资料后保存的文件路径与名称statistics-file 运行rndc stats后,统计信息的保存路径与名称listen-on port 指定监听的IPv4网络接口allow-query 指定哪些主机可以查询服务器的权威解析记录allow-query-cache 指定哪些主机可以通过服务器查询非权威的解析数据,如递归查询数据blackhole 设置拒绝哪些主机的查询请求recursion 是否允许进行递归查询forwards 指定一个IP地址,所有对本服务器的查询将转发到该IP进行解析max-cache-size 设置缓存文件的最大容量
zone语句用来定义域及相关选项,定义域也就意味着你希望以后维护自己公司的域名解析。该语句的中的重点选项有type域file,以下为zone语句内常用的选项及描述
type 设置域类型,类型可以是: hint:当本地找不到相关解析后,可以查询根域名服务器 maser:定义权威域名服务器 slave:定义辅助域名服务器 forward:定义转发域名服务器file 定义域数据文件,文件保存在directory所定义的目录下notify 定于域数据文件,文件保存在directory所定义的目录下master 定义主域名服务器IP地址,当type设置为slave后此选项才有效allow-update 允许哪些主机动态更新域数据信息allow-tansfer 哪些从服务器可以从主服务器下载数据文件
以下为简单的zone语句实例,example.com是定义的域,tpye定义为本机为example.com域的主域名服务器,该域的解析文件保存在example.com.zone文件中,该文件保存在/var/named/目录下。当定义方向解析域时,需要将网络地址段反过来输入,并以固定的in-addr.arpa格式结尾。通过定义hint的根域,这样当客户端查询不属于自己维护的域名时,可以根据根服务器进行迭代查询,最终返回正确的结果,全球的根域名服务器信息保存在named.ca文件中,该文件时安装完BIND软件后自动生成的模板文件,我们可以在/usr/share/doc/bind-9.9.4/sample/var/named/目录下找到它。
Zone "." IN { type hint; file "named.ca";};zone "example.com" IN { type master; file "example.com.zone";};zone "0.168.0.192.in-addr.arpa" IN { type master file "192.168.0.zone";};
在BIND软件的主配置文件中,如果定义了zone语句,还需要额外创建域数据文件。默认域数据文件被存储在/var/named目录下,文件名称由zone语句中的file选项设定。数据文件分为正向解析数据文件和反向数据文件,正向解析文件保存了域名到IP地址的映射记录,反向解析文件保存了IP地址到域名的映射记录,以下为常用的记录类型及描述
SOA记录 域权威记录,说明本机服务器为该域的管理服务器NS记录 域名服务器记录A记录 正向解析记录,域名到地址的映射PTR记录 反向解析记录,IP地址到域名的映射CNAME记录 别名记录,为主机添加别名MX记录 邮件记录,指定域内的邮件服务器,需要指定优先级
以下就举例说明正向解析域数据文件,说明各个语法格式。
TTL的值为DNS记录的缓存时间,该值是其他域名服务器将数据存放在缓存中的时间,1D代表一天
SOA后面记录的root.example.com.代表域的权威服务器,jacob.google.com是管理员的邮箱,由于@在数据文件中的代表特殊含义,这里使用.来代表@符号
NS记录代表域名服务器记录,如果由多个域名服务器,则可以添加多个NS记录,但是每个NS记录下面都需要由对应的A记录
A记录为正向解析记录,格式为在域名后面输入相应的IP地址
IN代表Internet
MX记录指定的邮件服务器时,可以设置优先级
最后CNAME记录为别名,可以使用web.example.com来代表www.example.com具体的配置文件如下:
$TTL 1D@ IN SOA root.example.com ,jacob.goole.com. ( 0 1D 1N 1W 3H) IN NS root.example.com. IN MX 10 mail.example.com. root.example.com. IN A 172.16.0.254 www.example.com. IN A 172.16.0.200 IN A 172.16.0.201 ftp.example.com. IN A 172.16.0.100 mail IN A 172.16.0.25 web IN A CHAME www
注意:
1、zone语句后定义的域对于数据文件的简写相当重要,如果区数据为你教案不以"."结尾的名称后会被自动加上该域名称
2、数据文件中@符号代表zone所以定义的域名称
3、如果在数据文件中某条记录名称为空格或者制表符,那么BIND系统会直使用上一条记录的名称
4、如果同一个域名设置多个A记录,则客户请求该域名解析时,服务器会以轮询的方式将结果返回给客户端,一定程度上实现负载均衡
二、部署域名服务器
搭建域名服务器,域名设定为www.chucloud.com,正向解析的域名,网络地址为172.31.208.0/24,按照以下三台进行
服务器IP 服务器名称 功能描述
172.31.208.80 dns.chucloud.com 域名服务器
172.31.208.81 ntp.chucloud.com 时间服务器
mail.chucloud.com 邮件服务器
172.31.208.82 www.chucloud.com 网站服务器
2.1安装软件
yum install -y bind-utlis
2.2修改配置文件
chown root.named /etc/named.confvim /etc/named.conf
按照以下修改
acl black { #黑名单172.31.101.0/24;};acl white { #白名单172.31.208.0/24;};options { listen-on port 53 { any; }; #定义任何主机都可以使用53端口查询 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { white; }; #允许白名单查询 blackhole { black; }; #禁止黑名单查询 forwarders { #设置转发查询 223.5.5.5; #公网DNS服务器 114.114.114.114; }
定义zone
zone "." IN { type hint; file "named.ca";};zone "chucloud.com" IN { type master; file "chucloud.com.zone";};zone "208.31.172.in-addr.arpa" IN { type master; file "208.31.172.zone";};
注意:
1、反向解析记录的写法和IP地址是反过来了,172.31.208.0 写为208.31.172.in-addr.arpa
2.3 创建区数据文件
主配置文件仅是对zone域的定义,关于域内主机的具体记录的解析,还需要依赖于数据文件的内容,常见的域名解析有正向解析,反向解析记录,CNAME记录以及MX记录等,可以根据模板创建具体的区数据解析文件
,这些文件的创建可以根据软件包中提供的named.loalhost文件作为模板
cd /usr/share/doc/bind-9.9.4/sample/var/named/cp /usr/share/doc/bind-9.9.4/sample/var/named/named.ca /var/named/chown root.named /var/named/named.ca cp /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost /var/named/chucloud.com.zone #复制模板文件并重命名为chucloud.com.zonechown root.named /var/named/chucloud.com.zonevim /var/named/chucloud.com.zone #编辑区域文件
按照设定的内容编辑区域文件
$TTL 1D@ IN SOA dns.chucloud.com. jacob.abc.com. ( 0 1D 1H 1W 3H ) NS dns.chucloud.com. MX 10 mail.chucloud.com.dns IN A 172.31.208.80ntp.chucloud.com. IN A 172.31.208.81mail.chucloud.com. IN A 172.31.208.81www.chucloud.com. IN A 172.31.208.82 #完整域名一定以.结尾web IN CNAME www #别名
注意:
1、注意@符号
2、A记录行前面一定不能有空格,不然报错
3、完整域名必须以"."结尾
4、加上管理员邮箱“jacob.chucloud.com. "
然后新建一个反向解析文件208.31.172.zone,内容如下
$TTL 1D
@ IN SOA dns.chucloud.com. jacob.chucloud.com (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.chucloud.com.
MX 10 mail.chucloud.com.
80 IN PTR dns.chucloud.com.
81 IN PTR ntp.chucloud.com.
81 IN PTR mail.chucloud.com.
82 IN PTR www.chucloud.com.
82 IN PTR web.chucloud.com.
注意:
1、注意@符号
2、A记录行前面一定不能有空格,不然报错
3、完整域名必须以"."结尾
4、因为配置文件named.conf中反向记录区域使用“208.31.172.in-addr.arpa“,所以只用写最后一个IP地址最后主机位,如82
5、如果配置文件named.conf中反向记录使用”31.172.in-addr.arpa",则区域文件记录IP地址记录应该写82.208
三、服务管理
在域名服务器配置完成后,需要开启防火墙指定端口53,同时我们可以使用命令检查配置文件是否有错误
named-checkconf /etc/named.conf #检查配置文件named-checkzone 208.31.172.in-addr.arpa /var/named/208.31.172.zone #检查反向解析zone文件named-checkzone chucloud.com.zone /var/named/chucloud.com.zone #检查正向解析zone文件firewall-cmd --permanent --add-port=53/tcp #使用firewall服务时需要清理iptables规则避免冲突firewall-cmd --permanent --add-port=53/udpsystemctl start namedsystemctl enable named
四、客户端测试
在各个主机上配置好DNS服务器为172.31.208.80后,进行测试
yum install bind-utils #安装DNS解析客户端
在172.31.208.81上
ping www.chucloud.com
ping web.chucloud.com
可见解析到172.31.208.82
ping www.baidu.com
ping www.163.com
可见DNS服务器转发查询设置生效
使用域名解析名工具查询
nslookup www.chucloud.com
nslookup 172.31.208.82
dig www.chucloud.com
host www.chucloud.com
五、思考
1、很多时候可以用chroot-bind程序,使用chroot来对DNS进行安全加固,但是我没有实验成功
2、CentOS7下安装了bind-chroot之后,若要使用named-chroot.service,则需要关闭named.service。两者只能运行一个。
3、可以配置从域名服务器保证负载均衡和可靠性