dns服务详解

dns服务

1、dns服务是什么

  • 叫做名称服务,作用就是将域名解析成ip地址,这个叫做正向解析

  • 将ip地址解析成域名叫做反向解析

  • 还提供邮件服务器的交换记录

  • 在互联网中有很重要的作用

  • 是一个c/s架构,每一个电脑就是一个dns客户端,客户端向服务端发送请求,请求服务端提供一个域名的ip地址就是寻求解析

  • dns使用udp和tcp53端口进行通信

2、dns原理

1、dns的层级结构

  • 根域, . 互联网上所有的记录解析都是靠这个根域维持的,全球有13个,负责顶级域的解析,出现example.com域名需要解析时,根域返回一组.com服务器的地址,有.com的服务器进行解析

  • 顶级域 .com .cn .org .net 顶级域负责找域名的权威域

  • 权威域 最终负责将域名解析成ip的节点

2、dns的解析方式

1、递归查询

  • zhangsan.lab0.cn

  • 先去找/etc/hosts文件有没有绑定,没有的话,就去找,本地的dns 119.29.29.29 ,还是没有的话就去找上游的dns,还没有的话,就去找权威dns, 权威dns找到后,返回给上游的dns,返回给本地的dns,最后返回给用户

  • 递归查询就是,指的就是客户端找指定的dns查询记录,dns直接返回记录,
    img

2、迭代查询

  • zhangsan.lab0.cn

  • 解析的流程:

    • 先去找本地的dns ,返回一个.cn dns

    • 用户查询.cn dns 顶级域返回一个

    • 返回一个lab0.cn dns

    • 用户查询lab0.cn dns 权威域返回ip地址

    • 返回 zhansan.lab0.cn 的ip地址

3、dns解析原理

# 域名 www.example.com
# dns结构 www.example.com. 
# 从右往左查询
  • 递归和迭代都使用

  • 一次递归(本地的dns发起解析)和多次迭代

  • 原理

      1. 在本地缓存中查找是否有对应IP地址
      1. 查看本地hosts文件是否配置静态域名解析
      1. 向本地DNS服务器发送查询请求
      1. 如果本地DNS服务器没有所请求的域名,则由其向根服务器查询
      1. 根服务器将对应的顶级DNS服务器地址提供给本地DNS服务器
      1. 本地DNS服务器向顶级DNS服务器发送解析请求
      1. 顶级DNS服务器将对应的权威DNS服务器地址返回给本地DNS服务器
      1. 本地DNS服务器向权威DNS服务器发送解析请求
      1. 权威DNS服务器完成地址解析,将域名对应的地址返回给本地DNS服务器
      1. 本地DNS服务器将地址返回给客户端
    • 其中还有一个点就是,各个dns服务器上面有缓存,90%以上解析的都是缓存

4、反向解析

  • 使用场景,防止垃圾邮件

  • 将域名解析成ip地址,arpa称为反向记录

  • example.com(192.168.10.100) 的人发送一个邮件

  • 交给了qq邮箱,然后对example.com进行反向解析,如果是192.168.10.100,成功,否则就是垃圾邮件

img

3、dns服务搭建

1、安装软件包

[root@server ~]# yum -y install bind

  • 查看这个软件产生了哪几个文件
[root@server ~]# rpm -qc bind
/etc/logrotate.d/named 
/etc/named.conf  # dns的主配置文件
/etc/named.rfc1912.zones  # dns的区域文件
/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  # 反向解析文件模版

2、修改主配置文件

[root@server ~]# vim /etc/named.conf

listen-on port 53 { any; };  # 允许监听所有的ip地址
allow-query     { any; };   # 允许所有人查询ip地址
recursion yes;   # 递归查询开启,为no的,就不向上游的dns发起请求
include "/etc/named.rfc1912.zones";  # 加载区域文件
include "/etc/named.root.key";   # 根域的列表

  • 上面配置成这样,其他客户端修改dns为dns服务器ip地址

  • 就能解析百度了,或者其他的了,但是关掉了递归查询的话,就访问不到了

3、配置正向解析

1、配置区域文件

[root@server named]# vim /etc/named.rfc1912.zones 

# 声明一个example.com的dns区域,管理www.example.com 或者mail.example.com 
zone "example.com" IN {
        type master;   # 主区域,主服务器,example.com是权威服务器
        file "example.com.zone";  # 解析记录文件
};              # 结束该区域的配置块

2、正向解析模块配置

[root@server named]# cat named.localhost 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	127.0.0.1
	AAAA	::1


# $TTL 缓存的生存周期

# @ 这个表示当前的域名 是下面的example.com

# IN 互联网

# SOA 这个区域的起始记录,也就是权威服务器

# 0	; serial  表示更新序列号
# 1D	; refresh  更新间隔的,从服务器下载数据
# 1H	; retry   失败重试
# 1W	; expire   区域文件过期时间
# 3H )	; minimum   缓存的最小生存周期

# NS 权威服务器  一般写法是 ns.example.com,作为dns服务器的主机名,但是后面的 A 记录需要解析这个ns

# A 记录 将域名解析成ipv4地址

# AAAA 记录 将域名解析成ipv6地址

# CNAME 解析成别名(CDN)

# MX 邮件交换记录

  • 配置正向解析文件
[root@server named]# cp -a named.localhost example.com.zone

[root@server named]# cat example.com.zone 
$TTL 1D
@	IN SOA	example.com  admin.example.com. (   # example.com是权威域,后面是邮箱,.表示@
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	ns.example.com.  # 权威服务器
ns	A	192.168.10.11   # 权威服务器的解析
www	A	192.168.10.10  # www.example.com 主机名的配置
qwe     A	192.168.10.12


3、正向解析测试

[root@node1 ~]# nslookup qwe.example.com
Server:		192.168.50.20
Address:	192.168.50.20#53

Name:	qwe.example.com
Address: 192.168.10.12

4、配置反向解析

  • 将ip地址解析成域名

  • 这个反向解析文件,只能配置一个子网的,如果需要配置多个子网的,需要写多个文件

1、配置反向解析区域文件

zone "0.168.192.in-addr.arpa" IN {  # ip地址需要反着写
        type master;
        file "0.168.192.zone";  # 配置文件路径
};

2、配置反向解析的文件

[root@server named]# cp -a named.loopback 0.168.192.zone
[root@server named]# cat 0.168.192.zone 
$TTL 1D
@	IN SOA	example.com  admin.example.com. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	example.com.
10	PTR	qwe.com.  # PTR反向解析
20	PTR	ooo.com.


3、反向解析测试

[root@node1 ~]# nslookup 192.168.0.10
10.0.168.192.in-addr.arpa	name = qwe.com.

[root@node1 ~]# nslookup 192.168.0.20
20.0.168.192.in-addr.arpa	name = ooo.com.

5、配置CNAME(cdn实现之一)

  • CNAME 将一个域名指向另一个域名,也就是别名

  • cdn是内容分发网络

    • 分发网站静态资源(图片、视频、JS/CSS),核心是就近访问加速和负载均衡

    • 访问域名时,DNS 会将请求分配到离用户最近的 CDN 节点,节点缓存资源直接响应,减少源服务器压力且速度更快

[root@server named]# cat example.com.zone 
$TTL 1D
@	IN SOA	example.com  admin.example.com. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	ns.example.com.
ns	A	192.168.10.11
www	A	192.168.10.10
test	CNAME   www.example.com.  # test.example.com 指向了www.example.com
qwe     A	192.168.10.12

  • 测试
# 发现是www.example.com 回包了
[root@node1 ~]# ping test.example.com
PING www.example.com (192.168.10.10) 56(84) bytes of data.

[root@node1 ~]# nslookup test.example.com
Server:		192.168.50.20
Address:	192.168.50.20#53

test.example.com	canonical name = www.example.com.
Name:	www.example.com
Address: 192.168.10.10

6、配置文件的检查

# 检查配置文件
[root@server named]# named-checkconf /etc/named.rfc1912.zones 
[root@server named]# named-checkconf /etc/named.conf 

# 检查区域文件
# 指定区域名和文件路径
[root@server named]# named-checkzone example.com  /var/named/example.com.zone 
zone example.com/IN: loaded serial 0
OK

4、测试工具命令

1、dig命令

  • 指定记录类型
dig example.com AAAA  # IPv6 记录
dig example.com MX    # 邮件服务器记录
dig example.com NS    # 域名服务器记录
dig example.com TXT   # 文本记录
  • 指定dns服务器查询
dig @8.8.8.8 example.com  # 用谷歌 DNS 解析(@后接服务器 IP/域名)
dig @192.168.10.11 example.com  # 用自定义 DNS 服务器(如本地搭建的 ns.example.com)
  • 反向解析
dig -x 192.168.10.10  # -x 表示反向解析
dig -x 192.168.10.10 +short  # 简化输出
dig example.com +trace  # 比 nslookup -trace 更详细,显示每一步的查询和响应

2、nslookup命令

  • 追踪解析过程
dig example.com -trace  # 比 nslookup -trace 更详细,显示每一步的查询和响应

3、host命令

host -t MX example.com  # 查 MX 记录
host example.com 8.8.8.8  # 用指定 DNS 服务器解析
posted @ 2025-11-16 19:52  乔的港口  阅读(8)  评论(0)    收藏  举报