目录
一.DNS系统的作用
正向解析:根据域名查找对应的IP地址
反向解析:根据IP地址查找对应的域名
DNS系统的分布式数据结构
DNS: Domain Name System域名系统,应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,服务器端:53/udp,53/tcp实际上,每一台DNS服务器都只负责管理一个有限范围(一个或几个域)内的主机域名和IP地址的对应关系,这些特定的DNS域或IP地址段称为zone(区域)。根据地址解析的方向不同,DNS区域相应地分为正向区域(包含域名到IP地址的解析记录)和反向区域(包含IP地址到域名的解析记录)
根. 根域名DNS服务器:专门负责根域名
一级DNS服务器:专门负责一级域名的解析(一般代表一种类型的组织机构或国家地区)
.com(工商 企业)
.net(网络供应商)
.edu(教育机构)
.cn(中国国家域名)
.org(团体组织)
.gov (政府部门)
二级DNS服务器:专门负责二级域名的解析
.net.cn
.edu.cn
.com.cn
子域名DNS服务器:专门负责子域名的解析 也称为三级域名
ina.com.cn
.pku.edu.cn
主机站点
tts9
tts6
mail
www
二.DNS系统类型
1.缓存域名服务器
也称为DNS高速缓存服务器
通过向其他域名服务器查询获得域名->IP地址记录
将域名查询结果缓存到本地,提高重复查询时的速度
2.主域名服务器
特定DNS区域的权威服务器,具有唯一性
负责维护该区域内所有域名->IP地址的映射记录
需要自行建立所负责区域的地址数据文件
3.从域名服务器
也称为辅助域名服务器,是对主域名服务器的热备份
其维护的域名->IP地址记录来源于主域名服务器
需要从主域名服务器自动同步区域地址数据库
主从域名服务器同步的两种方式,主域名服务器推给从,或者从域名服务器从主拉
三.设置dns级别
[root@localhost ~]# vim /etc/nsswitch.conf
#hosts: db files nisplus nis dns
hosts: files dns myhostname 修改此行,把前后顺序颠倒下可改变级别,谁在前谁级别高
四.DNS查询类型及原理
1.查询方式
递归查询:
一般客户机和本地DNS服务器之间属于递归查询,即当客户机向DNS服务器发出请求后,若DNS服务器本身不能解析,则会向另外的DNS服务器发出查询请求,得到最终的肯定或否定的结果后转交给客户机。此查询的源和目标保持不变,为了查询结果只需要发起一次查询。(不需要自己动手),
迭代查询:
一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询,如:若对方不能返回权威的结果,则它会向下一个DNS服务器(参考前一个DNS服务器返回的结果)再次发起进行查询,直到返回查询的结果为止。此查询的源不变,但查询的目标不断变化,为查询结果一般需要发起多次查询。(需要自己动手)
2.查询原理过程
正向解析查询过程:
①先查本机的缓存记录
②查询hosts文件
③查询dns域名服务器,交给dns域名服务器处理
以上过程成为递归查询:我要一个答案你直接会给我结果
④这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
⑤求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
⑥求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器
⑦求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
⑧本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
五.各种资源记录
1. SOA记录
name: 当前区域的名字,例如"zy.com."
SOA名叫起始授权机构记录,SOA记录说明了在众多NS记录里那一台才是主要的服务器
value: 有多部分组成
注意:
-
当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字
-
当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用"."替换
2. NS记录
name: NS记录也叫名称服务器记录,用于说明这个区域有哪些DNS服务器负责解析
value: 当前区域的某DNS服务器的名字,例如: ns.kgc.org.
注意:
-
相邻的两个资源记录的name相同时,后续的可省略
-
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
-
一个区域可以有多个NS记录
3.MX记录
name: 全称是邮件交换记录
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
- 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的
优先级;数字越小优先级越高
- 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
4.A记录
name: 某主机的域名解析,
value:主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
5.PTR记录
反向解析
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
6.CNAME别名记录
ftp.zy.com. IN CNAME www.zy.com
7.格式
#固定格式
name [TTL] IN rr_type value
缓存时间 internet记录 区域解析库 值
六.实验过程
1.网络版DNS服务器搭建
[root@localhost yum.repos.d]# yum install bind bind-utils -y
[root@localhost yum.repos.d]# systemctl stop firewalld.service
[root@localhost yum.repos.d]# setenforce 0
[root@localhost yum.repos.d]# systemctl start named
[root@localhost yum.repos.d]# netstat -natp|grep "named"
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 40739/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 40739/named
tcp6 0 0 ::1:53 :::* LISTEN 40739/named
tcp6 0 0 ::1:953 :::* LISTEN 40739/named
[root@localhost yum.repos.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
改变DNS为本地地址
[root@localhost yum.repos.d]# systemctl restart network
[root@localhost yum.repos.d]# ping www.baidu.com
PING www.a.shifen.com (180.101.49.12) 56(84) bytes of data.
64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=1 ttl=128 time=4.88 ms
64 bytes from 180.101.49.12 (180.101.49.12): icmp_seq=2 ttl=128 time=5.82 ms
[root@localhost yum.repos.d]# cat /var/named/name.ca 因为对应的是这个文件所以能解析地址
[root@localhost yum.repos.d]# rpm -qc bind
/etc/logrotate.d/named
/etc/named.conf 需要更改的文件1
/etc/named.iscdlv.key
/etc/named.rfc1912.zones 需要更改的文件2
/etc/named.root.key
/etc/rndc.conf
/etc/rndc.key
/etc/sysconfig/named
/var/named/named.ca
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
然后去另一条机器上更改ens33设置把dns1改成你设的DNS服务器地址
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
[root@localhost ~]# ping www.baidu.com
PING www.wshifen.com (104.193.88.77) 56(84) bytes of data.
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=1 ttl=128 time=176 ms
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=2 ttl=128 time=176 ms
64 bytes from 104.193.88.77 (104.193.88.77): icmp_seq=3 ttl=128 time=179 ms
配置生效前还能ping通百度
[root@localhost ~]# systemctl restart network
配置生效后就无法访问
[root@localhost ~]# ping www.baidu.com
ping: www.baidu.com: 未知的名称或服务
[root@localhost ~]# host www.baidu.com
;; connection timed out; trying next origin
;; connection timed out; no servers could be reached
这时我们要去dns服务器修改/etc/named.conf文件里的13行和19行标红的位置或者直接注销这两行
12 options {
13 listen-on port 53 { any; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 allow-query { any; };
注意不要顶头,修改部分两边要有空格,分号结尾
[root@localhost ~]# rndc reload 重启服务
server reload successful
这时再回到客户机查看就可以访问百度了
[root@localhost ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 180.101.49.11
www.a.shifen.com has address 180.101.49.12
2.搭建内部DNS服务器
[root@localhost ~]# vim /etc/named.rfc1912.zones
再原来的13行复制模板到最前面进行修改
13 zone "zy.com" IN { 添加zy.com域名
14 type master;
15 file "zy.com.zone"; 增加根域名称
16 allow-update { none; };
17 };
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/zy.com.zone
这里需要注意下要连同权限一起复制所以用-P 因为属组为程序用户
[root@localhost ~]#vim /var/named/zy.com.zone
$TTL 1D #有效解析记录的生存周期
@ in SOA master.zycom. 123.zycom. ( #“@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS master.zy.com. #记录当前区域的DNS服务器的名称
A 192.168.133.50 #记录主机IP地址
IN MX 10 mail.zy.com. #MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.133.61 #记录正向解析www.benet.com对应的IP
mail1 IN A 192.168.133.78 #MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
- IN A 192.168.133.61 #泛域名解析,“*"代表任意主机名
主机重启服务
[root@localhost ~]# rndc reload
server reload successful
客户机测试
[root@localhost ~]# host mail.zy.com
mail.zy.com has address 192.168.133.61
[root@localhost ~]# host zy.com
zy.com has address 192.168.133.61
[root@localhost ~]# host wwwww.zy.com
wwwww.zy.com has address 192.168.133.61
[root@localhost ~]# host ftp.zy.com
ftp.zy.com is an alias for www.zy.com.
www.zy.com has address 192.168.133.61
www.zy.com mail is handled by 10 mail.zy.com.
www.zy.com mail is handled by 20 mail.zy.com.
3.搭建网页服务器
新找台电脑做客户机,
[root@localhost yum.repos.d]# systemctl stop firewalld.service 关防火墙
[root@localhost yum.repos.d]# setenforce 0
[root@localhost yum.repos.d]# yum install -y httpd 安装http服务
[root@localhost yum.repos.d]# vim /var/www/html/index.html
输入www.zy.com
localhost yum.repos.d]# ip a |grep "ens33"
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.133.129/24 brd 192.168.133.255 scope global dynamic ens33
获得本地IP地址
[root@localhost yum.repos.d]# systemctl start httpd 开启服务
去dns服务器上更改配置,改成http服务器ip
[root@localhost ~]# curl 192.168.133.129
www.zy.com
[root@localhost ~]# curl www.zy.com
www.zy.com
4 .反向解析
[root@localhost ~]# vim /etc/named.rfc1912.zones 在文件末尾复制黏贴相关命令并更改
zone "133.168.192.in-addr.arpa" IN { ip设置为网段前三部分且反向输
type master;
file "zpq.com.zone";
allow-update { none; };
};
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/zpq.com.zone
[root@localhost ~]# vim /var/named/zpq.com.zone
$TTL 1D
@ IN SOA master.zpq.com. 123.zpq.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.zpq.com.
master IN A 192.168.133.50
88 IN PTR www.zpq.com.
99 IN PTR ftp.zpq.com.
```
在客户机上测试
```bash
[root@localhost ~]# host 192.168.133.88
88.133.168.192.in-addr.arpa domain name pointer www.zpq.com.
[root@localhost ~]# host 192.168.133.99
99.133.168.192.in-addr.arpa domain name pointer ftp.zpq.com.
5.主从复制
实验环境:
主服务器地址:192.168.133.50
从服务器地址:192.168.133.100
从服务器设置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils.x86_64 -y
[root@localhost etc]# vim /etc/named.conf
#两段改成any
listen-on port 53 { any; };
allow-query { any; };
[root@localhost etc]# vim /etc/named.rfc1912.zones
#添加从服务器的配置文件
zone "zy.com" IN {
type slave;
file "slaves/zy.com.zone";
masters { 192.168.133.50; };
};
[root@localhost etc]# systemctl start named
#主服务器配置
[root@localhost etc]# vim /etc/named.rfc1912.zones
zone "zy.com" IN {
type master;
file "zy.com.zone";
allow-transfer { none; };
#可添加从服务器的地址
};
[root@localhost etc]#rndc reload
[root@localhost ~]#vim /var/named/zy.com.zone
在从服务器上多了个slaves文件夹,成功后会可以看到主服务器的域名
[root@localhost ~]# ls /var/named/slaves/
zy.com.zone
[root@localhost ~]# host www.zy.com
www.zy.com has address 192.168.133.88
两台机器的网卡DNS必须使用内网的
6.分离解析
实验环境:
将linux服务器配置两块网卡,都仅主机模式
ens33:192.168.101.1 和vnet1网段相同
ens37:16.0.0.1
win7做为外网: 16.0.0.60 255.0.0.0
win10 作为内网:192.168.101.60
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils.x86_64 -y
添加一块网卡并把两块网卡都设置成仅主机模式
修改第一块网卡配置 ,最后的IP段,只留最后以下的2行
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
.。。。
IPADDR=192.168.101.1
NETMASK=255.255.255.0
复制配置文件给第二块网卡
[root@localhost ~]# cp -p /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens37
修改第二块网卡配置
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
[root@localhost ~]# systemctl restart network
设置win7,仅主机模式,设置IP
设置win10,仅主机模式,设置IP
[root@localhost ~]# vim /etc/named.conf
注释掉13行和21行
12 options {
13 # listen-on port 53 { 127.0.0.1; };
14 listen-on-v6 port 53 { ::1; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 # allow-query { localhost; };
54-57行需要剪切到/etc/named.rfc1912.zones 中备用
54 zone "." IN {
55 type hint;
56 file "named.ca";
57 };
[root@localhost ~]# vim /etc/named.rfc1912.zones
原13行以后全部删除,然后添加命令
view "lan" {
14 match-clients { 192.168.101.0/24; };
15 zone "zy.com" IN {
16 type master;
17 file "zy.com.lan";
18 };
19
20 zone "." IN {
21 type hint;
22 file "named.ca";
23 };
24
25 };
26
27 view "wan" {
28 match-clients { 16.0.0.0/24; };
29 zone "zy.com" IN {
30 type master;
31 file "zy.com.wan";
32 };
33
34 zone "." IN {
35 type hint;
36 file "named.ca";
37 };
38
39 };
[root@localhost ~]# cp -p /var/named/named.localhost /var/named/zy.com.lan
[root@localhost ~]# vim /var/named/zy.com.lan
[root@localhost ~]# cp -p /var/named/zy.com.lan /var/named/zy.com.wan
[root@localhost ~]# vim /var/named/zy.com.wan
[root@localhost ~]# systemctl start named
所有windows需要关闭防火墙
七.开启centos的缓存
CentOS 默认没有启用DNS客户端缓存,安装nscd(Name Service Cache Daemon,名称服务缓存守护进
程)包可以支持DNS缓存功能减少DNS服务器压力,提高DNS查询速度
[root@centos7 ~]#yum -y install nscd
[root@centos7 ~]#systemctl enable --now nscd
#查看缓存统计信息
[root@centos7 ~]#nscd -g
#清除DNS客户端缓存
[root@centos7 ~]#nscd -i hosts
总结
掌握DNS的查询过程即原理
能够搭建网页DNS服务器,主从复制,分离解析,注意各个实现过程中的注意事项。