dns基本概述
为什么需要域名
- 在互联网中,使用
ip
地址与服务器进行通信根本行不通,原因如下:- 1.不好记忆,如:学校官网的
ip
地址是39.104.16.126
,难以记忆 - 2.
ip
地址会经常发生变更,所以通过ip
地址去访问某台机器就容易出现无法访问的情况
- 1.不好记忆,如:学校官网的
- 此时
dns
就应运而生了,那dns
解决了什么问题dns
主要用来维护域名与ip
地址的对应关系- 将(好记忆的字符串)与(不好记忆的
ip
地址)进行关联
jd.com
-->1.1.1.1
tb.com
-->2.2.2.2
什么是dns
域名系统dns(domain name system)
主要功能是将用户请求的域名转换为ip
地址;dns
就像一位翻译官,它的基本工作原理可以用下图来表示:
dns域名结构
- 由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法
- 1.互联网中的域名是有结构规划的
- 2.由于域名进行了分级,在进行域名和
ip
地址解析时能更容易找到 - 3.其次域名具备全球唯一性
- 根域:知道所有顶级域名服务器的域名和地址
- 全世界只有13组根服务器,其中10台设置在美国,另外的3台分别在英国、瑞典、日本
- 顶级域:知道所有顶级域名服务器下注册的所有二级域名的
ip
地址- 顶级域有两种:通用域(
com、cn
)和国家域(hk
、jp
) - 顶级域名由
ICANN
(互联网名称与数字地址分配机构)委任的注册机构负责运行
- 顶级域有两种:通用域(
- 二级域:负责一个区的域名服务器(
tencent.com
)- 无需到
ICANN
进行申请,只需要到运行顶级域的注册机构去申请即可 - 如果申请的域名没有被注册,也没有被注册为商标,仅需要缴纳一笔年费即可获取
- 无需到
- 三级域或主机名:
- 根据服务器所提供的业务功能,选择配置对应的主机名称解析记录,比如
wordpress、zabbix、jumpserver
- 根据服务器所提供的业务功能,选择配置对应的主机名称解析记录,比如
dns查询原理
下面的示例概述了本地解析器没有域名对应的缓存,dns
查询所需的步骤:
- 1.用户在浏览器中输入
example.com
,则由本地域名服务器开始进行递归查询 - 2.本地域名服务器采用迭代查询的方法,向根域名服务器进行查询
- 3.根域名服务器告诉本地域名服务器,下一步应该查询的顶级域名服务器
.com TLD(Top-Level Domain)
的ip
地址 - 4.本地域名服务器向顶级域名服务器
.com TLD
进行查询 - 5.
.com TLD
服务器告诉本地域名服务器,下一步查询example.com
权威域名服务器的ip
地址 - 6.本地域名服务器向
example.com
权威域名服务器发送查询 - 7.
example.com
权威域名服务器告诉本地域名服务器所查询的主机ip
地址 - 8.本地域名服务器最后把查询到的
ip
地址响应给浏览器
递归查询
是指DNS
服务器在收到用户发起的请求时,必须向用户返回一个准确的查询结果
如果DNS
服务器本地没有存储与之对应的信息,则该服务器需要询问其他服务器,并将返回的查询结果提交给用户
迭代查询
是指DNS
服务器在收到用户发起的请求时,并不直接回复查询结果,而是告诉另一台DNS
服务器的地址,用户再向这台DNS
服务器提交请求,这样依次反复,直到返回查询结果
dns记录类型
A(Adress)地址记录
A
记录可实现将域名指向ip
地址,也称为正向解析- 正向解析:域名-->
DNS
服务返回ip
PTR(Pointer Record)逆向查询记录
PTR
记录可以实现ip
查找域名,也称为反向解析- 反向解析:
ip-->DNS
服务返回域名
CNAME(Canonical Name)规范名称记录
- 当需要将域名指向另一个域名,再由另一个域名提供
ip
地址,就需要添加CNAME
记录 - 最常用
CNAME
的场景有:WAF、CDN
NS(Name Server)域名服务器记录
- 1.客户端查询
DNS
服务,如当前DNS
无法提供权威解析,则返回一条NS
记录 - 2.客户端通过
NS
记录中提供的DNS
权威服务器进行解析
企业自建DNS
- 企业常规做法:购买域名、完成
ICP
备案,并使用公网DNS
服务进行免费(付费)解析 - 既然企业可以通过公网来完成域名解析,为何还要自建
DNS
呢- 1.内网
web
服务,例如:wordpress、zabbix、jumpserver
等,不适合解析至公网 - 2.内网中间件服务
db、mq
等,会经常迁移或扩缩容,应该使用域名对外提供,便于维护 - 3.服务器都有
hostname
,hostname
应该设置为FQDN
,如何维护主机名和主机的内网ip
的关系
- 1.内网
- 综上:我们需要构建至少一套企业内部的
DNS
服务
BIND基础应用
什么是BIND
BIND
由美国加州大学开发并且维护,是一个开源、稳定、且应用广泛的DNS
服务- 开源:指
BIND
服务源代码是开放的 - 稳定:指
BIND
服务运行非常稳定 - 广泛:政府企业、单位机构、学校等
- 开源:指
BIND的组成
BIND
提供域名解析服务、权威域名服务、DNS
调试工具- 域名解析服务:将域名解析为
ip
地址 - 权威域名服务:能从该服务器查询到完整域名对应的
ip
地址,则这台服务器就算权威解析 DNS
调试工具:主要提供DNS
客户端调试工具,供客户端使用
- 域名解析服务:将域名解析为
BIND服务实践
BIND服务安装
BIND
的安装非常简单,只需要通过yum
即可完成安装bind
提供主程序包bind-utils
提供工具包
yum install bind bind-utils
systemctl start named
systemctl enable named
BIND配置文件
- 1.主配置文件格式
option {}
:全局选项(监听端口、数据文件存储位置、缓存位置、权限等)logging {}
:服务日志选项zone . {}
:自定义区域配置include
:包含别的文件
- 2.主配置文件注意事项
- 语法非常严格
- 文件权限属主
root
,属组named
,文件权限640
- 3.主配置示例文件
cat /etc/named.conf
options {
//监听地址及端口
listen-on port 53 { localhost; };
listen-on-v6 port 53 { ::1; };
//区域配置存储目录
directory "/var/named";
//dns解析过内容的缓存文件
dump-file "/var/named/data/cache_dump.db";
//静态解析文件(几乎不用)
statistics-file "/var/named/data/named_stats.txt";
//内存的统计信息
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
//运行谁向本dns发起查询请求(localhost|ip|any)
allow-query { any; };
//递归查询
recursion yes;
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
//控制日志输出的级别以及输出的位置
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
//默认可以对任何域名提供解析服务,因为named.ca中存储的是全区根域服务器
zone "." IN {
type hint;
//区域配置文件名称
file "named.ca";
};
//包含的其他文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
客户端验证解析
1.配置DNS
服务器指向:在/etc/sysconfig/network-scripts/ifcfg-eth0
里配置DNS1
地址
vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=192.168.99.5
2.使用ping
命令验证解析
ping blue.yn.cn
PING blue.yn.cn (139.199.79.133) 56(84) bytes of data.
64 bytes from 139.199.79.133 (139.199.79.133): icmp_seq=1 ttl=50 time=19.0 ms
自定义区域(域名)
-
自定义域分为如下两类:
-
主机域(内网):
1.主机域其实是一个假的域名
2.主机域是不能解析到互联网上
3.主机域它只对局域网提供服务 -
业务网(公网):
1.业务域一般都是真实可用的
2.业务域是需要对外网用户提供服务的域名
-
自定义区域配置文件
- 区域
zone
文件定义在/etc/named.conf
配置 - 也可以配置在自定义的其他文件里,并在
named.conf
里include
- 注意文件的权限,属主
root
,属组named
,文件权限640
zone "dot.com" IN {
type master|slave; //自定义区域类型
file /path/to/zonefile; //绝对路径和相对路径
allow-update {ip|none}; //允许哪个ip可以使用nsupdate动态更新区域文件
};
自定义区域数据库文件
- 范例以及编写注意事项:
- 1.严格注意语法书写,其格式非常严格;
- 2.记录不准折行书写;
- 3.单行记录开通不准空格或
tab
开头;
cat /var/named/dot.com.zone
$TTL 600 //dns失效时间,单位秒
//区域名称 IN SOA ns.dot.com. 管理员邮箱
//区域名称可以使用@表示,@表示当前域
dot.com. IN SOA ns.dot.com. qq.dot.com. (
2024061117 //序列号(serial number)十进制,不能超过10位,通常使用日期时间戳
10800 //刷新时间(refresh time),即每隔多久到主服务器检查一次
900 //重试时间(retry time),即刷新不成功多久后重试,应该小于refresh time
604800 //过期时间(expire time)当辅助dns无法联系主dns时,辅助dns在多长时间内认为其缓存是有效的
86500 //权威应答的ttl(netgative answer ttl),缓存dns服务器可以缓存记录多长时间
)
//给客户端返回ns记录,dot.com这个域名是由哪几台权威服务器提供解析
dot.com. IN NS ns1.dot.com.
//A记录,配置权威域名服务器的真实ip地址
ns1.dot.com. IN A 192.168.99.5
//真正的域名解析
blue.yn.cn. IN A 192.168.99.7
zabbix.dot.com. IN A 192.168.99.4
jumpserver.dot.com. IN A 192.168.99.6
BIND实战场景-1
- 用户通过
DNS
服务器192.168.99.5
解析xxx.dot.com
- 1.添加
dot.com
区域配置文件 - 2.添加区域数据库文件,配置
ns
记录,返回dns
权威服务器地址 - 3.该域的
dns
权威服务器为192.168.99.5
- 4.添加该域的
A
记录解析
- 1.添加
新增区域配置文件
1.在主配置文件/etc/named.conf
,新增一个dot.com
区域配置
cat /etc/named.conf
...
//自行配置权威域名解析dot.com
zone "dot.com" IN {
type master;
file "dot.com.zone"; //具体解析记录配置存储在哪个文件
};
2.检查配置文件语法
named-checkconf
新增区域数据库文件
1.添加区域数据库文件
cat /var/named/dot.com.zone
$TTL 600
dot.com. IN SOA ns.dot.com. qq.dot.com. (
2024061117
10800
900
604800
86400
)
;给客户端返回ns记录,该域名由哪台权威服务器提供解析
dot.com. IN NS ns1.dot.com.
ns1.dot.com. IN A 192.168.99.5
;域名解析记录
blue.yn.cn. IN A 192.168.99.7
zabbix.dot.com. IN A 192.168.99.4
jumpserver.dot.com. IN A 192.168.99.6
2.检查区域数据库文件配置
named-checkzone dot.com /var/named/dot.com.zone
3.重载dns
服务器
rndc reload
//Remote Name Domain Controllerr
客户端测试解析域名
- 客户端测试域名解析
dig zabbix.dot.com @192.168.99.5
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;zabbix.dot.com. IN A
;; ANSWER SECTION:
zabbix.dot.com. 600 IN A 192.168.99.4
;; AUTHORITY SECTION:
dot.com. 600 IN NS ns1.dot.com.
;; ADDITIONAL SECTION:
ns1.dot.com. 600 IN A 192.168.99.5
dig zabbix.dot.com @192.168.99.5 +short
192.168.99.4
nslookup
> server 192.168.99.5
Default server: 192.168.99.5
Address: 192.168.99.5#53
> zabbix.dot.com
Server: 192.168.99.5
Address: 192.168.99.5#53
Name: zabbix.dot.com
Address: 192.168.99.4
BIND实战场景-2
- 用户通过
dns
服务器192.168.99.5
解析xxx.c.com
- 1.添加
c.com
区域配置文件 - 2.添加区域数据库文件,配置
ns
记录,返回dns
权威服务器地址 - 3.该域的
dns
权威服务器为192.168.99.5
- 4.添加该域的
CNAME
解析记录,解析至xxx.dot.com
域名上
- 1.添加
新增区域配置文件
1.再主配置文件/etc/named.conf
,新增一个c.com
区域配置
vim /etc/named.conf
zone "c.com" IN {
type master;
file "c.com.zone";
};
2.检查配置文件语法
named-checkconf
新增区域数据库文件
1.配置c.com
的CNAME
解析记录
cat /var/named/c.com.zone
$TTL 600
c.com. IN SOA ns.c.com. qq.c.com. (
2024061217
10800
900
604800
86400
)
c.com. IN NS ns1.c.com.
ns1.c.com. IN A 192.168.99.5
wp.c.com. IN CNAME blue.yn.cn.
zb.c.com. IN CNAME zabbix.dot.com.
js.c.com. IN CNAME jumpserver.dot.com.
2.检查区域数据库文件配置
named-checkzone c.com /var/named/c.com.zone
zone c.com/IN: loaded serial 2024061217
OK
3.重载DNS
服务
rndc reload
客户端测试解析域名
dig wp.c.com @192.168.99.5 +short
blue.yn.cn.
192.168.99.7
nslookup
> server 192.168.99.5
Default server: 192.168.99.5
Address: 192.168.99.5#53
> wp.c.com
Server: 192.168.99.5
Address: 192.168.99.5#53
wp.c.com canonical name = blue.yn.cn.
Name: blue.yn.cn
Address: 192.168.99.7
BIND实战场景-3
- 配置反向解析
PTR:IP-->FQDN
- 1.反向区域文件名称为逆向网络地址加
.in-addr-arpa.
后缀组成 - 2.例如192.168.99.5,完成格式为
99.168.192.in-addr-arpa.
- 1.反向区域文件名称为逆向网络地址加
新增区域配置文件
1.在主配置文件/etc/named.conf
,新增一个反向区域配置
vim /etc/named.conf
zone "99.168.192.in-addr.arpa" IN {
type master;
file "99.168.192.zone";
};
2.检查配置文件语法
named-checkconf
新增区域数据库文件
1.配置反向解析数据文件
cat /var/named/99.168.192.zone
$TTL 600
@ IN SOA 99.168.192.in-addr.arpa. qq.com. (
2024061220
10800
900
604800
86400
)
@ IN NS DnsChronyAsible.com.
5 IN PTR dnsChronyAsible.com.
3 IN PTR ZabbixDB.com.
4 IN PTR ZabbixServer.com.
6 IN PTR jumpserver.com.
7 IN PTR wordpress.com.
8 IN PTR openvpn.com.
2.测试数据文件是否正确
named-checkzone 99.168.192.in-addr.arpa. /var/named/99.168.192.zone
zone 99.168.192.in-addr.arpa/IN: loaded serial 2024061220
OK
客户端测试解析域名
dig -x 192.168.99.3 +short
ZabbixDB.com.
host 192.168.99.3
3.99.168.192.in-addr.arpa domain name pointer ZabbixDB.com.
nslookup 192.168.99.3
3.99.168.192.in-addr.arpa name = ZabbixDB.com.
DNS客户端工具
通用性 | 使用难易度 | |
---|---|---|
nslookup | 支持多平台、应用广泛 | 使用简单、易懂 |
dig | 常用于linux系统 | 比较专业 |
host | linux系统 | 简单、明了 |
host
# 查询SOA记录
host -t SOA baidu.com
baidu.com has SOA record dns.baidu.com. sa.baidu.com. 2012148209 300 300 2592000 7200
# 查询NS记录
host -t NS baidu.com
baidu.com name server ns7.baidu.com.
baidu.com name server ns2.baidu.com.
baidu.com name server ns4.baidu.com.
baidu.com name server dns.baidu.com.
baidu.com name server ns3.baidu.com.
# 查询A记录
host -t A baidu.com
baidu.com has address 39.156.66.10
baidu.com has address 110.242.68.66
host 192.168.99.3
3.99.168.192.in-addr.arpa domain name pointer ZabbixDB.com.
host blue.yn.cn
blue.yn.cn has address 192.168.99.7
nslookup
# 解析域名对应的ip地址
nslookup baidu.com
Server: 192.168.99.5
Address: 192.168.99.5#53
Non-authoritative answer:
Name: baidu.com
Address: 110.242.68.66
Name: baidu.com
Address: 39.156.66.10
# 解析域名SOA记录
nslookup
> set q=soa
> baidu.com
Server: 192.168.99.5
Address: 192.168.99.5#53
Non-authoritative answer:
baidu.com
origin = dns.baidu.com
mail addr = sa.baidu.com
serial = 2012148209
refresh = 300
retry = 300
expire = 2592000
minimum = 7200
Authoritative answers can be found from:
baidu.com nameserver = ns2.baidu.com.
baidu.com nameserver = ns7.baidu.com.
baidu.com nameserver = dns.baidu.com.
baidu.com nameserver = ns4.baidu.com.
baidu.com nameserver = ns3.baidu.com.
ns4.baidu.com internet address = 111.45.3.226
ns4.baidu.com internet address = 14.215.178.80
ns2.baidu.com internet address = 220.181.33.31
ns7.baidu.com internet address = 180.76.76.92
dns.baidu.com internet address = 110.242.68.134
ns3.baidu.com internet address = 36.155.132.78
ns3.baidu.com internet address = 153.3.238.93
ns7.baidu.com has AAAA address 240e:940:603:4:0:ff:b01b:589a
ns7.baidu.com has AAAA address 240e:bf:b801:1002:0:ff:b024:26de
nslookup 192.168.99.8
8.99.168.192.in-addr.arpa name = openvpn.com.
dig
# 通过哪个dns来解析域名,正向解析
dig @192.168.99.5 js.c.com +short
jumpserver.dot.com.
192.168.99.6
# 通过ip解析对应的域名,反向解析
dig -x 192.168.99.7 +short
wordpress.com.
DNS递归查询
什么是递归查询
- 如果你要建立一个授权域名服务器,仅提供本地已存在域名解析,那么将
recursion
参数设置为no
- 如果你要建立一个递归
DNS
服务器,那么需要将recursion
参数设置为yes
- 如果递归
dns
服务器有公网ip
地址,则需要开启访问控制功能,只有合法的用户才可以发起查询
递归查询配置参数
参数 | 选项 | 作用 | ||
---|---|---|---|---|
recursion | yes/no | 是否开启递归查询请求 | ||
allow-recursion | {address_match_list | any | none}; | 限制客户端递归请求的范围 |
递归查询场景实践
开启递归查询
BIND
默认配置中的recursion
参数是启用的- 1.配置仅允许
192.168.99.0
、10.168.99.0
网段用户可以查询 - 2.使用客户端查询系统中存在的域名
- 3.使用客户端查询系统中不存在的域名(让
BIND
进行递归查询)
- 1.配置仅允许
1.修改/etc/named.conf
配置文件
vim /etc/named.conf
recursion yes;
allow-recursion {192.168.99.0/24;10.168.99.0/24;};
rndc reload
2.查询存在BIND
服务中的域名
dig jumpserver.dot.com +short
192.168.99.6
3.查询不存在BIND
服务中的域名;能获得正确返回,原因是BIND
进行了递归查询
dig qq.com +short
203.205.254.157
123.150.76.218
113.108.81.189
关闭递归查询
1.修改/etc/named.conf
配置文件,关闭递归查询
vim /etc/named.conf
recursion no;
rndc reload
2.查询本地存在域名会成功返回;因为本地无需进行递归查询,即可返回权威解析
dig zabbix.dot.com +short
192.168.99.4
3.由于本地无法返回权威结果,同时也禁用了递归查询,所以查询本地不存在域名会有WARNING
提示
dig blue.yn.cn
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;blue.yn.cn. IN A
留言