一 、名字解析介绍和DNS
当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。那么如何解决这一难题呢?我们可以给每个网络设备起一个友好的名称,如:<www.baidu.com>,这种由文字组成的名称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要功能,利用名称解析服务可以实现主机和IP的解,即:当主机IP变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。
实现此服务的方法是多样的。
DNS:Domain Name System 域名系统,其是应用层 协议 ,是互联网的一项服务 。它作为将域名和IP地址相互映射 的一个分布式数据库,能够使人更方便地访问互联网,基于C/S架构,实际上,每一台 DNS 服务器都只负责管理一个有限范围(一个或几个域)内的主机域 名和 IP 地址的对应关系,这些特定的 DNS 域或 IP 地址段称为 zone(区域)。根据地址解 析的方向不同,DNS 区域相应地分为正向区域(包含域名到 IP 地址的解析记录)和反向区 域(包含 IP 地址到域名的解析记录)
DNS 的端口号为 53 ,分为 tcp/53 ,udp/53
tcp/53 :主从之间的同步
udp/53 :名字解析
www.baidu.com.
域名的分类:
. :这个点 叫 根域
.com : 顶级域 一级域
.baidu :二级域
www :主机名
- 根域: 全球根服务器节点只有13个,10个在美国,1个荷兰,1个瑞典,1个日本
- 一级域名:Top Level Domain: tld
分为三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
.com(工商 企业) .net(网络供应商) .edu(教育机构) .cn(中国国家域名) .org(团体组织) .gov (政府部门)
-
二级域名:magedu.com
-
三级域名:study.magedu.com
-
最多可达到127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理
https://www.sina.com.cn/
https://blog.sina.com.cn/
如何实现 DNS 服务?
- 方法一 : 本地host文件(优先级最高)
分散式管理 :每个机器都有host文件,不方便管理
本地名称解析配置文件:hosts
hosts文件位置:
linux: /etc/hosts 格式: ip地址 域名
windows 中文件所在位置(在系统盘中,默认为C)
C:\Windows\System32\drivers\etc\hosts
[root@localhost ~]#vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.80.101 www.baidu.com
- 方法二 : 安装 dns 软件服务
集中管理: 在内网中 集中在一台服务器上 管理
分布式的管理: 在外网是 一级管一级
如何将 dns 的优先级 调到最高?(比hosts高)
[root@localhost ~]#vim /etc/nsswitch.conf
#修改dns的优先级
39 hosts: files dns myhostname
#修改 files和 dns的先后 优先级就会改变
二、 DNS 服务器类型
-
缓存域名服务器:只提供域名解析结果的缓存功能,目的在于提高查询速度和效率,
但是没有自己控制的区域地址数据。构建缓存域名服务器时,必须设置根域或指定
其他 DNS 服务器作为解析来源。
-
主域名服务器:管理和维护所负责解析的域内解析库的服务器
-
从域名服务器
从主服务器或从服务器"复制"(区域传输)解析库副本
IPv4的根名称服务器:全球共13个负责解析根域的DNS服务器,美国10个,英国1,瑞典1,日本1
IPv6的根名称服务器:全球共25个,中国1主3从,美国1主2从
三、 DNS 查询类型及原理
3.1 查询方式
- 递归查询 :一般客户机和本地DNS服务器之间属于递归查询
- 迭代查询 :一般情况下(有例外)本地的DNS服务器向其它DNS服务器的查询属于迭代查询。
3.2 查询原理过程
一次正向 dns 解析的过程
我要访问 www.baidu.com 服务器
1.先看我本机的 /etc/hosts 文件,如果有直接访问, 如果没有就去找你设置的缓存dns服务器
2. 如果 缓存服务器有, 直接反馈结果(递归),如果没有就需要迭代查询,
直接去找 根域服务,
3. 由于根域服务器 只能 解析根 无法解析 www.baidu.com 但是 根域服务器会让你去找
一级域服务器
4. 一级域发现自己 也解析 不了, 让你去找二级域,
5.二级域发现这台服务器在自己的 管理范围内,直接反馈结果给 缓存服务器
6. 缓存服务器 再交给 客户
windows系统查询dns缓存命令:ipconfig /displaydns
windows系统清理dns缓存命令:ipconfig /flushdns
llinux 清dns缓存需要安装 nscd 软件,启动、执行nscd -i hosts
四、 bind 软件 与 正向解析
4.1 DNS 软件 bind
DNS服务器软件:bind,powerdns,dnsmasq,unbound,coredns
-
bind:服务器
-
bind-libs:相关库
-
bind-utils: dns工具包
-
bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/
4.2 安装 bind 及 相关信息
为什么要安装 bind 软件?
在公司内网环境中, 我们需要有一台 自己的 dns 服务器 去解析自己内网的服务 ,若没有 就要输入 ip 地址来访问自己内部的服务 十分不方便人记忆,所以就需要 安装bind 软件来在内网搭建 DNS 服务器 使用域名 来访问服务。
我们需要安装两样 bing 主包 和 bind 工具包
yum install bind bind-utlis -y
# 安装服务和 工具包
安装完软件之后 , 要能 找到
1**.** 配置文件的位置 使用右边命令查找 rpm -qc 安装包的名字
2.主程序的位置 使用右边命令查找 rpm -ql 安装包的名字
通常在 /usr/sbin 或 /usr/bin 目录下找
注意!!!该软件的安装包名字和程序名字不一样。
bind 安装包的名字
named 是程序的名字
named 程序的主要文件
/etc/named.conf 主配置文件
/etc/named.rfc1912.zones 子配置文件 域名配置文件
/var/named/数据库文件 定义了域名和ip地址的对应关系
配置文件 权限 需要注意
当一个程序启动的时候, 会去读取这个配置文件,如果权限问题导致程序无法读取配置文件就会启动报错
实际操作:正向解析
第一步:yum install bind bind-utlis -y
安装服务和 工具包
第二步:使用 vim /etc/named.conf 修改权限和监听地址。
检测文件格式的命令
named-checkconf 主配置文件
named-checkconf /etc/named.conf
第三步: 使用 vim /etc/named.rfc1912.zones 手写域名配置文件
改完保存退出 :wq
第四步: 使用 cd /var/named 命令切换到该目录下
第五步:数据库配置文件的更改。
soa 初始记录 确定谁是 主 dns服务器 主从之间的 一些设置
A 正向解析记录 将 域名转化成 ip地址
NS 域名服务器
PTR 反向解析 将 ip转换成域名
CNAME 别名
改完保存退出 :wq
检测数据库文件格式的命令
named-checkzone 域名 数据库文件
named-checkzone jntm.com /var/named/jntm.com.zone
第六步:更改 本地 DNS 服务器
vim /etc/sysconfig/network-scripts/ifcfg-ens33
第七步 :重启 网卡 和 named 服务。
systemctl restart network named
第八步 :验证
实际操作:反向解析
第一步 :修改域名配置文件 vim /etc/named.rfc1912.zones
第二步 :数据库配置文件的更改。 vim /var/named/jntm.com.zone
第三步:重启服务并验证
实际操作 :主从复制
实验环境:
主服务器地址:192.168.80.7
从服务器地址:192.168.80.10
第一步 :关闭防火墙 主从都要关
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
第二步 :安装bind 软件 主从都要安装
yum install bind bind-utlis -y
第三步:在主 和 从 上使用 vim /etc/named.conf 修改权限和监听地址
第四步 :更改 从服务器的配置文件 vim /etc/named.rfc1912.zones
重启 从服务器 named 服务
systemctl restart named
第五步 :更改 主服务器的配置文件 vim /etc/named.rfc1912.zones
重启 主服务器 named 服务
systemctl restart named
第六步 :修改 从服务器 网卡配置文件 DNS (主服务器也要改成自己的地址)
vim /etc/sysconfig/network-scripts/ifcfg-ens33
重启网卡 systemctl restart network
验证 :
#在从服务器上
[root@localhost etc]# echo "nameserver 192.168.91.103" > /etc/resolv.conf
#将DNS指向自己
[root@localhost etc]#host www.kgc.com
#或者
[root@localhost ~]# dig www.kgc.com @192.168.80.10
解析命令 域名 @你的dns服务器地址
@ 指定使用DNS解析
关于 主从之间 数据库文件的同步问题
在主服务器上配置
vim /var/named/jntm.com.zone
改完后记得重新启动服务 systemctl restart named
实际操作:分离解析
实验环境:
将linux服务器配置两块网卡,都仅主机模式
ens33:192.168.100.1
ens37:12.0.0.1
win7做为外网: 12.0.0.12 255.0.0.0
win10 作为内网:192.168.100.100
[root@test5 ~]# vim /etc/named.conf
#修改配置文件
listen-on port 53 { any; };
allow-query { any; };
#等会需要使用的 根配置文件 选中复制
zone "." IN {
type hint;
file "named.ca";
};
[root@test5 named]# vim /etc/named.rfc1912.zones
#编写配置文件
view "lan" {
match-clients { 192.168.100.0/24; };
#匹配网段
zone "nmj.com" IN {
type master;
file "nmj.com.lan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
view "wan" {
match-clients { 12.0.0.0/24; };
zone "nmj.com" IN {
type master;
file "nmj.com.wan";
};
zone "." IN {
type hint;
file "named.ca";
};
};
[root@test5 named]# vim nmj.com.lan
$TTL 1D
@ IN SOA master.nmj.com. admin.nmj.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.100.1
www A 192.168.100.88
sftp A 192.168.100.99
[root@test5 named]# vim nmj.com.wan
$TTL 1D
@ IN SOA master.nmj.com. admin.nmj.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
sftp A 12.0.0.1
验证 可以使用 nslookup查看
4.3 数据库文件详解
4.3.1 各种资源记录
区域解析库:由众多资源记录RR(Resource Record)组成
name [TTL] IN rr_type value
记录类型: A , AAAA , PTR , SOA , NS , CNAME , MX
-
SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该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记录设置一些数据版本和更新以及过期时间等信息。
SOA记录
name: 当前区域的名字,例如"kgc.com."
value: 有多部分组成
注意:
-
当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字
-
当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
- 主从服务区域传输相关定义以及否定的答案的统一的TTL
范例:
name [TTL] IN rr_type value
域名 缓存 Internet协议 资源类型 值
1. TTL可从全局继承缓存时间
2. 使用 "@" 符号可用于引用当前区域的域名
3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
$TTL 1D(统一的ttl定义1天,不写D 是秒)
@ IN SOA master.kgc.com. admin.kgc.com. (
当前服务器的名称 邮箱地址
0 ; serial #是否有更新 版本号 更新文件 手动把 0 加1
1D ; refresh #刷新时间 拉取时间 一天一次
1H ; retry #失败后一个小时 后再试一次
1W ; expire #过期时间,老是拉取不了,1周以后过期
3H ) ; minimum #老是去查错误的解析地址,3小时内的缓存下,用户再查直接返回找不到
NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如: ns.kgc.org.
注意:
-
相邻的两个资源记录的name相同时,后续的可省略
-
对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
-
一个区域可以有多个NS记录
范例
master IN NS abc.com.
master IN NS abc.com.
NS master
NS slave
MX记录
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
-
一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
-
对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
范例:
mail IN MX 10 mx1.abc.org.
IN MX 20 mx2.abc.org.
mx1 A 192.168.91.10
mx2 A 192.168.91.10
A记录
name: 某主机的域名解析,例如:<www.kgc.com>
value:主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
范例:
www.abc.com. IN A 1.1.1.1
www.abc.com. IN A 2.2.2.2
www.abc.com. IN A 3.3.3.3
www.abc.com. IN A 4.4.4.4
* IN A 5.5.5.5
#代表泛域名
正常解析需要输入完整的域名还有主机名,在数据库文件里加上这个就可以随意写与该ip对应域名的主机名
如 qwq.abc.com
@ IN A 6.6.6.6
#代表不需要名字
直接 输入 abc.com 就可解析 出 ip 6.6.6.6
PTR记录
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;
而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
3.2.1.in-addr.arpa. IN PTR www.kgc.org.
#如1.2.3为网络地址,可简写成:
4 IN PTR www.kgc.com
CNAME别名记录
name: 别名的FQDN
value: 真正名字的FQDN
ftp.kgc.com. IN CNAME www.kgc.com
固定格式:
name [TTL] IN rr_type value
缓存时间 internet记录 区域解析库 值
$TTL 1D
@ IN SOA master.kgc.com. admin.kgc.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master.kgc.com.
master A 192.168.91.100
www A 192.168.91.103
db A 192.168.91.101
IN MX 10 mail.kgc.com.
mail A 192.168.91.10
ftp CNAME www
$TTL 1D #有效解析记录的生存周期
@ in SOA benet.com. admin.benet.com. ( #"@"符号表示当前的DNS区域名
0 ; serial #更新序列号,可以是10位以内的整数
1D ; refresh #刷新时间,重新下载地址数据的间隔
1H ; retry #重试延时,下载失败后的重试间隔
1W ; expire #失效时间,超过该时间仍无法下载则放弃#
3H) ; minimum #无效解析记录的生存周期,
NS benet.com. #记录当前区域的DNS服务器的名称
A 192.168.80.10 #记录主机IP地址
IN MX 10 mail.benet.com. #MX为邮件交换记录,数字越大优先级越低
www IN A 192.168.80.10 #记录正向解析www.benet.com对应的IP
mail IN A 192.168.80.11 #MX为邮件交换记录,数字越大优先级低
ftp IN CNAME www #CNAME使用别名,ftp 是www的别名
* IN A 192.168.80.100 #泛域名解析,"*"代表任意主机名
@ A 192.168.91.100 #可以不用输入主机名
解析 工具
dig
[root@localhost ~]#dig www.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13083
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 581 IN CNAME www.a.shifen.com.
www.a.shifen.com. 84 IN A 36.152.44.95
www.a.shifen.com. 84 IN A 36.152.44.96
;; Query time: 54 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: 四 10月 13 00:21:33 CST 2022
;; MSG SIZE rcvd: 101
host
[root@localhost ~]#host www.baidu.com
www.baid.com is an alias for tybf.cjlhdns.com.
tybf.cjlhdns.com has address 172.83.159.98
nslookup
[root@localhost ~]#nslookup
> www.baiud.com
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.baiud.com
Address: 103.51.144.90
开启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
rndc flush
#清除缓存