目录
一.DNS的介绍
背景
在日常生活中人们习惯使用域名访问服务器,但机器间互相只认IP地址,域名与IP地址之间是多对一的关系,它们之间的转换工作称为域名解析,域名解析需要由专门的域名解析服务器来完成,整个过程是自动进行的。
1.DNS的定义
DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网;每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。
DNS服务使用TCP和UDP的53端口:
TCP的53端口用于 连接DNS服务器
UDP的53端口用于 解析DNS
2.DNS的结构
以新浪微博地址为例:结构如下
http://www.sina.com.cn./
http://主机名.子域.二级域.顶级域.根域/
域名结构是一种树形结构,以 根域. 为起点;树状结构最顶层称为根域,用“.”表示,相应服务器称为根服务器,整个域名空间解析权都归根服务器所有,但根服务器无法承担庞大的负载,采用“委派”机制,在根域下设置了一些顶级域,然后将不同顶级域解析权分别委派给相应的顶级域服务器,如将com域的解析权委派给com域服务器,以后但凡根服务器收到以com结尾的域名解析请求,都会转发给com域服务器,同样道理,为了减轻顶级域的压力,又下设了若干二级域,二级域又下设三级域或主机。
(1)根域
位于域名空间最顶层,一般用一个 “.” 表示
(2)顶级域
一般代表一种类型的组织机构或国家地区,
比如 .net(网络供应商)、.com(工商企业)、.org(团体组织)、.edu(教育机构)、.gov(政府部门)、.cn(中国国家域名)
(3)二级域
用来标明顶级域内的一个特定的组织,国家顶级域下面的二级域名由国家网络部门统一管理;如 .cn 顶级域名下面设置的二级域名:.com.cn、.net.cn、.edu.cn 、
(4)子域
二级域下所创建的各级域统称为子域,各个组织或用户可以自由申请注册自己的域名
(5)主机
主机位于域名空间最下层,就是一台具体的计算机,
如 www、mail都是具体的计算机名字,可用www.sina.com.cn.、mail.sina.com.cn. 来表示,这种表示方式称为 FQDN (完全合格域名,是指包含了所有域的主机名,其中包括根域),也是这台主机在域名中的全名
3.DNS系统的解析方式和工作原理
(1)正向解析:
根据域名查找对应的IP地址
(2)反向解析:
根据IP地址查找对应的域名
(3)工作原理:
【1】客户端会先将DNS解析请求发送给本地缓存域名服务器,如果本地缓存域名服务器有相关记录则直接返回给客户端,否则会将DNS解析请求发送给根域名服务器进行解析;
【2】根域名服务器会根据域名的顶级域再将DNS解析请求委派给相对应的顶级域名服务器进行解析;
【3】顶级域名服务器也会根据域名的二级域或子域再将DNS解析请求委派给相对应的二级域名或子域名服务器进行解析;
【4】最后子域名服务器会根据域名的主机名解析出相对应的IP地址,再返回给本地缓存域名服务器和客户端。
4.DNS域名解析查询方式
(1)递归查询
本地域名服务器先将DNS解析请求发送给根域名服务器,根域名服务器再将解析请求转发给相对应的顶级域名服务器,顶级域名服务器再将解析请求转发给相对应的二级域名或子域名服务器,最后子域名服务器会根据域名的主机名解析出相对应的IP地址后,再逐层返回给本地域名服务器。
(2)迭代查询
【1】本地域名服务器先将DNS解析请求发送给根域名服务器,根域名服务器会返回响应消息给本地域名服务器并告知去找相对应的顶级域名服务器;
【2】本地域名服务器再将DNS解析请求发送给相对应的顶级域名服务器,顶级域名服务器会返回响应消息给本地域名服务器并告知去找相对应的二级域名或子域名服务器
【3】最后本地域名服务器将DNS解析请求发送给相对应的子域名服务器,子域名服务器会根据域名的主机名解析出相对应的IP地址后,直接返回给本地域名服务器
5.DNS服务器类型
(1)主域名服务器
负责维护一个区域的所有域名信息,是特定的所有信息的权威信息源,数据可以修改。构建主域名服务器时,需要自行建立所负责区域的地址数据文件。
(2)从域名服务器
当主域名服务器出现故障、关闭或负载过重时,从域名服务器作为备份服务提供域名解析服务。从域名服务器提供的解析结果不是由自己决定的,而是来自于主域名服务器。构建从域名服务器时,需要指定主域名服务器的位置,以便服务器能自动同步区域的地址数据库。
(3)缓存域名服务器
只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,但没有域名数据库。它从某个远程服务器取得每次域名服务器查询的结果,并将它放在高速缓存中,以后查询相同的信息时用它予以响应。缓存域名服务器不是权威性服务器,因为提供的所有信息都是间接信息。构建缓存域名服务器时,必须设置根域或指定其他DNS服务器作为解析来源。
二.DNS 软件的安装和搭建配置
1.BIND软件安装
安装前先进行系统初始化
[root@192 ~]# mount /dev/sr0 /mnt
mount: /dev/sr0 写保护,将以只读方式挂载
[root@192 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 1913548 0 1913548 0% /dev
tmpfs 1930624 0 1930624 0% /dev/shm
tmpfs 1930624 12560 1918064 1% /run
tmpfs 1930624 0 1930624 0% /sys/fs/cgroup
/dev/mapper/centos-root 37202180 4530192 32671988 13% /
/dev/sda1 520868 184528 336340 36% /boot
tmpfs 386128 8 386120 1% /run/user/42
tmpfs 386128 0 386128 0% /run/user/0
/dev/sr0 4635056 4635056 0 100% /mnt
[root@192 mnt]# cd /mnt/Packages/
[root@192 Packages]# ls | grep bind
bind-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-chroot-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-dyndb-ldap-11.1-7.el7.x86_64.rpm
bind-export-libs-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-libs-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-libs-lite-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-license-9.11.4-26.P2.el7_9.9.noarch.rpm
bind-pkcs11-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-pkcs11-libs-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-pkcs11-utils-9.11.4-26.P2.el7_9.9.x86_64.rpm
bind-utils-9.11.4-26.P2.el7_9.9.x86_64.rpm
cmpi-bindings-pywbem-0.9.5-6.el7.x86_64.rpm
keybinder3-0.3.0-1.el7.x86_64.rpm
rpcbind-0.2.0-49.el7.x86_64.rpm
samba-winbind-4.10.16-19.el7_9.x86_64.rpm
samba-winbind-modules-4.10.16-19.el7_9.x86_64.rpm
ypbind-1.37.1-9.el7.x86_64.rpm
[root@192 Packages]# rpm -ivh bind-9.11.4-26.P2.el7_9.9.x86_64.rpm
警告:bind-9.11.4-26.P2.el7_9.9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中... ################################# [100%]
正在升级/安装...
1:bind-32:9.11.4-26.P2.el7_9.9 ################################# [100%]
[root@192 Packages]# rpm -q bind
bind-9.11.4-26.P2.el7_9.9.x86_64
2.配置正向解析的配置
[root@192 Packages]# rpm -qc bind #查看关于 bind 的文件
/etc/logrotate.d/named
/etc/named.conf
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/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
[root@192 Packages]# vim /etc/named.conf #先进入到这个文件进行修改
[root@192 Packages]# vim /etc/named.rfc1912.zones #再进入到这个文件进行修改
[root@192 Packages]# cd /var/named/ #进入到这个目录下
[root@192 Packages]# cp -p named.localhost test1.com.zone #将文件复制成这个文件
##保留源文件的权限和属主的属性复制
[root@192 named]# ll #进行查看文件
总用量 20
drwxrwx--- 2 named named 6 2月 24 2022 data
drwxrwx--- 2 named named 6 2月 24 2022 dynamic
-rw-r----- 1 root named 2253 4月 5 2018 named.ca
-rw-r----- 1 root named 152 12月 15 2009 named.empty
-rw-r----- 1 root named 152 6月 21 2007 named.localhost
-rw-r----- 1 root named 168 12月 15 2009 named.loopback
drwxrwx--- 2 named named 6 2月 24 2022 slaves
-rw-r----- 1 root named 152 6月 21 2007 test1.com.zone
[root@192 named]# vim test1.com.zone #进入到更改刚刚复制的文件中进行配置添加
配置成功后,保存退出即可
拓展:右上角五行内容的含义
#更新序列号,可以是 10 位以内的整数
#刷新时间,重新下载地址数据的间隔
#重试延时,下载失败后的重试间隔
#失效时间,超过该时间仍无法下载则放弃
#无效解析记录的生存周期
[root@192 named]# systemctl restart named #重启服务去客户端验证即可
如果启动失败,
可以使用 vim /var/log/messages
tail -f /var/log/messages #去查看日志,查看哪里有问题
然后去客户端进行验证,可以用 nslookup、dig 和 host 三种方式去验证;
[root@localhost ~]# systemctl stop firewalld #先进行系统初始化操作
[root@localhost ~]# setenforce 0 #关闭防火墙和临时关闭SELINUX
[root@localhost ~]# vim /etc/resolv.conf #在进入到DNS配置中把文件修改一下
# Generated by NetworkManager
nameserver 192.168.10.10 #将DNS换成服务端的主机地址
[root@localhost ~]# nslookup test1,com #之后进行试验
Server: 192.168.10.10
Address: 192.168.10.10#53
** server can't find test1,com: NXDOMAIN
[root@localhost ~]# nslookup www.test1.com
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: www.test1.com
Address: 192.168.10.20
[root@localhost ~]# nslookup mail.test1.com
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: mail.test1.com
Address: 192.168.10.30
[root@localhost ~]# nslookup ftp.test1.com
Server: 192.168.10.10
Address: 192.168.10.10#53
ftp.test1.com canonical name = www.test1.com.
Name: www.test1.com
Address: 192.168.10.20
[root@localhost ~]# nslookup news.test1.com
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: news.test1.com
Address: 192.168.10.40
[root@localhost ~]# nslookup lxp.test1.com
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: lxp.test1.com
Address: 192.168.10.100
3.配置反向解析的配置
(1)系统初始化
(2)安装bind软件包
(3)配置 vim /etc/named.conf 文件
(4)进入 vim /etc/named.rfc1912.zones 修改区域配置文件
#完成上一个文件的配置后,切换到 /var/named/目录下面
[root@192 named]# cd /var/named/
[root@192 named]# ll
总用量 20
drwxrwx--- 2 named named 23 4月 25 20:09 data
drwxrwx--- 2 named named 60 4月 25 20:09 dynamic
-rw-r----- 1 root named 2253 4月 5 2018 named.ca
-rw-r----- 1 root named 152 12月 15 2009 named.empty
-rw-r----- 1 root named 152 6月 21 2007 named.localhost
-rw-r----- 1 root named 168 12月 15 2009 named.loopback
drwxrwx--- 2 named named 6 2月 24 2022 slaves
-rw-r----- 1 root named 307 4月 25 20:08 test1.com.zone
[root@192 named]# cp -p test1.com.zone test1.com.zone.local
#保留源文件的权限和属主的属性复制
[root@192 named]# ll
总用量 24
drwxrwx--- 2 named named 23 4月 25 20:09 data
drwxrwx--- 2 named named 60 4月 25 20:09 dynamic
-rw-r----- 1 root named 2253 4月 5 2018 named.ca
-rw-r----- 1 root named 152 12月 15 2009 named.empty
-rw-r----- 1 root named 152 6月 21 2007 named.localhost
-rw-r----- 1 root named 168 12月 15 2009 named.loopback
drwxrwx--- 2 named named 6 2月 24 2022 slaves
-rw-r----- 1 root named 307 4月 25 20:08 test1.com.zone
-rw-r----- 1 root named 307 4月 25 20:08 test1.com.zone.local
[root@192 named]# vim test1.com.zone.local #进入到文件内修改
完成几个文件的配置后,重启服务即可
[root@192 named]# systemctl restart named
之后切换到客户机进行验证操作
[root@localhost ~]# vim /etc/resolv.conf #首先要配置DNS文件
# Generated by NetworkManager
nameserver 192.168.10.10
[root@localhost ~]# nslookup www.test1.com #进行实验
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: www.test1.com
Address: 192.168.10.20
[root@localhost ~]# nslookup 192.168.10.20
20.10.168.192.in-addr.arpa name = www.test1.com.
[root@localhost ~]# nslookup 192.168.10.30
30.10.168.192.in-addr.arpa name = mail.test1.com.
[root@localhost ~]# nslookup 192.168.10.40
40.10.168.192.in-addr.arpa name = news.test1.com.
4.拓展:Windows用户端进行测试
将网络设置进行这样的配置
之后,直接验证即可
三.主从DNS域名服务器的配置
1.主DNS服务器的配置
先进行系统初始化
(1)先配置 /etc/named.conf
[root@localhost ~]# vim /etc/named.conf #先进入到这个文件中进行配置
options {
listen-on port 53 { any; }; #将{}内的内容改成any
#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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; #将{}内的内容改成any
/*
(2)在配置 /etc/named.rfc1912.zones
[root@localhost ~]# vim /etc/named.rfc1912.zones #进入文件额外添加以下配置
zone "test1.com" IN { #正向解析配置
type master;
file "test1.com.zone";
allow-transfer { 192.168.10.20; }; #允许从服务器同步数据文件
};
zone "10.168.192.in-addr.arpa" IN { #反向解析配置(ip地址倒写)
type master;
file "test1.com.zone.local";
allow-transfer { 192.168.10.20; };
};
(3)修改区域配置文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls -l
总用量 24
drwxrwx---. 2 named named 23 4月 26 00:34 data
drwxrwx---. 2 named named 60 4月 26 09:18 dynamic
-rw-r-----. 1 root named 2253 4月 26 09:23 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 6 2月 24 2022 slaves
-rw-r-----. 1 root named 255 4月 26 09:19 test1.com.zone
-rw-r-----. 1 root named 236 4月 26 09:19 test1.com.zone.local
【1】正向区域配置文件
[root@localhost named]# vim test1.com.zone #进入文件进行配置
$TTL 1D
@ IN SOA test1.com. admin.test1.com. (
20240426 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS test1.com.
A 192.168.10.10
www IN A 192.168.10.100
news IN A 192.168.10.200
lxp IN CNAME www
【2】反向区域配置文件
[root@localhost named]# vim test1.com.zone.local #进入文件修改配置
$TTL 1D
@ IN SOA test1.com. admin.test1.com. (
20240426 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS test1.com.
A 192.168.10.10
100 IN PTR www.test1.com.
200 IN PTR news.test1.com.
到此,主DNS服务器配置完成,之后 systemctl start named 软件即可
2.从DNS 服务器的配置
(1)先配置 /etc/named.conf
#和主DNS服务器一样的操作
[root@localhost ~]# vim /etc/named.conf #先进入到这个文件中进行配置
options {
listen-on port 53 { any; }; #将{}内的内容改成any
#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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; #将{}内的内容改成any
/*
(2)配置 /etc/named.rfc1912.zones 文件
[root@localhost named]# vim /etc/named.rfc1912.zones
#在进入文件进行添加以下配置
zone "test1.com" IN {
type slave; #设置为 slave 表示为从服务器
masters { 192.168.10.10; }; #设置主dns服务器地址
file "slaves/test1.com.zone"; #文件存放在/var/named/slaves目录下
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.10.10 ;};
file "slaves/test1.com.zone.local";
};
(3)查看区域配置文件
[root@localhost named]# cd /var/named/
[root@localhost named]# ll
总用量 16
drwxrwx---. 2 named named 23 4月 26 00:09 data
drwxrwx---. 2 named named 60 4月 26 08:49 dynamic
-rw-r-----. 1 root named 2253 4月 5 2018 named.ca
-rw-r-----. 1 root named 152 12月 15 2009 named.empty
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
-rw-r-----. 1 root named 168 12月 15 2009 named.loopback
drwxrwx---. 2 named named 56 4月 26 00:34 slaves
[root@localhost named]# ll slaves/
总用量 8
-rw-r--r--. 1 named named 321 4月 26 09:30 test1.com.zone
-rw-r--r--. 1 named named 361 4月 26 09:39 test1.com.zone.local
到此,从DNS服务器配置完成,之后 systemctl start named 软件即可
3.主从服务器的验证
(1)以Linux系统为例
[root@localhost ~]# vim /etc/resolv.conf #首先修改这个文件,将dns设置为服务器地址
# Generated by NetworkManager
nameserver 192.168.10.10
[root@localhost ~]# nslookup www.test1.com #正向解析验证成功
Server: 192.168.10.10
Address: 192.168.10.10#53
Name: www.test1.com
Address: 192.168.10.100
[root@localhost ~]# nslookup 192.168.10.200 #反向解析验证成功
200.10.168.192.in-addr.arpa name = news.test1.com.
(2)以Windows系统为例
C:\Users\liu>nslookup www.test1.com #正向解析验证成功
服务器: UnKnown
Address: 192.168.10.10
名称: www.test1.com
Address: 192.168.10.100
C:\Users\liu>nslookup news.test1.com
服务器: UnKnown
Address: 192.168.10.10
名称: news.test1.com
Address: 192.168.10.200
C:\Users\liu>nslookup 192.168.10.200 #反向解析验证成功
服务器: UnKnown
Address: 192.168.10.10
名称: news.test1.com
Address: 192.168.10.200
(3)断开主DNS服务器,进行验证
[root@localhost ~]# vim /etc/resolv.conf #首先修改这个文件,将dns设置为服务器地址
# Generated by NetworkManager
nameserver 192.168.10.20
[root@localhost ~]# nslookup www.test1.com #正向解析验证成功
Server: 192.168.10.20
Address: 192.168.10.20#53
Name: www.test1.com
Address: 192.168.10.100
[root@localhost ~]# nslookup 192.168.10.200 #反向解析验证成功
200.10.168.192.in-addr.arpa name = news.test1.com.
四.总结:
了解DNS解析服务的工作原理
了解DNS解析服务的工作模式
了解DNS解析的配置操作