DNS请求流程
Client –>hosts文件 –>DNS Service Local Cache –> DNS Server (recursion) –> Server Cache –>iteration(迭代) –> 根–> 顶级域名DNS–>二级域名DNS…
DNS服务资源记录概念
区域解析库:由众多RR组成:
资源记录: Resource Record, RR
记录类型: A, AAAA, PTR, SOA, NS, CNAME, MX
SOA: Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
A: internet Address,作用, FQDN –> IP
AAAA:FQDN –> IPv6
PTR:PoinTeR, IP –> FQDN
NS:Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录
MX:Mail eXchanger,邮件交换器
资源记录格式
-
资源记录定义的格式:
语法: name [TTL] IN rr_type value
注意:
-
(1) TTL可从全局继承,所以以下记录都没有写TTL
(2) @可用于引用当前区域的名字
(3) 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
(4) 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
SOA记录
name: 当前区域的名字,例如“baidu.com.”
value: 有多部分组成
(1) 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
(2) 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换,例如linuxedu.baidu.com
(3) 主从服务区域传输相关定义以及否定的答案的统一的TTL
例如:
baidu.com. 1D IN SOA ns.baidu.com. admin.baidu.com. (
2015042201 ;序列号
2H ;刷新时间
10M ;重试时间
1W ;过期时间
1D ;否定答案的TTL值,即错误查询的缓存时间
)
刷新时间:主DNS推送数据到从DNS服务器失败后再次推送的时间
重试时间:从DNS向主DNS拉取数据失败后再次拉取数据的时间
过期时间:再次推送或者拉取失败持续时间
NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.baidu.com.
注意:一个区域可以有多个NS记录
例如:
baidu.com. IN NS ns1.baidu.com.
baidu.com. IN NS ns2.baidu.com.
注意:
(1) 相邻的两个资源记录的name相同时,后续的可省略
(2) 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
MX记录
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
一个区域内, MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
例如:
baidu.com. IN MX 10 mx1.baidu.com.
IN MX 20 mx2.baidu.com.
注意:
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
A记录
name: 某主机的FQDN,例如www.baidu.com.
value: 主机名对应主机的IP地址
例如:
www.baidu.com. IN A 1.1.1.1
mx1.baidu.com. IN A 3.3.3.3
mx2.baidu.com. IN A 4.4.4.4
$GENERATE 1-254 HOST$ A 1.2.3.$
*.baidu.com. IN A 5.5.5.5 #如果用户输入wwww.baidu.com就会解析指定的IP
baidu.com. IN A 6.6.6.6 #用户直接输入baidu.com就可以解析IP
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
其他记录
AAAA:
name: FQDN
value: IPv6
PTR:
name: IP,有特定格式,把IP地址反过来写, 1.2.3.4,要写作4.3.2.1;而有特定后缀: in-addr.arpa.,所以完整写法为
: 4.3.2.1.in-addr.arpa.
value: FQDN
例如:
4.3.2.1.in-addr.arpa. IN PTR www.baidu.com.
如1.2.3为网络地址,可简写成:
4 IN PTR www.baidu.com.
注意:网络地址及后缀可省略;主机地址依然需要反着写
下面是自己写的DNS反向解析:
$TTL 1D
@ IN SOA dns.zhang.com. admin.zhang.com. (2 1D 2m 1W 3h)
NS dns.zhang.com.
6.6.168.192.in-addr.arpa. PTR dns.zhang.com.
7 PTR webser.zhang.com.
110 PTR mail.zhang.com.
别名记录
CNAME:
name: 别名的FQDN
value: 真正名字的FQDN
例如:
www.baidu.com. IN CNAME websrv.baidu.com.
也可以用于cdn加速设置
例如:
www.baidu.com. IN CNAME www.cdncloud.com.
www.cdncloud.com. IN A 111.111.111.123
DNS服务器搭建实例
[root@centos6 ~]# vi /etc/named.conf
options {
listen-on port 53 { localhost; }; #监听本机IP的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";
allow-query { any; }; //anyone can query
allow-transfer { 192.168.6.66; }; //用于主从结构,从服务器可以同步主服务器数据
recursion yes; #可以递归查询,如果本服务器没有结果可以到帮忙到根服务器查询
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
[root@centos6 ~]# vi /etc/named.rfc1912.zones
#添加正向解析
zone "zhang.com" IN {
type master;
file "zhang.com.zone";
};
#添加反向解析
zone "6.168.192.in-addr.arpa" IN {
type master;
file "192.168.6.loopback";
};
解析数据库文件默认在/var/named/目录下
[root@centos6 ~]# vi /var/named/zhang.com.zone
$TTL 86400 ; 1 day
@ IN SOA zhang.com. admin.zhang.com. (
1 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns.zhang.com.
MX 10 mail.zhang.com.
dns A 192.168.6.6
webser.zhang.com. A 192.168.6.7
mail A 192.168.6.110
www.zhang.com. CNAME webser.zhang.com.
zhang.com. A 192.168.6.6
* A 192.168.6.99
[root@centos6 ~]# vi /var/named/192.168.6.loopback
$TTL 1D
@ IN SOA dns.zhang.com. admin.zhang.com. (2 1D 2m 1W 3h)
NS dns.zhang.com.
6 PTR dns.zhang.com.
7 PTR webser.zhang.com.
110 PTR mail.zhang.com.
[root@centos6 ~]# service named restart
[root@centos6 ~]# dig www.zhang.com @127.0.0.1 #可以通过这个命令测试是否成功
[root@centos6 ~]# dig -x 192.168.6.6 @127.0.0.1 #可以通过这个命令测试反向解析是否成功
以上是配置DNS服务器整个过程,每次修改完配置文件记得要把serial编号加一。
子域
以下实例是父域和子域在不同服务器上,如果在同一台服务器上,直接可以当成父域的一条记录,直接上配置文件
父域服务器解析数据库
[root@centos6 ~]# vi /var/named/zhang.com.zone
$TTL 86400 ; 1 day
@ IN SOA zhang.com. admin.zhang.com. (
1 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns
son.zhang.com. NS dns2 #子域
dns2 A 192.168.6.16 #子域IP
dns A 192.168.6.6
子域服务器解析
[root@centos6 ~]# vi /etc/named.rfc1912.zones
zone "son.zhang.com" IN {
type master;
file "son.zhang.com.zone";
};
子域服务器解析数据库
[root@centos6 ~]# vi /var/named/son.zhang.com.zone
$TTL 86400 ; 1 day
@ IN SOA son.zhang admin.zhang.com. (
1 ; serial
86400 ; refresh (1 day)
3600 ; retry (1 hour)
604800 ; expire (1 week)
10800 ; minimum (3 hours)
)
NS dns.son.zhang.com.
MX 10 mail
dns.son.zhang.com. A 192.168.6.16
mail A 192.168.6.160
webser A 192.168.6.190
www CNAME webser
* A 192.168.6.123
son.zhang.com. A 192.168.6.133
从DNS服务器
主服务器
[root@centos6 ~]# vi /etc/named.conf
options {
listen-on port 53 { localhost; }; #监听本机IP的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";
allow-query { any; }; //anyone can query
allow-transfer { 192.168.6.66; }; //用于主从结构,指定哪个服务器可以同步数据,默认允许所有主机,192.168.6.66是从服务器,这里只允许它同步数据
recursion yes; #可以递归查询,如果本服务器没有结果可以到帮忙到根服务器查询
dnssec-enable no;
dnssec-validation no;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
从服务器
[root@centos6 ~]# vi /etc/named.rfc1912.zones
zone "zhang.com" IN {
type slave;
masters { 192.168.6.6; };
file "slaves/zhang.com.zone";
};
只要主服务器开启区域传送,当从服务器重启服务时会自动拷贝一份主服务器上的解析数据库到slaves目录下,这时如果主DNS服务器宕机,从服务器也可以查询
总结
在配置的过程中可能会出现一些问题,在此总结下
- 首先要注意权限和属组的问题
-rw-r--r-- 1 named named 505 Sep 22 11:01 zhang.com.zone
#区域数据库的属组要为named,所有组要有读的权限,如果要拷贝记得加-p选项
- 在/etc/named.conf文件里的选项
listen-on port 53 { localhost; }; #监听本机53端口
allow-query { any; }; #允许所有主机查询
allow-transfer { 192.168.6.66; }; #开启区域传送,用在主从结构里,允许从服务器更新数据
recursion yes;
修改区域解析数据库后要增加版本号,否则数据不会更新,版本号不能超过10位数。
同步服务器间的时钟