DNS 域名解析

一 、名字解析介绍和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 (政府部门)

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: 有多部分组成

注意:

  1. 当前区域的主DNS服务器的正向解析,也可以使用当前区域的名字

  2. 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换

例如:admin.kgc.com

  1. 主从服务区域传输相关定义以及否定的答案的统一的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.

注意:

  1. 相邻的两个资源记录的name相同时,后续的可省略

  2. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录

  3. 一个区域可以有多个NS记录

范例

master IN NS abc.com.

master IN NS abc.com.


         NS  master
         NS  slave
MX记录

name: 当前区域的名字

value: 当前区域的某邮件服务器(smtp服务器)的主机名

注意:

  1. 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高

  2. 对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
#清除缓存
相关推荐
龙哥说跨境2 分钟前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
懒大王就是我17 分钟前
C语言网络编程 -- TCP/iP协议
c语言·网络·tcp/ip
Elaine20239130 分钟前
06 网络编程基础
java·网络
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
海绵波波1072 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip
九河云4 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock4 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
幺零九零零5 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
热爱跑步的恒川5 小时前
【论文复现】基于图卷积网络的轻量化推荐模型
网络·人工智能·开源·aigc·ai编程