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直接返回记录,

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发起解析)和多次迭代
-
原理
-
- 在本地缓存中查找是否有对应IP地址
-
- 查看本地hosts文件是否配置静态域名解析
-
- 向本地DNS服务器发送查询请求
-
- 如果本地DNS服务器没有所请求的域名,则由其向根服务器查询
-
- 根服务器将对应的顶级DNS服务器地址提供给本地DNS服务器
-
- 本地DNS服务器向顶级DNS服务器发送解析请求
-
- 顶级DNS服务器将对应的权威DNS服务器地址返回给本地DNS服务器
-
- 本地DNS服务器向权威DNS服务器发送解析请求
-
- 权威DNS服务器完成地址解析,将域名对应的地址返回给本地DNS服务器
-
- 本地DNS服务器将地址返回给客户端
-
其中还有一个点就是,各个dns服务器上面有缓存,90%以上解析的都是缓存
-
4、反向解析
-
使用场景,防止垃圾邮件
-
将域名解析成ip地址,arpa称为反向记录
-
example.com(192.168.10.100) 的人发送一个邮件
-
交给了qq邮箱,然后对example.com进行反向解析,如果是192.168.10.100,成功,否则就是垃圾邮件

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 服务器解析

浙公网安备 33010602011771号