共计 11090 个字符,预计需要花费 28 分钟才能阅读完成。
1. TLD:Top Level Domain 顶级域名
组织域:.com, .net, .org, .gov, .edu, .mil
国家域:.iq, .tw, .hk, .jp, .cn, …
2. 域名分级
根域名:.
顶级域名:.com .edu .gov .int .net .cn .us .jp ……..
二级域名:baidu.com microsoft.com jd.com qq.com aliyun.com edu.cn
三级域名:map.baidu.com nankai.edu.cn
四级域名:www.nankai.edu.cn cs.nankai.edu.cn
3. DNS 查询类型
DNS 查询类型分为递归查询和迭代查询;
递归查询的意思是找了谁谁就一定要给出答案。那么允许递归的意思就是帮忙去找位置,如 A 对 B 允许递归,那么 B 询问 A 时,A 就去帮忙找答案;
迭代查询的意思是如果 A 不允许对 B 递归,那么 A 就会告诉 B 的下一层域的地址让 B 自己去找,如果迭代查询最终得出了答案,那一定是权威答案;
4. DNS 名称解析方式
正向解析:hostname —> IP
访问示例:
A 客户端请求 www.linuxidc.com --> 由 DNS 服务器完成(1、查询本地缓存记录和 hosts 文件,如果有直接返回,2、向 root"." 发起查询查询,查询.com 的 NS 记录返回其.com 的 NS 服务器))---> 再向.com 的 NS 服务器查询 "linuxidc.com" 域的 NS 服务器,并返回其结果值 ----> 根据 linuxidc 的 NS 服务器记录地址,---> NS 服务器查询其所对应的 www 主机所对应的 IP 地址,并返回给服务器。正向解析的层级如下:.
com
linuxidc
www
由于缓存是多层次缓存的,所以真正的查询可能并没有那么多步骤,上图的步骤是完全没有所需缓存的查询情况。假如某主机曾经向 DNS 服务器提交了 www.linuxidc.com 的查询,那么在 DNS 服务器上除了缓存了 www.linuxidc.com 的记录,还缓存了 ".com" 和 "linuxidc.com" 的记录,如果再有主机向该 DNS 服务器提交 ftp.linuxidc.com 的查询,那么将跳过 "." 和 ".com" 的查询过程直接向 linuxidc.com 发出查询请求。
反向解析:IP —> hostname
访问示例:
A 客户端想查询 IP 地址 4.2.3.1 反解记录 ---> 由 DNS 发起请求查询 "." 域,由 "." 返回其 ip-addr.arpa 的 NS 记录,--> 服务器查询 ip-addr.arpa 的 NS 服务器,由 NS 服务器返回 "1" 区域的 NS 服务器地址,并将结果返回到服务器 ---> 服务器查询 "1" 区域中的记录,由 "1" 区域返回 "2" 区域中的 NS 记录 ---> 服务器向 "2" 区域查询 "3" 区域,由 2 区域返回 3 区域中的 NS 记录 ---> 服务器再让 3 区域中的 NS 记录,3 区域查询并返回 4 的主机所对应的主机地址。反向解析的层级如下:.
ip-addr.arpa
1
2
3
4
5. 反向解析的作用
DNS 服务器里面有两个区域,即“正向查找区域”和“反向查找区域”,正向查找区域就是通常所说的域名解析,反向查找区域即是 IP 反向解析,它得到作用是通过查找 IP 地址的 PTR 记录来得到该 IP 地址指向的域名。要成功得到域名就必须有该 IP 地址的 PTR 记录。PTR 及记录是邮件交换记录的一种,邮件交换记录中有 A 记录和 PTR 记录,A 记录解析名字到地址,PTR 记录解析地址到名字。
反向域名解析系统(Reverse DNS)的功能确保适当的邮件交换记录是生效的。反向域名解析与通常的正向域名解析相反,提供 IP 地址到域名的对应。IP 反向解析主要应用到邮件服务器中来阻拦垃圾邮件。多数垃圾邮件发送者使用动态分配或者没有注册域名的 IP 地址来发送垃圾邮件,以避免追踪,使用域名反向解析后,就可以大大降低垃圾邮件的数量。
比如用 xxx@name.com 这个邮箱给 kasum@lwork.com 发一封信,lwork 邮件服务器接到这封信会查看这封信的信头文件,这封信的信头文件会显示这封信是由哪个 IP 地址发出来的。然后根据这个 IP 地址进行反向解析,如果反向解析到这个 IP 对应的域名是 name.com 就接收这封邮件,如果反向解析这个 IP 没有对应到 name.com,那么就拒绝这封邮件。
由于在域名系统中,一个 IP 地址可以对应多个域名,因此从 IP 出发去找域名,理论上应该遍历整个域名树,但是这在 internet 上是不现实的。为了完成逆向域名解析,系统提供一个特别域,该特别域称为逆向解析域 in-addr.arpa. 这样欲解析的 IP 地址就会被表达城一种像域名一样的可显示串形式,后缀以逆向解析域域名“in-addr.arpa”结尾。
测试反解(Windows 方法)
C:\Users\Administrator>nslookup -qt=ptr 111.204.53.64
服务器: xd-cache-1.bjtelecom.net
Address: 219.141.136.10
非权威应答:
64.53.204.111.in-addr.arpa name = mail.ybjt.net
[c:\~]$ nslookup -qt=ptr 123.59.246.200
非权威应答:
服务器: xd-cache-1.bjtelecom.net
Address: 219.141.136.10
200.246.59.123.in-addr.arpa name = mail.ehousechina.com
测试反解(Linux 方法)
[Allen@master ~]$ dig -x 123.59.246.200 | grep -A1 "ANSWER SECTION"
;; ANSWER SECTION:
200.246.59.123.in-addr.arpa. 21599 IN PTR mail.ehousechina.com.
[Allen@master ~]$ dig -x 111.204.53.64 | grep -A1 "ANSWER SECTION"
;; ANSWER SECTION:
64.53.204.111.in-addr.arpa. 37 IN PTR mail.ybjt.net.
6. 权威答案与非权威答案
- 权威答案:直接负责这个域的 NS 服务器返回的答案;
- 非权威答案:服务器不负责这个域,只是因为之前解析过,所以缓存中有,返回缓存中的答案;将这种答案叫做非权威答案是因为,上级 DNS 可能随时会更新,而所查询的 DNS 服务器本地缓存不一定及时更新了,所以这时客户端得到的答案可能是无效的;
7. 主 / 从 DNS 服务器
- 主 DNS 服务器:维护所负责解析的域的数据库的服务器;读写操作均可进行;主服务器的数据会不断发生改变;
- 从 DNS 服务器:从主 DNS 服务器那里或其它的从 DNS 服务器那里“复制”一份解析库;但只能进行读操作不能修改;从服务器的数据库要随时同步主服务器的数据;
8. 主 / 从之间的同步方式
在主 DNS 服务器上定义数据库的序号,当要改变数据库时,手动将序号增加,从 DNS 服务器每隔一段时间去同步时,根据这个序号判断是否更新自己的数据库 (如果主 DNS 服务器的序号大,就要更新数据);
配置文件中要需要定义一下几个计时器:
- 刷新时间间隔 refresh:表示从服务器多长时间去同步一次;
- 重试时间间隔 retry:表示同步不到时等待多长时间以后再尝试同步,重试时间要短于刷新时间;
- 过期时长 expire:表示从服务器始终联系不到主服务器时,多久之后放弃从主服务器同步数据;停止提供服务;
- negative answer ttl: 否定答案的缓存时长;
假如在刷新时间为 5 分钟,从服务器刚刷新完数据库,过 1 分钟后,主服务器就更新了数据库,那么在后面的 4 分钟之内,从服务器与主服务器的数据库是不同步的,如果在这段时间主服务器挂了,从服务器将没办法得到数据,也没办法向客户端提供最新数据服务,所以用刷新时间解决数据库更新同步是不完美的;
9. 主实时的通知从更新数据
主服务器数据库有变化,会立即通知从服务器更新数据库;这样数据库同步就有了两种叫法:一种站在从服务器角度是拉取,一种是站在主服务器角度描述推送;
10. 区域传送
当主服务器数据库量很大,有上万个域名解析,从服务器来来取数据库时,主服务器数据库只更新了一条信息,从服务器则不用把整个数据库同步一遍,而只需同步变化的数据即可;当从服务器是新数据库时才同步整个数据库;这个同步的过程也叫区域传送,有两种方式,一种是全量传送 axfr,一种是增量传送 ixfr;
11. 创建主 / 从 DNS,实现智能解析实验
11.1. 基础信息说明
- 二级域名:linuxidc.com、linuxmi.com
- linuxidc.com 主 DNS 服务器:10.207.51.40:master.linuxidc.com
- linuxidc.com 从 DNS 服务器:10.207.51.30; 10.207.51.31:slave.linuxidc.com
- linuxmi.com 主 DNS 服务器:10.207.51.32:master.linuxmi.com
- web 服务器:10.207.51.41:www.linuxidc.com—>www.a.linuxmi.com
- web 服务器:10.207.51.42:www.linuxidc.com—>www.b.linuxmi.com
- client1:10.207.51.61
- client2:10.207.51.81
实现效果:当 client1 访问 www.linuxidc.com 时解析到 10.207.51.41;当 client2 访问 www.linuxidc.com 是解析到 10.207.51.42;
11.2. 配置主 DNS 服务器
[root@master ~]# yum install -y bind
11.2.1. 修改主配置文件
[root@master ~]# vim /etc/named.conf ## 区域配置保持默认即可
options {listen-on port 53 { 10.207.51.40;};
allow-query {any;};
forward first;
forwarders {10.207.51.32;};
recursion yes;
allow-recursion {10.0.0.0/8;172.16.0.0/15;192.168.0.0/16;};
dnssec-enable no;
dnssec-validation no;
forward first;
forwarders {8.8.8.8;};
//zone "." IN {
// type hint;
// file "named.ca";
//};
[root@master ~]# vim /etc/named.rfc1912.zones
acl client1 {10.207.51.61;10.207.51.30;};
acl client2 {10.207.51.81;10.207.51.31;};
view "client1" {match-clients { "client1";};
zone "." IN {
type hint;
file "named.ca";
};
zone "linuxidc.com" IN {
type master;
file "linuxidc.com.zone.c1";
allow-transfer {10.207.51.30;};
allow-update {none;};
};
zone "51.207.10.in-addr.arpa" IN {
type master;
file "10.207.51.zone.c1";
allow-transfer {10.207.51.30;};
allow-update {none;};
};
zone "linuxmi.com" IN {
type forward;
forward only;
forwarders {10.207.51.32;};
};
};
view "client2" {match-clients { "client2";};
zone "." IN {
type hint;
file "named.ca";
};
zone "linuxidc.com" IN {
type master;
file "linuxidc.com.zone.c2";
allow-transfer {10.207.51.31;};
allow-update {none;};
};
zone "51.207.10.in-addr.arpa" IN {
type master;
file "10.207.51.zone.c2";
allow-transfer {10.207.51.31;};
allow-update {none;};
};
zone "linuxmi.com" IN {
type forward;
forward only;
forwarders {10.207.51.32;};
};
};
11.2.2. 创建 zonefile
[root@master ~]# vim /var/named/linuxidc.com.zone.c1
$TTL 3600
$ORIGIN linuxidc.com.
@ IN SOA master.linuxidc.com. admin.linuxidc.com. (2018111601 1H 30M 5H 1H)
IN NS master
IN NS slave
master IN A 10.207.51.40
slave IN A 10.207.51.31
www IN CNAME www.a.linuxmi.com.
[root@master ~]# vim /var/named/linuxidc.com.zone.c2
$TTL 3600
$ORIGIN linuxidc.com.
@ IN SOA master.linuxidc.com. admin.linuxidc.com. (2018111601 1H 30M 5H 1H)
IN NS master
IN NS slave
master IN A 10.207.51.40
slave IN A 10.207.51.31
www IN CNAME www.b.linuxmi.com.
[root@master ~]# vim /var/named/10.207.51.zone.c1
$TTL 3600
$ORIGIN 51.207.10.in-addr.arpa.
@ IN SOA master.linuxidc.com. admin.linuxidc.com. (2018111601 1H 30M 5H 1H)
IN NS master.linuxidc.com.
IN NS slave.linuxidc.com.
40 IN PTR master.linuxidc.com.
31 IN PTR slave.linuxidc.com.
41 IN PTR www.linuxidc.com.
[root@master ~]# vim /var/named/10.207.51.zone.c2
$TTL 3600
$ORIGIN 51.207.10.in-addr.arpa.
@ IN SOA master.linuxidc.com. admin.linuxidc.com. (2018111601 1H 30M 5H 1H)
IN NS master.linuxidc.com.
IN NS slave.linuxidc.com.
40 IN PTR master.linuxidc.com.
31 IN PTR slave.linuxidc.com.
42 IN PTR www.linuxidc.com.
11.2.3. 修改权限
[root@master ~]# cd /var/named/
[root@master named]# chown :named linuxidc.com.zone.c1 linuxidc.com.zone.c2 10.207.51.zone.c1 10.207.51.zone.c2
[root@master named]# chmod 640 linuxidc.com.zone.c1 linuxidc.com.zone.c2 10.207.51.zone.c1 10.207.51.zone.c2
11.2.4. 启动服务
[root@master named]# systemctl start named
[root@master named]# ss -antu | grep "\<53"
udp UNCONN 0 0 10.207.51.40:53 *:*
tcp LISTEN 0 10 10.207.51.40:53 *:*
11.3. 配置备 DNS 服务器
[root@slave ~]# yum install -y bind
10.3.1. 修改主配置文件
[root@slave ~]# vim /etc/named.conf ## 区域配置保持默认即可
options {listen-on port 53 { 10.207.51.31;};
allow-query {any;};
forward first;
forwarders {10.207.51.32;};
recursion yes;
allow-recursion {10.0.0.0/8;172.16.0.0/8;192.168.0.0/8;};
dnssec-enable no;
dnssec-validation no;
forward first;
forwarders {8.8.8.8;};
//zone "." IN {
// type hint;
// file "named.ca";
//};
[root@slave ~]# vim /etc/named.rfc1912.zones
acl client1 {10.207.51.61;};
acl client2 {10.207.51.81;};
view "client1" {match-clients { "client1";};
zone "linuxidc.com" IN {
type slave;
file "slaves/linuxidc.com.zone.c1";
masters {10.207.51.40;};
transfer-source 10.207.51.31;
};
zone "51.207.10.in-addr.arpa" IN {
type slave;
file "slaves/10.207.51.zone.c1";
masters {10.207.51.40;};
transfer-source 10.207.51.31;
};
zone "linuxmi.com" IN {
type forward;
forward only;
forwarders {10.207.51.32;};
};
};
view "client2" {match-clients { "client2";};
zone "." IN {
type hint;
file "named.ca";
};
zone "linuxidc.com" IN {
type slave;
file "slaves/linuxidc.com.zone.c2";
masters {10.207.51.40;};
transfer-source 10.207.51.31;
};
zone "51.207.10.in-addr.arpa" IN {
type slave;
file "slaves/10.207.51.zone.c2";
masters {10.207.51.40;};
transfer-source 10.207.51.31;
};
zone "linuxmi.com" IN {
type forward;
forward only;
forwarders {10.207.51.32;};
};
};
11.3.2. 修改权限
[root@slave ~]# cd /var/named/
[root@slave named]# chown named:named slaves
[root@slave named]# chmod 770 slaves
11.3.3. 启动服务
[root@slave ~]# systemctl start named
[root@slaves ~]# ss -antu | grep "\<53"
udp UNCONN 0 0 10.207.51.31:53 *:*
tcp LISTEN 0 10 10.207.51.30:53 *:*
11.4. 测试效果
[root@client ~]# dig -b 10.207.51.61 www.linuxidc.com @10.207.51.40
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -b 10.207.51.61 www.linuxidc.com @10.207.51.40
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18485
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxidc.com. IN A
;; ANSWER SECTION:
www.linuxidc.com. 3600 IN CNAME www.a.linuxmi.com.
www.a.linuxmi.com. 3600 IN A 10.207.51.41 ## 测试主 DNS,客户端 10.207.51.61 解析 www.linuxidc.com,IP 地址为 10.207.51.41,解析成功;;; AUTHORITY SECTION:
linuxmi.com. 3600 IN NS master.linuxmi.com.
;; ADDITIONAL SECTION:
master.linuxmi.com. 3600 IN A 10.207.51.32
;; Query time: 5 msec
;; SERVER: 10.207.51.40#53(10.207.51.40)
;; WHEN: Fri Nov 16 18:28:07 CST 2018
;; MSG SIZE rcvd: 122
[root@client ~]# dig -b 10.207.51.81 www.linuxidc.com @10.207.51.40
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -b 10.207.51.81 www.linuxidc.com @10.207.51.40
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21173
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxidc.com. IN A
;; ANSWER SECTION:
www.linuxidc.com. 3600 IN CNAME www.b.linuxmi.com.
www.b.linuxmi.com. 3600 IN A 10.207.51.42 ## 测试主 DNS,客户端 10.207.51.81 解析 www.linuxidc.com,IP 地址为 10.207.51.42,解析成功;;; AUTHORITY SECTION:
linuxmi.com. 3600 IN NS master.linuxmi.com.
;; ADDITIONAL SECTION:
master.linuxmi.com. 3600 IN A 10.207.51.32
;; Query time: 5 msec
;; SERVER: 10.207.51.40#53(10.207.51.40)
;; WHEN: Fri Nov 16 18:28:32 CST 2018
;; MSG SIZE rcvd: 122
[root@client ~]# dig -b 10.207.51.61 www.linuxidc.com @10.207.51.31
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -b 10.207.51.61 www.linuxidc.com @10.207.51.31
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36254
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxidc.com. IN A
;; ANSWER SECTION:
www.linuxidc.com. 3600 IN CNAME www.a.linuxmi.com.
www.a.linuxmi.com. 3600 IN A 10.207.51.41 ## 测试从 DNS,客户端 10.207.51.61 解析 www.linuxidc.com,IP 地址为 10.207.51.41,解析成功;;; AUTHORITY SECTION:
linuxmi.com. 3600 IN NS master.linuxmi.com.
;; ADDITIONAL SECTION:
master.linuxmi.com. 3600 IN A 10.207.51.32
;; Query time: 1 msec
;; SERVER: 10.207.51.31#53(10.207.51.31)
;; WHEN: Sun Nov 18 20:40:35 CST 2018
;; MSG SIZE rcvd: 122
[root@client ~]# dig -b 10.207.51.81 www.linuxidc.com @10.207.51.31
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7_5.1 <<>> -b 10.207.51.81 www.linuxidc.com @10.207.51.31
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4116
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linuxidc.com. IN A
;; ANSWER SECTION:
www.linuxidc.com. 3600 IN CNAME www.b.linuxmi.com.
www.b.linuxmi.com. 2921 IN A 10.207.51.42 ## 测试从 DNS,客户端 10.207.51.81 解析 www.linuxidc.com,IP 地址为 10.207.51.42,解析成功;;; AUTHORITY SECTION:
linuxmi.com. 2921 IN NS master.linuxmi.com.
;; ADDITIONAL SECTION:
master.linuxmi.com. 2921 IN A 10.207.51.32
;; Query time: 0 msec
;; SERVER: 10.207.51.31#53(10.207.51.31)
;; WHEN: Sun Nov 18 20:40:50 CST 2018
;; MSG SIZE rcvd: 122
: