- DNS域名解析服务
- 一、BIND域名服务基础
- 1、DNS系统的作用
- 2、DNS系统类型
- 3.1查询方式
- 3.2查询原理过程
- 3.3开启centos的缓存
- 二、使用BIND构建域名服务器
- 1.1正向解析
- 各种资源记录
- 2.反向解析
- 3.主从复制
- 4.分离解析
- 总结
- 正向解析:根据域名查找对应的IP地址
- 反向解析:根据IP地址查找对应的域名
- DNS系统的分布式数据结构
- 缓存域名服务器
- 也称为DNS高速缓存服务器
- 通过向其他域名服务器查询获得域名——》IP地址记录
- 将域名查询结果缓存到本地,结果重复查询时的速度
只提供域名解析结果的缓存功能,目的在于提高查询速度和效率, 但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定 其他 DNS 服务器作为解析来源
- 主域名服务器
- 特定DNS区域的权威服务器,具有唯一性
- 负责维护该区域内所有域名——》IP地址的映射记录
- 需要自行建立所负责区域的地址数据文件
管理和维护所负责解析的域内解析库的服务器
- 从域名服务器
- 也称为复制域名服务器,是对主域名服务器的热备份
- 其维护的域名——》IP地址记录来源于主域名服务器
- 需要从主域名服务器自动同步区域地址数据库
从主服务器或从服务器"复制"(区域传输)解析库副本
序列号:解析库版本号,主服务器解析库变化时,其序列递增
刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
过期时长:从服务器联系不到主服务器时,多久后停止服务
通知机制:主服务器解析库发生变化时,会主动通知从服务器
关于host文件的优先级
[root@localhost ~]# vim /etc/hosts #编辑host文件用作测试 192.168.254.11 www.baidu.com #输入内容 [root@localhost ~]# ping www.baidu.com #进行测试,要能ping通 [root@localhost ~]# ping www.baidu.com PING www.baidu.com (192.168.254.11) 56(84) bytes of data. 64 bytes from www.baidu.com (192.168.254.11): icmp_seq=1 ttl=64 time=0.010 ms 64 bytes from www.baidu.com (192.168.254.11): icmp_seq=2 ttl=64 time=0.027 ms 64 bytes from www.baidu.com (192.168.254.11): icmp_seq=3 ttl=64 time=0.026 ms 64 bytes from www.baidu.com (192.168.254.11): icmp_seq=4 ttl=64 time=0.026 ms 64 bytes from www.baidu.com (192.168.254.11): icmp_seq=5 ttl=64 time=0.024 ms [root@localhost ~]# vim /etc/nsswitch.conf #进入文件修改dns的优先级 hosts: files dns myhostname改为hosts: dns files myhostname #将dns调到前面,优先级就会改变 [root@localhost ~]# ping www.baidu.com PING www.wshifen.com (103.235.46.39) 56(84) bytes of data. 64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=2 ttl=128 time=225 ms 64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=6 ttl=128 time=224 ms 64 bytes from 103.235.46.39 (103.235.46.39): icmp_seq=7 ttl=128 time=222 ms #进行测试 #可以看到两次测试所ping的IP地址是不一样的 #由此可见本地文件host的优先级高于dns的服务器3.1查询方式
递归查询:不需要自己动手
迭代查询:需要自己动手
3.2查询原理过程正向解析查询过程:
①先查本机的缓存记录
②查询hosts文件
③查询dns域名服务器,交给dns域名服务器处理
以上过程成为递归查询:我要一个答案你直接会给我结果
④这个dns服务器可能是本地域名服务器,也有个缓存,如果有直接返回结果,如果没有则进行下一步
⑤求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶级域服务器
⑥求助顶级域服务器,顶级域服务器返回可能会知道结果的二级域服务器然他去找二级域服务器
⑦求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
⑧本地域名服务器将结果记录到缓存,然后把域名和ip的对应关系返回给客户端
windows系统查询dns缓存命令:ipconfig /displaydns windows系统清理dns缓存命令:ipconfig /flushdns linux清dns缓存需要安装nscd软件,启动、执行nscd -i hosts
Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion递 归) --> DNS Server Cache -->DNS iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
首先访问缓存服务器,缓存服务器有,直接返回到用户;
如果没有则去找根服务器;
根域名服务器不会直接告诉你结果,会让用户去找二级域名服务器;
(以上是迭代查询);
二级域名服务器也不会告诉用户结果,会让用户去找三级域名服务器;
三级域名服务器会去找自己的子域;
子域得到结果后给三级域名服务器;
三级域名服务器再告诉缓存服务器;
缓存服务器再告诉用户;
3.3开启centos的缓存[root@localhost ~]# yum -y install nscd [root@localhost ~]# systemctl enable --now nscd [root@localhost ~]# nscd -g #查看缓存统计信息 [root@localhost ~]# nscd -i hosts #清除DNS客户端缓存二、使用BIND构建域名服务器 1.1正向解析 各种资源记录
区域解析库:由众多资源记录RR(Resource Record)组成
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
-
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。
-
A(internet Address):作用,域名解析成IP地址
-
AAAA(FQDN): --> IPV6
-
PTR(PoinTeR):反向解析,ip地址解析成域名
-
NS(Name Server):,专用于标明当前区域的DNS服务器,服务器类型为域名服务器
-
CNAME : Canonical Name,别名记录
-
MX(Mail eXchanger)邮件交换器
-
TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮
件)记录,https验证等
SOA记录与NS记录的区别:NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设置一些数据版本和更新以及过期时间等信息。
服务器上安装BIND
[root@localhost ~]# rpm -q bind 未安装软件包 bind [root@localhost ~]# yum install bind bind-utils -y # 服务端 客户端 [root@localhost ~]# rpm -q bind bind-utils bind-9.9.4-50.el7.x86_64 bind-utils-9.9.4-50.el7.x86_64
[root@localhost ~]# systemctl stop firewalld.service [root@localhost ~]# setenforce 0 #关闭防火墙 [root@localhost ~]# getenforce Permissive #查看是否关闭 [root@localhost ~]# cd /var/ [root@localhost var]# cd named/ [root@localhost named]# ls data dynamic named.ca named.empty named.localhost named.loopback slaves [root@localhost named]# netstat -ntap |grep named [root@localhost named]# systemctl start named [root@localhost named]# netstat -ntap |grep "named" tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 55869/named tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 55869/named tcp6 0 0 ::1:53 :::* LISTEN 55869/named tcp6 0 0 ::1:953 :::* LISTEN 55869/named [root@localhost named]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 DNS1=127.0.0.1 [root@localhost named]# systemctl restart network [root@localhost named]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 127.0.0.1 [root@localhost named]# systemctl restart network [root@localhost named]# ping www.baidu.com PING www.a.shifen.com (180.101.49.11) 56(84) bytes of data. 64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=1 ttl=128 time=6.03 ms 64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=2 ttl=128 time=5.63 ms 64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=3 ttl=128 time=5.34 ms 64 bytes from 180.101.49.11 (180.101.49.11): icmp_seq=4 ttl=128 time=5.06 ms
客户机
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 DNS1=192.168.254.11 #改成服务器的IP地址 [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
服务器
[root@localhost named]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
#修改配置文件
[root@localhost named]# rndc reload
server reload successful
#重启服务
客户机
[root@localhost ~]# host www.baidu.com Host www.baidu.com not found: 5(REFUSED) #此时请求被拒绝了,去给它赋予权限
回到服务器
[root@localhost named]# vim /etc/named.conf
allow-query { any; };
#修改配置文件
[root@localhost named]# 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
回到服务器,做CNAME别名记录
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "rui.com" IN { #修改自定义
type master;
file "rui.com.zone"; #修改自定义
allow-update { none; };
};
[root@localhost named]# ls
data dynamic named.ca named.empty named.localhost named.loopback slaves
[root@localhost named]# pwd
/var/named
#注意当前目录
[root@localhost named]# cp -p named.localhost rui.com.zone
[root@localhost named]# ll rui.com.zone
-rw-r-----. 1 root named 152 6月 21 2007 rui.com.zone
#看一眼权限
[root@localhost named]# vim rui.com.zone
$TTL 1D
@ IN SOA master.rui.com. admin.rui.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.rui.com.
master IN A 192.168.254.11
www A 192.168.254.12
MX 10 mail1.rui.com.
MX 20 mail2.rui.com.
mail1 IN A 192.168.254.22
mail2 IN A 192.168.254.23
ftp IN CNAME WWW
[root@localhost named]# rndc reload
server reload successful
回到客户机测试
[root@localhost ~]# host mail1.rui.com mail1.rui.com has address 192.168.254.22
如果再加上这一段
前面的w可以无限多
如果想只输入域名而不输入主机名
注意每次都需要重启服务
打开另一台机器,做以下操作
回到服务器
改成上一台机器的IP地址
开启httpd服务,重启reload
正向解析结束
2.反向解析[root@localhost named]# vim /etc/named.rfc1912.zones
#先修改区域配置文件
zone "254.168.192.in-addr.arpa" IN {
type master;
file "yum.com.zone";
allow-update { none; };
};
[root@localhost named]# cp -p rui.com.zone yun.com.zone
#复制正向解析文件
[root@localhost named]# vim yun.com.zone
$TTL 1D
@ IN SOA master.yun.com. admin.yun.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.yun.com.
master IN A 192.168.254.11
100 IN PTR www.yun.com.
99 IN PTR db.yun.com.
[root@localhost named]# rndc reload
server reload successful
去客户机验证
[root@localhost ~]# host 192.168.254.100 100.254.168.192.in-addr.arpa domain name pointer www.yum.com. [root@localhost ~]# host 192.168.254.99 99.254.168.192.in-addr.arpa domain name pointer db.yun.com.
反向解析结束
3.主从复制主服务器地址:192.168.254.11
从服务器地址:192.168.254.30
#主服务器配置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils -y
#主服务器安装bind软件
[root@localhost named]# vim /etc/named.conf
listen-on port 53 { any; };
allow-query { any; };
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "rui.com" IN {
type master;
file "rui.com.zone";
allow-update { none; };
};
[root@localhost ~]# systemctl start named
#主服务器配置好后再启动
#从服务器配置
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum install bind bind-utils -y
#从服务器安装bind软件
[root@localhost named]# vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#将这两条删除或注释掉
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "rui.com" IN {
type slave;
file "slaves/rui.com.zone";
masters { 192.168.254.11; };
};
[root@localhost ~]# systemctl start named
#从服务器配置好后再启动
验证
[root@localhost named]# dig www.rui.com @192.168.254.30 #@后面加从服务器地址
主服务器上修改
[root@localhost named]# vim rui.com.zone
$TTL 1D
@ IN SOA master admin.rui.com. (
#1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.254.11
#slavel A 192.168.254.30
www A 192.168.254.12
# #后为修改的内容
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "rui.com" IN {
type master;
file "rui.com.zone";
#allow-transfer { 192.168.254.30; }; 从服务器IP
};
[root@localhost named]# rndc reload
server reload successful
从服务器上验证
[root@localhost named]# dig -t axfr rui.com ; <<>> DiG 9.9.4-RedHat-9.9.4-50.el7 <<>> -t axfr rui.com ;; global options: +cmd rui.com. 86400 IN SOA master.rui.com. admin.rui.com. 0 86400 3600 604800 10800 rui.com. 86400 IN NS master.rui.com. master.rui.com. 86400 IN A 192.168.254.11 www.rui.com. 86400 IN A 192.168.254.12 rui.com. 86400 IN SOA master.rui.com. admin.rui.com. 0 86400 3600 604800 10800 ;; Query time: 1 msec ;; SERVER: 192.168.254.30#53(192.168.254.30) ;; WHEN: 三 9月 29 18:29:52 CST 2021 ;; XFR size: 5 records (messages 1, bytes 160) #提高安全配置4.分离解析
为Linux服务器配置两块网卡,都仅主机模式
ens33:192.168.100.1/24
ens37:12.0.0.1/24
win7作为外网:ip:12.0.0.12 255.0.0.0 dns:12.0.0.1 12.0.0.1
win10作为内网:192.168.100.100
[root@localhost ~]# yum install bind bind-utils -y #先安装bind [root@localhost network-scripts]# vim /etc/sysconfig/network-scripts/ifcfg-ens33 IPADDR=192.168.100.1 NETMASK=255.255.255.0 [root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37 #将ens33内容复制给ens37 [root@localhost network-scripts]# vim ifcfg-ens37 TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=static DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens37 DEVICE=ens37 ONBOOT=yes IPADDR=12.0.0.1 NETMASK=255.255.255.0 [root@localhost network-scripts]# systemctl restart network #重启网卡
将windows网卡模式设置为仅主机模式,并将两台Windows的IP地址配好
回到服务器
[root@localhost network-scripts]# vim /etc/named.conf #进入后将这两条注释掉
在最下面找到这一段,将其删除,避免麻烦
[root@localhost network-scripts]# vim /etc/named.rfc1912.zones
#输入这两段,删除其它内容
view "lan" {
match-clients { 192.168.100.0/24; };
zone "rui.com" IN {
type master;
file "rui.com.lan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
view "wan" {
match-clients { 12.0.0.0/24; };
zone "rui.com" IN {
type master;
file "rui.com.wan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
[root@localhost named]# cp -p named.localhost rui.com.lan
[root@localhost named]# vim rui.com.lan
$TTL 1D
@ IN SOA master.rui.com. admin.rui.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.100.1
www A 192.168.100.20
[root@localhost named]# cp -p rui.com.lan rui.com.wan
[root@localhost named]# vim rui.com.wan
$TTL 1D
@ IN SOA master.rui.com admin.rui.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 12.0.0.1
www A 12.0.0.1
在Windows7和Windows10上使用nslookup 查看
总结了解DNS,能够进行正向解析,反向解析,主从解析,和分离解析的操作。



