Linux——DNS的配置和使用

一、DNS

域名服务器,实现IP和域名的转换

DNS 协议运行在 UDP 协议之上,使用端口号 53

2.结构

DNS 的命名空间的结构如下:
1. 根域名( Root Domain ): 根域名位于 DNS 命名空间的顶部,它表示空字符串( "" ),通常以
一个点号( . )表示。根域名下面直接连接着顶级域名( TLD )。
2. 顶级域名( Top-Level Domain TLD ): 顶级域名是根域名的直接子节点,例如
".com" ".net" ".org" ".gov" ".edu" 等。顶级域名用于表示域名的类型或所属组织类型。
3. 二级域名( Second-Level Domain SLD ): 二级域名是位于顶级域名之下的域名部分,例如
".example" 。二级域名通常用于表示特定的组织、公司或网站。
4. 子域名( Subdomain ): 子域名是位于二级域名之下的域名部分,例如 " www.example.com "
中的 "www" 就是一个子域名。子域名通常用于区分不同的服务、部门或功能。
example是权威域名,权威域名是递归访问

二、DNS报文结构

有任何网络通信协议一样, DNS 请求报文和应答报文均需要满足一定的格式,才能被通信双方所理解。这就是 DNS 协议负责的范畴,它位于传输层之上,属于 应用层 协议。
DNS 报文分为 请求 应答 两种,结构是类似的,大致分为五部分:
头部( header ),描述报文类型,以及其下 4 个小节的情况;
问题节( question ),保存查询问题;
答案节( answer ),保存问题答案,也就是查询结果;
授权信息节( authority ),保存授权信息;
附加信息节( additional ),保存附加信息;

问题记录

一个问题记录由 3 个字段组成:
  • 待查询域名 Name ),这个字段长度不固定,由具体域名决定;
  • 查询类型 :
        ( Type ),域名除了关联 IP 地址,还可以关联其他信息,常见类型包括(下节详细介                       绍):

            1 表示 A 记录,即 IP 地址;

              28 表示 AAAA 记录,即 IPv6 地址;

                etc

  • Class )通常为 1 ,表示互联网地址;
域名字段,它的长度是不固定的。域名按 . 切分成若干部分,再依次保存。每个部分由一个前导计数字节开头,记录当前部分的字符数。
 常用DNS解析的类型

资源记录

服务端处理查询请求后,需要向客户端发送应答报文; 域名查询结果 作为 资源记录 ,保存在答案以及其后两节中。
答案节、授权信息节和附加信息节均由一条或多条资源记录组成,记录数目保存在头部中的对应字段,不再赘述。
答应报文

解析类型

当我们查询一个域名时,首先查找本地域名\rightarrow本地的缓存\rightarrow根域名服务器
\rightarrow顶级域名服务器\rightarrow权威域名服务器

DNS记录类型

实际上,域名和与之关联的信息,就构成了一条 DNS 记录 DNS record )。 DNS 记录可以理解成一个 键值对:
  • 键:域名;
  • 值:与域名关联的值
除了 IP 地址, DNS 记录值还可以是 IPv6 地址、别名、文本等等。据此, DNS 记录可分为若干不同类型,包括:
  • A ,主机 IP 地址;
  • AAAA ,主机 IPv6 地址;
  • ALIAS ,自动解析的别名( alias );
  • CNAME ,别名的权威名称( canonical name );
  • MX ,邮件交换服务器( Mail eXchange );
  • NS ,域名服务器( name server );
  • TXT ,描述文本;

A记录

[root@netbox ~]# dig test.fasionchan.com
; <<>> DiG 9.16.1-Ubuntu <<>> test.fasionchan.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49579
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;test.fasionchan.com. IN A
;; ANSWER SECTION:
test.fasionchan.com. 752 IN A 10.0.0.1
;; Query time: 71 msec
;; SERVER: 192.168.65.1#53(192.168.65.1)
;; WHEN: Mon Apr 26 17:22:16 CST 2021
;; MSG SIZE rcvd: 53

CNAME记录

CNAME 记录,表示别名的 权威名称 canonical name )。
域名可以取别名,以 webserver.fasionchan.com 为例,它可以取一个别名,比如:
network.fasionchan.com 。如此一来称前者是后者的 权威名称 CNAME 记录则保存权威名称。

MX记录

MX 记录,表示 邮件交换 mail exchange )服务,即邮件服务器。其中, MX Mail eXchange 的缩写。
电子邮件可以是说是互联网中发展最早,应用最为广泛的应用。我们发送邮件时,客户端需要根据自己的邮箱账号找到邮件服务器的地址,并通过 SMTP 协议和它进行通信。
每个邮件厂商都有一个自己的域名,查询该域名的 MX 记录,即可找到邮件服务器的地址。以 QQ 邮箱为例,它的域名是 qq.com

NS记录

NS 记录,保存着负责该域解析的权威 DNS 服务器,记录值为 DNS 服务器的域名。
以我的域名 fasionchan.com 为例,它在腾讯云 dnspod 上解析。我注册域名后,需要配置 NS
录,指向 dnspod 服务器。这个 NS 记录,最终会被同步到 .com 顶级域名服务器。

TXT记录

TXT 记录用来保存一些文本信息,这些信息可以用作配置,但不太常见。
很多地方使用 TXT 记录来验证域名所有权:先让域名所有人配置一条特殊的 TXT 记录,然后查询该记 录看结果是否匹配。

三、DNS安全和防护

劫持原理

由于家用路由器质量参差不齐,存在不少潜在安全漏洞。一旦家里的路由器被黑客攻破,黑客可以在DNS 代理上做手脚,将域名指到钓鱼站点进行欺诈。
如上图,路由器被黑客攻破,它的 DNS 代理服务被黑客控制。黑客在 DNS 代理上做手脚,将某个网站的域名,指向自己精心布置的钓鱼站点。这样的话,依靠 DNS 代理查询域名的终端,将被强制劫持到 钓鱼站点。
这就是所谓的 DNS 劫持 DNS Hijacking ): DNS 服务器受到攻击导致域名指向被黑客篡改。一旦域名被劫持到钓鱼网站,结果可能是灾难性的。

防御措施

证书认证
启用 HTTPS 协议
公共 DNS 服务
很多 互联网大厂都提供了公共 DNS 服务,这些服务器由背后的公司背书,值得信任。这个表格列举了
一些常见的公共 DNS 服务:

四、实验,DNS服务部署

 安装并启动服务

[root@dnsserver ~]# yum -y install unbound
[root@dnsserver ~]# rpm -qa | grep unbound
python3-unbound-1.7.3-14.el8.x86_64
unbound-libs-1.7.3-14.el8.x86_64
unbound-1.7.3-14.el8.x86_64
[root@dnsserver ~]# systemctl enable --now unbound
Created symlink /etc/systemd/system/multi-user.target.wants/unbound.service
→ /usr/lib/systemd/system/unbound.service.
[root@dnsserver ~]# systemctl status unbound
[root@dnsserver ~]# ss -anput | grep 53
# 注意防火墙以及SELinux
[root@dnsserver ~]# firewall-cmd --add-service=dns --permanent
[root@dnsserver ~]# firewall-cmd --reload
此时,修改 /etc/resolv.conf nameserver 的值为 127.0.0.1 则可以使用 127.0.01 来进行域名解析,下面是一个简单的验证
[root@dnsserver ~]# dig www.baidu.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45619
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 1126 IN CNAME www.a.shifen.com.
www.a.shifen.com. 226 IN A 110.242.68.3
www.a.shifen.com. 226 IN A 110.242.68.4
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)   #注意这里是修改后的服务器IP
;; WHEN: Tue Apr 23 09:23:30 PDT 2024
;; MSG SIZE rcvd: 101

配置缓存

现在尝试让 dnsserver 以外的主机,可以使用 dnsserver 上面的的 unbound 进行域名解析。
修改配置文件:
[root@dnsserver ~]# vim /etc/unbound/unbound.conf
修改内容如下:
默认情况下,unbound 服务只监听 127.0.0.1 ,修改为 0.0.0.0 之后,会监听服务器上面所有 IPv4 地址的53 号端口,以实现与其他主机之间使用 53 号端口通信。
这里规定了监听端口
仅对于内网地址提供服务,其实就是访问控制ACL 规则,只有使用 allow 结尾的地址段中的主机可以与目前的服务器交互,并使用它提供的 DNS 缓存服务。这里实例的写法是所有的 IPv4 地址,建议还是使用自 己试验环境的网段。

dnssec - lame - check 是一个用于检查 DNS 服务器是否缺乏 DNSSEC 权威性的工具或命令。在 DNSSEC中,权威性是指一个 DNS 服务器是否有权提供特定域名的验证结果。如果一个 DNS 服务器在 DNSSEC 上缺乏权威性,那么它无法提供对于该域名的 DNSSEC 记录的验证。

 

这里的配置,将使用一个知名的公共DNS服务器来进行域名解析,此时,在进行DNS解析时,会先转发 给指定8.8.8.8,进行一次递归,由8.8.8.8进行必要的迭代查询。

因为上面配置了使用8.8.8.8 进行迭代,所以就不再需要指定根服务器的了。

 重启验证

[root@dnsserver ~]# systemctl restart unbound.service
[root@dnsclient ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.110.131
[root@dnsclient ~]# dig www.baidu.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30307
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 708 IN CNAME www.a.shifen.com.
www.a.shifen.com. 0 IN A 110.242.68.3
www.a.shifen.com. 0 IN A 110.242.68.4
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 09:51:11 PDT 2024
;; MSG SIZE rcvd: 101

实验二:自定义域名解析

 [root@dnsserver ~]# vim /etc/unbound/unbound.conf

[root@dnsserver ~]# unbound-checkconf #检查配置文件语法,未指定路径就是默认配置文件
unbound-checkconf: no errors in /etc/unbound/unbound.conf
[root@dnsserver ~]# systemctl restart unbound

测试

[root@dnsclient ~]# dig -t a dnsserver.test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t a dnsserver.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4877
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dnsserver.test.com. IN A
;; ANSWER SECTION: ##这一行
dnsserver.test.com. 3600 IN A 192.168.110.131
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:23 PDT 2024
;; MSG SIZE rcvd: 63
[root@dnsclient ~]# dig -t a dnsclient.test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t a dnsclient.test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57939
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dnsclient.test.com. IN A
;; ANSWER SECTION: ##这一行
dnsclient.test.com. 3600 IN A 192.168.110.133
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:26 PDT 2024
;; MSG SIZE rcvd: 63
[root@dnsclient ~]# dig -t ns test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t ns test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57087
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.com. IN NS
;; ANSWER SECTION: ##这一行
test.com. 3600 IN NS 192.168.110.131.
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:43 PDT 2024
;; MSG SIZE rcvd: 66
[root@dnsclient ~]# dig -t mx test.com
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -t mx test.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53725
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;test.com. IN MX
;; ANSWER SECTION: ##这一行
test.com. 3600 IN MX 10 dnsclient.test.com.
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:03:55 PDT 2024
;; MSG SIZE rcvd: 63
[root@dnsclient ~]# dig -x 192.168.110.131
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -x 192.168.110.131
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5464
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;131.110.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION: ##这一行
131.110.168.192.in-addr.arpa. 3600 IN PTR dnsserver.test.com.
;; Query time: 2 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:04:11 PDT 2024
;; MSG SIZE rcvd: 89
[root@dnsclient ~]# dig -x 192.168.110.133
; <<>> DiG 9.11.13-RedHat-9.11.13-3.el8 <<>> -x 192.168.110.133
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52023
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;133.110.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION: ##这一行
133.110.168.192.in-addr.arpa. 3600 IN PTR dnsclient.test.com.
;; Query time: 0 msec
;; SERVER: 192.168.110.131#53(192.168.110.131)
;; WHEN: Tue Apr 23 11:04:14 PDT 2024
;; MSG SIZE rcvd: 89

维护命令简介

unbound-control dump-cache # 导出unbound缓存服务
unbound-control dump_cache > unbound.cache # 导出的数据保存到指定文件
unbound-control flush dnsserver.test.com # 刷新dnserver.test.com的缓存
unbound-control flush_zone test.com # 刷新test.com 域的缓存
unbound-control load_cache < unbound.cache # 从指定文件导入缓存

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值