拋棄阿里云 - 建立自有遞歸DNS服務器

簡介

由于最近國內(nèi)的阿里的公共DNS服務器也進行了限速,之前騰訊的DNS也限速了。

所以本教程教大家自建一個遞歸DNS服務器,讓所有DNS查詢請求向權(quán)威服務器進行查詢。

DNS服務器軟件使用Unbound

系統(tǒng)使用Rocky Linux 8/9

關閉防火墻和SElinux

!注意:國內(nèi)遞歸DNS服務器若對公網(wǎng)開放,需要進行備案。

遞歸DNS服務器與權(quán)威DNS服務器

1.權(quán)威DNS:

權(quán)威DNS是經(jīng)過上一級授權(quán)對域名進行解析的服務器,同時它可以把解析授權(quán)轉(zhuǎn)授給其他人,如COM頂級服務器可以授權(quán)dns.com這個域名的的權(quán)威服務器為NS.ABC.COM,同時NS.ABC.COM還可以把授權(quán)轉(zhuǎn)授給NS.DDD.COM,這樣NS.DDD.COM就成了ABC.COM實際上的權(quán)威服務器了。平時我們解析域名的結(jié)果都源自權(quán)威DNS。比如dns.com的權(quán)威DNS服務器就是ns1.dns.com、ns2.dns.com。然后通過ns1.dns.com即可查詢域名的具體IP地址或其他記錄。

2.遞歸DNS:

負責接受用戶對任意域名查詢,并返回結(jié)果給用戶。遞歸DNS可以緩存結(jié)果以避免重復向上查詢。我們平時使用最多的就是這類DNS,他對公眾開放服務,一般由網(wǎng)絡運營商提供,大家都自己可以架遞歸DNS提供服務。遞歸DNS一定要有可靠的互聯(lián)網(wǎng)連接方可使用。比如谷歌的8.8.8.8和8.8.4.4以及114的114.114.114.114和114.114.115.115都屬于這一類DNS。你本地電腦上設置的DNS就是這類DNS。

3.轉(zhuǎn)發(fā)DNS:

負責接受用戶查詢,并返回結(jié)果給用戶。但這個結(jié)果不是按標準的域名解析過程得到的,而是直接把遞歸DNS的結(jié)果轉(zhuǎn)發(fā)給用戶。它也具備緩存功能。他主要使用在沒有直接的互聯(lián)網(wǎng)連接,但可以連接到一個遞歸DNS那里,這時使用轉(zhuǎn)發(fā)DNS就比較合適。其缺陷是:直接受遞歸DNS的影響,服務品質(zhì)較差。比如我們用的路由器里面的DNS就是這一類,用路由器的朋友可以看下本地電腦的DNS一般都是192.168.1.1。

查看DNS遞歸服務器解析過程跟蹤

安裝工具、關閉防火墻、關閉SELinux


systemctl disable --now firewalld

sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config && setenforce 0

dnf install tree vim bash-completion tar bind-utils -y


dig查看

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 權(quán)威服務器

;; 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 權(quán)威服務器,獲取到baidu.com的權(quán)威服務器。

;; 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 權(quán)威服務器,獲取到 baidu.com的ip解析為112.80.248.64

;; Received 356 bytes from 112.80.248.64#53(ns3.baidu.com) in 26 ms

安裝

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下,修改如上配置,監(jiān)聽所有IPv4和IPv6地址,和允許所有IPv4地址和IPv6訪問使用DNS服務器。    

啟動和驗證

systemctl enable --now unbound

# 啟動服務并設置開機啟動

systemctl status unbound

# 查看服務狀態(tài)

dnf install bind-utils -y

dig @localhost www.qq.com

# 安裝dig,指定本地dns服務器,查詢域名測試可用性。

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

# 查詢dns服務器訪問權(quán)威服務器使用的公網(wǎng)IP。

抓包驗證

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

# 可在服務器指定接口抓包dns報文進行分析,使用Wireshark 打開。

技術交流群

發(fā)送郵件到 ?? me@songxwn.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容