1. DNS( Domain Name Service )介绍
DNS是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由域名解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
1.1 DNS树状结构图
1.2 DNS资源记录类型
资源记录有类型,用于资源的功能
SOA:Start Of Authority,起始授权
NS:NameServer,域名服务器
MX:Mail exchanger:邮件交换器
A:Address,(FQDN-->IP)
PTR:Poiter,IP-->FQDN
AAAA:Address,FQDN-->IPv6
CNAME:CanonicalName,别名记录
1.3 资源记录格式
name [ttl] IN rrtype value
例子:
www IN A 192.168.1.1
SOA:只能有一个
name:区域名称,通常可以简写为@,enzhi.com.
value:主DNS服务器的FQDN
注意:SOA必须是区域数据库文件的第一条记录
列子: @ 600 IN SOA ns.enzhi.com. dnsadmin.enzhi.com.(
序列号 ;serial number,十进制数字,不能超过10位,通常使用日期,例如:2016032201
刷新时间 ;每隔多久到服务器检查一次
重试时间 ;应该小于刷新时间
过期时间 ;
否定答案的ttl )
注意#dnsadmin.enzhi.com.是管理员邮箱地址@符使用.替换。
NS:可以有多条
name:区域名称,通常可以简写为@
value:dns服务器的FQDN(可以使用相对名称)
例子:@ 600 IN NS ns
A:
name:FQDN(可以使用相对名称)
value:IP
例子:
www 600 IN A 1.2.3.4
ftp 600 IN A 1.2.3.4
MX:可以有多个
name:区域名称,用于表示smtp服务器
value:包含优先级和FQDN
优先级:0-99,数字越小,级别越高
例子: @ 600 IN MX 10 mail
@ 600 IN MX 20 mail2
CNAME:
name:FQDN
value:FQDN
例子:ftp IN CNAME www
PTR: IP--->FQDN,只能定义在反向区域数据文件中,反向区域名称为逆向网络地址加.in-addr.arpa
name:IP,逆向的主机地址,例如:172.16.100.7的name为7.100
value:FQDN
例子:
4.3.2 600 IN PTR www.enzhi.com.
反向解析数据库文件:区域名称以逆向的网络地址,并以in.addr.arpa为后缀
第一条必须SOA
应该具有NS记录,但不能出现MX和A记录
较常见的即为PTR记录
名称为逆向的主机地址
2. BIND介绍
BIND是一种开源的DNS(Domain NameSystem)协议的实现,包含对域名的查询和响应所需的所有软件。它是互联网上最广泛使用的一种DNS服务器,对于类UNIX系统来说,已经成为事实上的标准。
BIND这个缩写来自于使用的第一个域,Berkeley Internet Name Domain,而不是Berkeley Internet Name Daemon。这个软件起源于20世纪八十年代初的Universityof California at Berkeley,是在DARPA授权下编写的。
2.1 安装BIND
生产环境中使用yum安装即可满足大部分的需求。
安装环境规划:
角色 | IP地址 | 主机名 |
DNS-MASTER | 192.168.233.135 | dns_master |
安装系统环境:
[root@dns_master ~]# cat/etc/redhat-release CentOS release 6.6 (Final) [root@dns_master ~]# uname -r 2.6.32-504.el6.x86_64 [root@dns_master ~]# uname -m x86_64
安装bind:
[root@dns_master ~]# yum -y install bind
#安装完成后bind的主配置文件在/etc/目录下名为named.conf。区域数据文件在/var/named/目录下。
[root@dns_master ~]# ls -l /etc/named* -rw-r----- 1 rootnamed 1008 Jul 19 2010 /etc/named.conf -rw-r--r-- 1 root named 2389 Mar 1621:25 /etc/named.iscdlv.key -rw-r----- 1 root named 931 Jun 21 2007 /etc/named.rfc1912.zones -rw-r--r-- 1 root named 487 Jul 19 2010 /etc/named.root.key [root@dns_master ~]# ls /var/named/ data dynamic named.ca named.empty named.localhost named.loopback slaves
2.2 named用户及用户组
要启动named服务需要以named用户的身份运行。当我们手动创建主配置文件或者区域数据文件后我们需要将属主改为root属组改为named用户,并将文件权限改为640.
[root@dns_master ~]# ll /etc/named.conf -rw-r----- 1 root named 1008 Jul 19 2010 /etc/named.conf [root@dns_master ~]# ll /var/named/ total 28 drwxrwx--- 2 named named 4096 Mar 1621:25 data drwxrwx--- 2 named named 4096 Mar 1621:25 dynamic -rw-r----- 1 root named 2075 Apr 23 2014 named.ca -rw-r----- 1 root named 152 Dec 15 2009 named.empty -rw-r----- 1 root named 152 Jun 21 2007 named.localhost -rw-r----- 1 root named 168 Dec 15 2009 named.loopback drwxrwx--- 2 named named 4096 Mar 1621:25 slaves
2.3 主配置文件介绍
主配置文件:定义区域。至少有三个区域:
根、localhost、127.0.0.1三个区域
区域数据文件:/var/named/
主配置文件:
options {
全局选项
};
zone {
定义区域
};
logging {
定义日志系统
};
2.4 自创建一个主配置文件
#自创建主配置文件必须有options全局段、根、localhost、127.0.0.1。每一行参数要以;号结尾。如下:
[root@dns_master ~]# cat /etc/named.conf options { directory "/var/named"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "named.localhost"; }; zone "1.0.0.127.in-addr.apra"IN { type master; file "named.loopback"; }; [root@dns_master ~]# chown root.named/etc/named.conf #语法测试检查 [root@dns_master ~]# /etc/init.d/namedconfigtest zone localhost/IN: loaded serial 0 zone 1.0.0.127.in-addr.apra/IN: loadedserial 0 #type类型有{hint|master|slave|forward}
2.5 案例演示
要求:创建一个DNS服务器域名为enzhi.com,IP地址192.168.233.135。具有以下资源记录:
www 192.168.233.10
mail 192.168.233.11
ftp的正式名称为www
ns 192.168.233.135
PTR 要求能反向解析
1.安装bind服务并创建主配置文件
[root@dns_master ~]# yum -y install bind [root@dns_master ~]# vi /etc/named.conf options { directory "/var/named"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "named.localhost"; }; zone "1.0.0.127.in-addr.apra"IN { type master; file "named.loopback"; }; zone "enzhi.com." IN { type master; file"enzhi.com.zone"; }; zone "233.168.192.in-addr.arpa" IN { type master; file"192.168.233.zone"; }; [root@dns_master ~]# named-checkconf [root@dns_master ~]# chown root.named/etc/named.conf [root@dns_master ~]# /etc/init.d/namedconfigtest zone localhost/IN: loaded serial 0 zone 1.0.0.127.in-addr.apra/IN: loadedserial 0
2.创建正向区域数据文件
[root@dns_master named]# vim enzhi.com.zone $TTL 600 @ IN SOA ns.enzhi.com. admin.enzhi.com. ( 2016032401 2H 5M 7D 1D ) IN NS ns IN MX 10 mail ns IN A 192.168.233.135 mail IN A 192.168.233.11 www IN A 192.168.233.10 ftp IN CNAME www
#检查区域配置文件
检查区域配置文件可以使用bind提供的二进制程序named-checkzone命令
命令格式:
named-checkzone “区域名称” 区域数据文件
[root@dns_master named]# named-checkzone"enzhi.com" enzhi.com.zone zone enzhi.com/IN: loaded serial2016032401 OK
3.创建反向区域数据文件
#创建反向区域数据文件复制正向的修改就行
[root@dns_master named]# vim 192.168.233.zone $TTL 600 @ IN SOA ns.enzhi.com. admin.enzhi.com. ( 2016032401 2H 5M 7D 1D ) @ IN NS ns.enzhi.com. 135 IN PTR ns.enzhi.com. 11 IN PTR mail.enzhi.com. 10 IN PTR www.enzhi.com. [root@dns_master named]# named-checkzone"233.168.192.in-addr.arpa" 192.168.233.zone zone 233.168.192.in-addr.arpa/IN: loadedserial 2016032401 OK
4.启动named服务
#启动前先做语法检查
[root@dns_master named]#/etc/init.d/named configtest zone localhost/IN: loaded serial 0 zone 1.0.0.127.in-addr.apra/IN: loadedserial 0 zone enzhi.com/IN: loaded serial2016032401 zone 233.168.192.in-addr.arpa/IN: loadedserial 2016032401 [root@dns_master named]#/etc/init.d/named start Generating /etc/rndc.key: [ OK ] Starting named: [ OK ] [root@dns_master named]# ss -tunl|grep53 udp UNCONN 0 0 192.168.233.135:53 *:* udp UNCONN 0 0 127.0.0.1:53 *:* tcp LISTEN 0 3 192.168.233.135:53 *:* tcp LISTEN 0 3 127.0.0.1:53 *:* tcp LISTEN 0 128 ::1:953 :::* tcp LISTEN 0 128 127.0.0.1:953 *:*
5.使用dig命令解析测试
#解析www.enzhi.com的A记录
[root@dns_master named]# dig -t Awww.enzhi.com @192.168.233.135
; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t A www.enzhi.com@192.168.233.135 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode:QUERY, status: NOERROR, id: 50422 ;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.enzhi.com. IN A ;; ANSWER SECTION: www.enzhi.com. 600 IN A 192.168.233.10 ;; AUTHORITY SECTION: enzhi.com. 600 IN NS ns.enzhi.com. ;; ADDITIONAL SECTION: ns.enzhi.com. 600 IN A 192.168.233.135 ;; Query time: 1 msec ;; SERVER:192.168.233.135#53(192.168.233.135) ;; WHEN: Thu Mar 24 11:35:22 2016 ;; MSG SIZE rcvd: 80
#解析enzhi.com的NS记录
[root@dns_master named]# dig -t NS enzhi.com @192.168.233.135 ; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -t NS enzhi.com@192.168.233.135 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode:QUERY, status: NOERROR, id: 54970 ;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;enzhi.com. IN NS ;; ANSWER SECTION: enzhi.com. 600 IN NS ns.enzhi.com. ;; ADDITIONAL SECTION: ns.enzhi.com. 600 IN A 192.168.233.135 ;; Query time: 0 msec ;; SERVER:192.168.233.135#53(192.168.233.135) ;; WHEN: Thu Mar 24 11:36:58 2016 ;; MSG SIZE rcvd: 60
#反向解析192.168.233.10是否能解析到www.enzhi.com域名上
[root@dns_master named]# dig -x 192.168.233.10@192.168.233.135 ; <<>> DiG9.8.2rc1-RedHat-9.8.2-0.37.rc1.el6_7.7 <<>> -x 192.168.233.10@192.168.233.135 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode:QUERY, status: NOERROR, id: 45072 ;; flags: qr aa rd ra; QUERY: 1, ANSWER:1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;10.233.168.192.in-addr.arpa. IN PTR ;; ANSWER SECTION: 10.233.168.192.in-addr.arpa. 600 IN PTR www.enzhi.com. ;; AUTHORITY SECTION: 233.168.192.in-addr.arpa. 600 IN NS ns.enzhi.com. ;; ADDITIONAL SECTION: ns.enzhi.com. 600 IN A 192.168.233.135 ;; Query time: 1 msec ;; SERVER:192.168.233.135#53(192.168.233.135) ;; WHEN: Thu Mar 24 11:38:44 2016 ;; MSG SIZE rcvd: 105