一 、名字解析介绍和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 查询原理过程
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 软件?
我们需要安装两样 bing 主包 和 bind 工具包
yum install bind bind-utlis -y
# 安装服务和 工具包
实际操作:正向解析
第一步: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 命令切换到该目录下
第五步:数据库配置文件的更改。
改完保存退出 :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服务器的正向解析,也可以使用当前区域的名字
-
当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
例如:admin.kgc.com
-
主从服务区域传输相关定义以及否定的答案的统一的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
#清除缓存