建立自有递归DNS服务器

原文链接

个人博客

简介

本教程教大家自建一个递归DNS服务器,让所有DNS请求向权威服务器进行查询。

DNS服务器软件使用unbound

系统使用Rocky Linux 8

关闭防火墙和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递归服务器解析过程跟踪

dig +trace baidu.com


; <<>> DiG 9.11.36-RedHat-9.11.36-5.el8_7.2 <<>> +trace baidu.com
;; global options: +cmd
.			9981	IN	NS	g.root-servers.net.
.			9981	IN	NS	j.root-servers.net.
.			9981	IN	NS	c.root-servers.net.
.			9981	IN	NS	m.root-servers.net.
.			9981	IN	NS	i.root-servers.net.
.			9981	IN	NS	k.root-servers.net.
.			9981	IN	NS	b.root-servers.net.
.			9981	IN	NS	f.root-servers.net.
.			9981	IN	NS	d.root-servers.net.
.			9981	IN	NS	l.root-servers.net.
.			9981	IN	NS	e.root-servers.net.
.			9981	IN	NS	h.root-servers.net.
.			9981	IN	NS	a.root-servers.net.

# 通过114获取到root C的IP地址

;; Received 824 bytes from 114.114.114.114#53(114.114.114.114) in 0 ms

com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.

# 通过root C服务器,获取到所有.com 权威服务器

;; Received 1197 bytes from 192.33.4.12#53(c.root-servers.net) in 197 ms

baidu.com.		172800	IN	NS	ns2.baidu.com.
baidu.com.		172800	IN	NS	ns3.baidu.com.
baidu.com.		172800	IN	NS	ns4.baidu.com.
baidu.com.		172800	IN	NS	ns1.baidu.com.
baidu.com.		172800	IN	NS	ns7.baidu.com.

# 通过.com 权威服务器,获取到baidu.com的权威服务器。

;; Received 845 bytes from 192.43.172.30#53(i.gtld-servers.net) in 237 ms

baidu.com.		600	IN	A	39.156.66.10
baidu.com.		600	IN	A	110.242.68.66
baidu.com.		86400	IN	NS	dns.baidu.com.
baidu.com.		86400	IN	NS	ns7.baidu.com.
baidu.com.		86400	IN	NS	ns4.baidu.com.
baidu.com.		86400	IN	NS	ns2.baidu.com.
baidu.com.		86400	IN	NS	ns3.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 根服务器介绍

安装

dnf install unbound -y

配置

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
    
    
# 在server下,修改如上配置,监听所有IPv4和IPv6地址,和允许所有IPv4地址和IPv6访问使用DNS服务器。    

启动和验证

systemctl enable --now unbound

# 启动服务并设置开机启动

systemctl status unbound

# 查看服务状态

dnf install bind-utils -y

dig @localhost www.qq.com

# 安装dig,指定本地dns服务器,查询域名测试可用性。

dig +short TXT whoami.ds.akahelp.net  @127.0.0.1

# 查询dns服务器访问权威服务器使用的公网IP。

抓包验证

tcpdump -i eth0  port domain -w ./dns.pcap 

# 可在服务器指定接口抓包dns报文进行分析,使用Wireshark 打开。

参考

红帽文档

https://www.dns.com/supports/681.html

https://www.cloudflare-cn.com/learning/dns/what-is-dns/

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值