简介
本教程教大家自建一个递归DNS服务器,让所有DNS请求向权威服务器进行查询。
DNS服务器软件使用unbound
系统使用Rocky Linux8
关闭防火墙和SElinux
注意:本教程只是简单的建立一个可用的DNS递归服务器,可以小规模使用,用于学习解析过程。
递归DNS服务器与权威DNS服务器
1.权威DNS:
权威DNS是经过上一级授权对域名进行解析的服务器,同时它可以把解析授权转授给其他人,如COM顶级服务器可以授权dns.com这个域名的的权威服务器为NS.ABC.COM,同时NS.ABC.COM还可以把授权转授给NS.DDD.COM,这样NS.DDD.COM就成了ABC.COM实际上的权威服务器了。平时我们解析域名的结果都源自权威DNS。比如dns.com的权威DNS服务器就是ns1.dns.com、ns2.dns.com。然后通过ns1.dns.com即可查询域名的具体IP地址或其他记录。
2.递归DNS:
负责接受用户对任意域名查询,并返回结果给用户。递归DNS可以缓存结果以避免重复向上查询。我们平时使用最多的就是这类DNS,他对公众开放服务,一般由网络运营商提供,大家都自己可以架递归DNS提供服务。递归DNS一定要有可靠的互联网连接方可使用。比如谷歌的8.8.8.8和8.8.4.4以及114的114.114.114.114和114.114.115.115都属于这一类DNS。你本地电脑上设置的DNS就是这类DNS。
3.转发DNS:
负责接受用户查询,并返回结果给用户。但这个结果不是按标准的域名解析过程得到的,而是直接把递归DNS的结果转发给用户。它也具备缓存功能。他主要使用在没有直接的互联网连接,但可以连接到一个递归DNS那里,这时使用转发DNS就比较合适。其缺陷是:直接受递归DNS的影响,服务品质较差。比如我们用的路由器里面的DNS就是这一类,用路由器的朋友可以看下本地电脑的DNS一般都是192.168.1.1。
查看DNS递归服务器解析过程跟踪
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| dig +trace baidu.com
; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> +trace baidu.com ;; global options: +cmd .9981INNSg.root-servers.net. .9981INNSj.root-servers.net. .9981INNSc.root-servers.net. .9981INNSm.root-servers.net. .9981INNSi.root-servers.net. .9981INNSk.root-servers.net. .9981INNSb.root-servers.net. .9981INNSf.root-servers.net. .9981INNSd.root-servers.net. .9981INNSl.root-servers.net. .9981INNSe.root-servers.net. .9981INNSh.root-servers.net. .9981INNSa.root-servers.net.
# 通过114获取到root C的IP地址
;; Received 824 bytes from 114.114.114.114#53(114.114.114.114) in 0 ms
com.172800INNSa.gtld-servers.net. com.172800INNSd.gtld-servers.net. com.172800INNSl.gtld-servers.net. com.172800INNSc.gtld-servers.net. com.172800INNSm.gtld-servers.net. com.172800INNSh.gtld-servers.net. com.172800INNSe.gtld-servers.net. com.172800INNSj.gtld-servers.net. com.172800INNSb.gtld-servers.net. com.172800INNSi.gtld-servers.net. com.172800INNSg.gtld-servers.net. com.172800INNSf.gtld-servers.net. com.172800INNSk.gtld-servers.net.
# 通过root C服务器,获取到所有.com 权威服务器
;; Received 1197 bytes from 192.33.4.12#53(c.root-servers.net) in 197 ms
baidu.com.172800INNSns2.baidu.com. baidu.com.172800INNSns3.baidu.com. baidu.com.172800INNSns4.baidu.com. baidu.com.172800INNSns1.baidu.com. baidu.com.172800INNSns7.baidu.com.
# 通过.com 权威服务器,获取到baidu.com的权威服务器。
;; Received 845 bytes from 192.43.172.30#53(i.gtld-servers.net) in 237 ms
baidu.com.600INA39.156.66.10 baidu.com.600INA110.242.68.66 baidu.com.86400INNSdns.baidu.com. baidu.com.86400INNSns7.baidu.com. baidu.com.86400INNSns4.baidu.com. baidu.com.86400INNSns2.baidu.com. baidu.com.86400INNSns3.baidu.com.
# 通过 ns3.baidu.com 权威服务器,获取到 baidu.com的ip解析为112.80.248.64
;; Received 356 bytes from 112.80.248.64#53(ns3.baidu.com) in 26 ms
|
DNS 根服务器介绍
安装
配置
1 2 3 4 5 6 7 8 9 10 11 12
| vim /etc/unbound/unbound.conf
server: interface: 0.0.0.0 interface: ::0 access-control: 0.0.0.0/0 allow access-control: ::/0 allow
|
启动和验证
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| systemctl enable --now unbound
systemctl status unbound
dnf install bind-utils -y
dig @localhost www.qq.com
dig +short TXT whoami.ds.akahelp.net @127.0.0.1
|
抓包验证
1 2 3 4
| tcpdump -i eth0 port domain -w ./dns.pcap
|
参考
红帽文档
https://www.dns.com/supports/681.html
https://www.cloudflare-cn.com/learning/dns/what-is-dns/