如何使用 DNSMAQ 搭建 DNS 服务器?
作者 |?阿文
責(zé)編 |?郭芮
DNSmasq是一個(gè)小巧且方便地用于配置DNS和DHCP的工具,適用于小型網(wǎng)絡(luò),它提供了DNS功能和可選擇的DHCP功能。自己搭建公共DNS更加靈活,如果是在本地搭建,還可以大幅提高解析速度。 相比較BIND那復(fù)雜的配置來說,dnsmasq輕量很多。 概念 首先,我們需要了解幾個(gè)概念,即根服務(wù)器和 DNS 的解析步驟方便大家理解。 根域名服務(wù)器(root name server)是互聯(lián)網(wǎng)域名解析系統(tǒng)(DNS)中最高級(jí)別的域名服務(wù)器,負(fù)責(zé)返回頂級(jí)域名的權(quán)威域名服務(wù)器的地址。我們?cè)诰W(wǎng)址中鍵入的域名,其背后都需要通過 DNS 系統(tǒng)去解析返回 IP,從而讓用戶訪問指定的服務(wù)器資源。而 DNS 查詢解析記錄并不是直接去根服務(wù)器去查詢,而是逐級(jí)遞歸往上一層一層的去查。 目前世界上共計(jì)有 13 臺(tái)根服務(wù)器,由12 個(gè)不同的獨(dú)立組織運(yùn)營(yíng),其中美國(guó)控制的有10臺(tái),歐洲2臺(tái),位于英國(guó)和瑞典,亞洲1臺(tái)位于日本。具體的根服務(wù)器信息,可也在 https://root-servers.org/ 查看。 我們可以使用 dig 命令去查看即可,如下所示:
?
#?dig
;?<<>>?DiG?9.10.6?<<>>?@114.114.114.114
;?(1?server?found)
;;?global?options:?+cmd
;;?Got?answer:
;;?->>HEADER<<-?opcode:?QUERY,?status:?NOERROR,?id:?26189
;;?flags:?qr?rd?ra;?QUERY:?1,?ANSWER:?13,?AUTHORITY:?0,?ADDITIONAL:?1
;;?OPT?PSEUDOSECTION:
;?EDNS:?version:?0,?flags:;?udp:?512
;;?QUESTION?SECTION:
;.????????????????IN??NS
;;?ANSWER?SECTION:
.????????????658?IN??NS??a.root-servers.net.
.????????????658?IN??NS??b.root-servers.net.
.????????????658?IN??NS??c.root-servers.net.
.????????????658?IN??NS??d.root-servers.net.
.????????????658?IN??NS??e.root-servers.net.
.????????????658?IN??NS??f.root-servers.net.
.????????????658?IN??NS??g.root-servers.net.
.????????????658?IN??NS??h.root-servers.net.
.????????????658?IN??NS??i.root-servers.net.
.????????????658?IN??NS??j.root-servers.net.
.????????????658?IN??NS??k.root-servers.net.
.????????????658?IN??NS??l.root-servers.net.
.????????????658?IN??NS??m.root-servers.net.
;;?Query?time:?39?msec
;;?SERVER:?114.114.114.114#53(114.114.114.114)
;;?WHEN:?Wed?Jun?26?17:30:51?CST?2019
;;?MSG?SIZE??rcvd:?239 可以看到,根服務(wù)器以 A到 M 開頭的二級(jí)域名后面跟上 root-servers.net ,正好是 13 臺(tái),但是這 13 并不是物理上的 13 臺(tái),而是邏輯上的 13 臺(tái),其背后擁有幾百臺(tái)的鏡像機(jī)器來為其分擔(dān)請(qǐng)求,全球很多國(guó)家都有根服務(wù)器的鏡像,這些鏡像服務(wù)器主要是用來分擔(dān)根服務(wù)器的負(fù)載。 一次DNS 查詢可以短到兩個(gè)包:一個(gè)查詢包、一個(gè)響應(yīng)包,顧名思義,查詢包是用來發(fā)送查詢的,例如你要查詢www.baidu.com 的解析結(jié)果,而響應(yīng)包則會(huì)返回解析結(jié)果給你。 事實(shí)上,一個(gè) DNS 的查詢過程非常復(fù)雜,它分成很多個(gè)步驟: 第一步:客戶機(jī)提出域名解析請(qǐng)求,并將該請(qǐng)求發(fā)送給本地的域名服務(wù)器。 第二步:當(dāng)本地的域名服務(wù)器收到請(qǐng)求后,就先查詢本地的緩存,如果有該紀(jì)錄項(xiàng),則本地的域名服務(wù)器就直接把查詢的結(jié)果(域名對(duì)應(yīng)的IP地址)返回。 第三步:如果本地的緩存中沒有該紀(jì)錄,則本地域名服務(wù)器就直接把請(qǐng)求發(fā)給根域名服務(wù)器,然后根域名服務(wù)器再返回給本地域名服務(wù)器一個(gè)所查詢域(根的子域) 的主域名服務(wù)器的地址。 第四步:本地服務(wù)器再向上一步返回的域名服務(wù)器發(fā)送請(qǐng)求,然后接受請(qǐng)求的服務(wù)器查詢自己的緩存,如果沒有該紀(jì)錄,則返回相關(guān)的下級(jí)的域名服務(wù)器的地址。 第五步:重復(fù)第四步,直到找到正確的紀(jì)錄。 第六步:本地域名服務(wù)器把返回的結(jié)果保存到緩存,以備下一次使用,同時(shí)還將結(jié)果返回給客戶機(jī)。 DNS服務(wù)器通過分級(jí)查詢逐級(jí)獲取到對(duì)應(yīng)域名的 IP 地址,大致過程如下:
- 從"根域名服務(wù)器"查到"頂級(jí)域名服務(wù)器"的NS記錄和A記錄;
- 從"頂級(jí)域名服務(wù)器"查到"次級(jí)域名服務(wù)器"的NS記錄和A記錄;
- 從"次級(jí)域名服務(wù)器"查出"主機(jī)名"的IP地址。
這里提到了一些概念,例如 NS A 記錄,這些是 DNS 的記錄類型,常見的記錄類型有:
- A 地址記錄(Address),返回域名指向的IP地址。
- NS 域名服務(wù)器記錄(Name Server),返回保存下一級(jí)域名信息的服務(wù)器地址。該記錄只能設(shè)置為域名,不能設(shè)置為IP地址。
- MX 郵件記錄(Mail eXchange),返回接收電子郵件的服務(wù)器地址。
- CNAME 規(guī)范名稱記錄(Canonical Name),返回另一個(gè)域名,即當(dāng)前查詢的域名是另一個(gè)域名的跳轉(zhuǎn)。
- PTR 逆向查詢記錄(Pointer Record),只用于從IP地址查詢域名
- CAA CAA(Certification Authority Authorization,證書頒發(fā)機(jī)構(gòu)授權(quán))是一項(xiàng)防止HTTPS證書錯(cuò)誤頒發(fā)的安全措施,遵從IETF RFC6844。從2017年9月8日起,要求CA(Certification Authority,證書頒發(fā))機(jī)構(gòu)執(zhí)行CAA強(qiáng)制性檢查。
通常來說,為了服務(wù)的安全可靠,至少應(yīng)該有兩條NS 記錄,而A記錄和MX記錄也可以有多條,這樣就提供了服務(wù)的冗余性,防止出現(xiàn)單點(diǎn)失敗。 DNS 并不安全 事實(shí)上,DNS 是一個(gè)很古老的協(xié)議,其設(shè)計(jì)并非完美,存在很多問題,比如劫持、不加密等問題。那么什么是 DNS 劫持呢? DNS劫持又稱域名劫持,是指通過某些手段取得某域名的解析控制權(quán),修改此域名的解析結(jié)果,導(dǎo)致對(duì)該域名的訪問由原IP地址轉(zhuǎn)入到修改后的指定IP,其結(jié)果就是對(duì)特定的網(wǎng)址不能訪問或訪問的是假網(wǎng)址。 如果可以冒充域名服務(wù)器,然后把查詢的IP地址設(shè)為攻擊者的IP地址,這樣的話,用戶上網(wǎng)就只能看到攻擊者的主頁,而不是用戶想要取得的網(wǎng)站的主頁了,這就是DNS劫持的基本原理。 DNS 劫持危害十分嚴(yán)重,輕則導(dǎo)致不能上網(wǎng),影響網(wǎng)速,重則導(dǎo)致被黑客誘導(dǎo)到惡意網(wǎng)站,導(dǎo)致個(gè)人財(cái)產(chǎn)和信息泄露或者發(fā)布惡意廣告。 因此,一般我們建議大家把 DNS 地址修改為公共的 DNS,如上面我們所說的 DNS 原理,公共的 DNS 由于使用人數(shù)多,其緩存數(shù)據(jù)更新也比一般的 DNS 要快,解析結(jié)果更準(zhǔn)確,此外,其帶來的一個(gè)好處就是避免被劫持。 目前也有其他的方案可以防止劫持,例如 DNSSEC ,域名系統(tǒng)安全擴(kuò)展,DNSSEC旨在保護(hù)應(yīng)用程序(以及服務(wù)這些應(yīng)用程序的緩存解析器)免受偽造或不當(dāng)操縱的DNS數(shù)據(jù)所造成的影響例如域名服務(wù)器緩存污染的數(shù)據(jù)。來自DNSSEC保護(hù)區(qū)的所有答案都經(jīng)過數(shù)字簽名。通過檢驗(yàn)數(shù)字簽名,DNS解析器可以核查信息是否與區(qū)域所有者發(fā)布的信息相同(未修改和完整),并確系實(shí)際負(fù)責(zé)的DNS服務(wù)器所提供。 或者可以自己搭建一個(gè) DNS 服務(wù)器。例如在本地搭建一個(gè) dnsmaq 小型的 DNS 服務(wù)器來防止劫持。 安裝dnsmaq 以 centos 7 為例,直接執(zhí)行如下命令:
?
yum?-y?install?dnsmasq
配置
1.配置文件在 /etc/dnsmasq.conf,我們要讓它能用起來需要做如下配置:
?
????#指定上游dns服務(wù)器
????resolv-file=/etc/resolv.dnsmasq.conf
????#表示嚴(yán)格按照?resolv-file?文件中的順序從上到下進(jìn)行?DNS?解析,?直到第一個(gè)成功解析成功為止
????strict-order
????#?開啟后會(huì)尋找本地的hosts文件在去尋找緩存的域名,最后到上游dns查找
????#no-resolv
????listen-address=0.0.0.0?#0.0.0.0?設(shè)置為公網(wǎng)IP
????conf-dir=/etc/dnsmasq.d?#?我們的解析記錄都寫到這個(gè)目錄下
2.創(chuàng)建 /etc/resolv.dnsmasq.conf ?,然后添加:
?
????#?cat?/etc/resolv.dnsmasq.conf
????nameserver?119.29.29.29
????nameserver?114.114.114.114
????nameserver?8.8.8.8
????nameserver?168.95.1.1
3.然后創(chuàng)建 /etc/dnsmasq.d/cloud.conf,添加:
?
????address=/baidu.com/127.0.0.1?#將百度的域名解析到127.0.0.1
???????address=/ad.youku.com/127.0.0.1?#?禁止優(yōu)酷廣告
????address=/ad.iqiyi.com/127.0.0.1??#?禁止iqiyi廣告
格式是:
?
address=/domain.com/dns
比如上面的百度,我就把它都解析到127.0.0.1。
?
實(shí)現(xiàn)DNS分流
?
?
????server=/cn/114.114.114.114?#?cn的域名都走114的dns
????server=/google.com/115.159.220.214?#?將谷歌的解析都走115.159.220.214
上面的是將所有cn結(jié)尾的域名都走114解析,下面是將google.com 走115.159.220.214解析。
開啟防火墻53端口后,本地測(cè)試下 53 端口是否是通的:
?
???????www?nc?-vuz?121.42.18.6?53
????found?0?associations
????found?1?connections:
?????????1:????flags=82<CONNECTED,PREFERRED>
????????outif?(null)
????????src?192.168.2.32?port?49939
????????dst?121.42.18.6?port?53
????????rank?info?not?available
????Connection?to?121.42.18.6?port?53?[udp/domain]?succeeded!
啟動(dòng)dnsmaq:
?
????service?dnsmasq?start
設(shè)置為開機(jī)自啟動(dòng)。
?
?#?systemctl?enable?dnsmasq
?Created?symlink?from?/etc/systemd/system/multi-user.target.wants/dnsmasq.service?to?/usr/lib/systemd/system/dnsmasq.service.
?
測(cè)試
?
?
???????www?dig?m.baidu.com?@121.42.18.6
????;?<<>>?DiG?9.8.3-P1?<<>>?m.baidu.com?@121.42.18.6
????;;?global?options:?+cmd
????;;?Got?answer:
????;;?->>HEADER<<-?opcode:?QUERY,?status:?NOERROR,?id:?41523
????;;?flags:?qr?aa?rd?ra;?QUERY:?1,?ANSWER:?1,?AUTHORITY:?0,?ADDITIONAL:?0
????;;?QUESTION?SECTION:
????;m.baidu.com.????????????IN??A
????;;?ANSWER?SECTION:
????m.baidu.com.????????0???IN??A???127.0.0.1
????;;?Query?time:?30?msec
????;;?SERVER:?121.42.18.6#53(121.42.18.6)
????;;?WHEN:?Mon?Aug?28?10:32:27?2017
????;;?MSG?SIZE??rcvd:?45
可以看到,百度的子域名已經(jīng)被解析到127.0.0.1了,此外還可以配合dnscrypt-proxy 對(duì)查詢進(jìn)行加密,這里就不展開了。
【End】
Python入門到進(jìn)階思維導(dǎo)圖分享
https://edu.csdn.net/topic/python115?utm_source=csdn_bw
?熱 文?推 薦?
?
點(diǎn)擊閱讀原文參與開發(fā)者大調(diào)查,好禮送不停!
總結(jié)
以上是生活随笔為你收集整理的如何使用 DNSMAQ 搭建 DNS 服务器?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [NOI2018] 归程(线段树维护并查
- 下一篇: Zju2112 Dynamic Rank