DNS與服務(wù)器搭建-Linux每日一練(10)
今天的文章有點長,因為DNS三兩句話說不完,容我慢慢道來。
DNS(Domain Name System)域名系統(tǒng),也就是把某個網(wǎng)址解析成 ip 的服務(wù),對于私有云的方案,有可能會自建 DNS 服務(wù)器,這樣可以讓所有的配置文件都以域名的形式存在,自動化部署的時候就不需要因為 ip 不同而改動太多的環(huán)境變量,是不是很方便?
當然了,這種方式如果你在替換了別人的首選DNS服務(wù)器,把一些網(wǎng)站流量轉(zhuǎn)發(fā)過來,自己做一個假網(wǎng)站來騙別人的密碼什么的,是不是很爽?
PS: 本節(jié)內(nèi)容如有名詞聽不懂可以拉到最后看名詞解釋
DNS 基本概念
本節(jié)概念,如果已知可以直接跳到 搭建 DNS 服務(wù)器
其實不管是開發(fā)還是運維,多少都接觸過DNS,一個域名長這樣,一個點一個域,最多四個域,用域名也就是一個字符串來標記一個網(wǎng)址的方式,是為了讓人更好記,計算機才不在乎是ip還是用域名呢!

頂級域又可以分為三類:
通用頂級域(.com 商業(yè)機構(gòu),.org 非營利性組織,.net 網(wǎng)絡(luò)服務(wù)機構(gòu)等) 國家頂級域(.cn 中國,.uk 英國,.us 美國,.jp 日本) 反向域(基礎(chǔ)建設(shè)頂級域,.arpa)
我們?nèi)绻约鹤砸粋€域名,完全不用在乎用哪個頂級域名,只是一個潛規(guī)則,給別人知道大概你的網(wǎng)站可能有什么用,我們通常在ICP那里申請的域名是二級域名,申請下來以后就可以隨意自己加三級、四級域名,因為很多人頂級域名是一樣的,申請的是二級域名,然后所有的三級四級域名你都可以自己加,都屬于你,按這種邏輯來看域名系統(tǒng)就像一顆樹

我們?nèi)魏稳硕伎梢陨暾堄蛎灰◣资畨K錢就可以用他來搭網(wǎng)站,比如我在騰訊云上申請的域名 coding3min.com 就是 60 塊一年的。
域名解析的過程
域名解析有多種類型,www、@、*、mail、二級域名、手機網(wǎng)站對應(yīng)不同的用法。

可以在騰訊云上看到提示,通常www為前綴的是主域名,但是輸入麻煩,我把他重定向到了coding3min.com上,也就是@方式,各個的作用看上圖。
記錄類型又分為下面這幾種

常用的是A類型,直接指向一個服務(wù)器的 ip,CNAME類型是指向另一個域名,比如我們用github給我們提供的表態(tài)網(wǎng)站服務(wù)就可以搭建起來一個免費的博客會提供一個域名用來中轉(zhuǎn),我們也可以借助自己的域名來解析到MX類型,搭建自己后綴的郵件服務(wù)器。
下面是一個詳細的域名解析過程,劃重點!這里考試要考

如上圖,
在瀏覽器中輸入 www.baidu.com域名,操作系統(tǒng)會先檢查自己本地的hosts文件是否有這個網(wǎng)址映射關(guān)系,如果有,就先調(diào)用這個 IP 地址映射,完成域名解析。如果 hosts里沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網(wǎng)址映射關(guān)系,如果有,直接返回,完成域名解析。如果 hosts與本地DNS解析器緩存都沒有相應(yīng)的網(wǎng)址映射關(guān)系,首先會找TCP/IP參數(shù)中設(shè)置的首選DNS服務(wù)器,在此我們叫它本地 DNS 服務(wù)器,此服務(wù)器收到查詢時,如果要查詢的域名,包含在本地配置區(qū)域資源中,則返回解析結(jié)果給客戶機,完成域名解析,此解析具有權(quán)威性。如果要查詢的域名,不由本地 DNS服務(wù)器區(qū)域解析,但該服務(wù)器已緩存了此網(wǎng)址映射關(guān)系,則調(diào)用這個IP地址映射,完成域名解析,此解析不具有權(quán)威性。如果本地 DNS服務(wù)器本地區(qū)域文件與緩存解析都失效,則根據(jù)本地 DNS 服務(wù)器的設(shè)置(是否設(shè)置轉(zhuǎn)發(fā)器)進行查詢,如果未用轉(zhuǎn)發(fā)模式,本地DNS就把請求發(fā)至 “根DNS服務(wù)器”,“根DNS服務(wù)器”收到請求后會判斷這個域名(.com)是誰來授權(quán)管理,并會返回一個負責該頂級域名服務(wù)器的一個 IP。本地DNS服務(wù)器收到IP信息后,將會聯(lián)系負責.com域的這臺服務(wù)器。這臺負責.com域的服務(wù)器收到請求后,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務(wù)器地址(baidu.com)給本地DNS服務(wù)器。當本地DNS服務(wù)器收到這個地址后,就會找baidu.com域服務(wù)器,重復(fù)上面的動作,進行查詢,直至找到www.baidu.com主機。如果用的是轉(zhuǎn)發(fā)模式,此 DNS服務(wù)器就會把請求轉(zhuǎn)發(fā)至上一級DNS服務(wù)器,由上一級服務(wù)器進行解析,上一級服務(wù)器如果不能解析,或找根 DNS 或把轉(zhuǎn)請求轉(zhuǎn)至上上級,以此循環(huán)。
不管是本地 DNS 服務(wù)器用還是轉(zhuǎn)發(fā),還是根提示,最后都是把結(jié)果返回給本地 DNS 服務(wù)器,由此 DNS 服務(wù)器再返回給客戶機。
DNS 查詢方式包含遞歸和迭代,解析方式包含正向解析和反向解析。我們知道了原理,實戰(zhàn)一下看看吧!
搭建本地 DNS 服務(wù)器
如果你用的是kubernetes來部署服務(wù),他的kube-dns組件會自動做好域名解析,讓服務(wù)和服務(wù)之間用特定的名稱規(guī)則自動完成服務(wù)發(fā)現(xiàn)。
DNS 只是一種協(xié)議,真正提供服務(wù)的是 bind 軟件,因此,現(xiàn)在來安裝它:
sudo?yum?install?bind-utils?bind?bind-chroot
安裝后有幾個目錄或文件是需要記得的:
/etc/named.conf: 主配置文件/etc/sysconfig/named: 配置是否啟動 chroot 及額外的參數(shù)/var/named: 數(shù)據(jù)庫文件存放目錄,存放主機名對應(yīng) ip 的文件/var/run/named: named 程序執(zhí)行時 pid-file 文件存放目錄(在 ubuntu 系統(tǒng)中,目錄為/run/named)
知道了這幾個重要配置文件和目錄后,下面開始配置,我們把baidu.com的流量劫持了試試看
修改配置文件前一個重要習慣是先復(fù)制一份,這樣改錯了方便恢復(fù)。
改主配置文件 named.conf,找到相應(yīng)的配置位置,改成我這個
listen-on?port?53?{?any;?};
listen-on-v6?port?53?{?any;?};
allow-query?????{?any;?};
recursion?yes;
意思是開放 53 號端口對于任意地址的監(jiān)聽,允許所有主機對我們進行訪問,拒絕遞歸查詢方式,使用迭代查詢方式,增加資源利用率。
拉到底部可以看到 include 了這個配置文件,你可以在里面對正解(反解)區(qū)域進行定義。
include?"/etc/named.rfc1912.zones";
在/etc/named.rfc1912.zones底部添加如下內(nèi)容。
zone?"baidu.com"?IN?{???????????//一級域名為.com、二級域名為.baidu
?????????type?master;???????????????//類型為主DNS服務(wù)器
?????????file?"named.baidu.com";????//指向正解文件為/var/named/named.baidu.com
};
修改/var/named/named.baidu.com文件如下,其中127.0.0.1這個 ip 你可以改成你想要的。
$TTL?600?;定義下列所有記錄緩存在客戶端的時間
@???????IN?SOA?dns.yu.com.?root.localhost?(
?????????????????????????????????????????0???????;?serial???????#序列號,用于主從dns中判斷是否為最新版本
?????????????????????????????????????????1H??????;?refresh??????#一小時更新一次
?????????????????????????????????????????15M?????;?retry????????#若連接不上,等待15分鐘后重新嘗試連接
?????????????????????????????????????????1W??????;?expire???????#超過一周仍無法下載便放棄下載
?????????????????????????????????????????3D?)????;?minimum??????#客戶端找服務(wù)端做dns解析時,否定答案的緩存時間為3天
@???????IN??????NS??????dns.baidu.com.???????????;?NS記錄表明了dns服務(wù)器的SDQN為dns.baidu.com.
dns.baidu.com.?????IN??????A???????127.0.0.1?????;?下面三條A記錄表明了域內(nèi)主機的IP地址
www.baidu.com.?????IN??????A???????127.0.0.1
ftp?????????????IN??????A???????127.0.0.1
重啟服務(wù),檢查 SELinux 并開啟防火墻的 dns 服務(wù)
systemctl?restart?named??#重啟服務(wù)
setenforce?0???#關(guān)閉SELinux
firewall-cmd?--add-service=dns?#開啟防火墻的dns服務(wù)
修改 DNS 服務(wù)器指向
在linux中,DNS服務(wù)器指向的配置有固定的文件,如下文件就有一個主服務(wù)器,一個備服務(wù)器,等搭建好DNS服務(wù)器后就是改這個文件。
$?cat?/etc/resolv.conf
nameserver?192.168.3.1
nameserver?114.114.114.114
測試
ping?www.baidu.com
PING?www.baidu.com?(127.0.0.1)?56(84)?bytes?of?data.
64?bytes?from?VM-0-11-centos?(127.0.0.1):?icmp_seq=1?ttl=64?time=0.006?ms
64?bytes?from?VM-0-11-centos?(127.0.0.1):?icmp_seq=2?ttl=64?time=0.021?ms
^C
---?www.baidu.com?ping?statistics?---
2?packets?transmitted,?2?received,?0%?packet?loss,?time?999ms
rtt?min/avg/max/mdev?=?0.006/0.013/0.021/0.008?ms
也可以用nslookup來查看域名的解析,如果改完了新的DNS服務(wù)器的位置就可以用這個命令來查詢。
$?nslookup?coding3min.com
Server:??192.168.3.1
Address:?192.168.3.1#53
Non-authoritative?answer:
coding3min.com?canonical?name?=?coding3min.com.cdn.dnsv1.com.
coding3min.com.cdn.dnsv1.com?canonical?name?=?6yucorit.dispatch.spcdntip.com.
Name:?6yucorit.dispatch.spcdntip.com
Address:?112.67.251.116
Name:?6yucorit.dispatch.spcdntip.com
Address:?113.105.165.183
Name:?6yucorit.dispatch.spcdntip.com
Address:?113.96.98.77
Name:?6yucorit.dispatch.spcdntip.com
Address:?125.78.252.121
Server后的就是DNS服務(wù)器的地址因為我用了 CDN,所以DNS解析出了多個地址,下面的Address比如112.67.251.116就是解析出來的真實ip
DNS協(xié)議運行在UDP協(xié)議之上,因此使用的53號端口,當沒有辦法查詢到完整的信息時,就會再次以 TCP 協(xié)議來查詢,因此,防火墻需要放行TCP、UDP的 53 號端口,端口號可以在/etc/services文件查看到:
cat?/etc/services??|?grep?domain
domain??????????53/tcp??????????????????????????#?name-domain?server
domain??????????53/udp
domaintime??????9909/tcp????????????????#?domaintime
domaintime??????9909/udp????????????????#?domaintime
名詞解釋
DNS 服務(wù)器:運行 DNS 服務(wù)器程序的計算機,存儲 DNS 數(shù)據(jù)庫信息。
DNS 緩存:DNS 服務(wù)器在解析客戶機的域名請求時,如果本地沒有該域名的記錄,則會詢問其它 DNS 服務(wù)器,當其它域名將解析結(jié)果返回給 DNS 服務(wù)器時,DNS 將對應(yīng)的記錄保存在本地,生成 DNS 緩存,當下一次客戶機再次請求時,DNS 服務(wù)器則可以直接使用緩存中的 DNS 記錄。
DNS 查詢方式:遞歸查詢和迭代查詢
遞歸查詢:當客戶機向 DNS 服務(wù)器發(fā)起域名解析請求時,DNS 服務(wù)器首先查看自己本機的 DNS 記錄,如果沒有則會向其它 DNS 服務(wù)器發(fā)起解析請求。迭代查詢:當客戶機向 DNS 服務(wù)器發(fā)起域名解析請求時,DNS 服務(wù)器不會給客戶機解析地址,而是告訴客戶機另外一臺 DNS 服務(wù)器,客戶機再向這臺服務(wù)器發(fā)起地址解析請求。
正向解析和反向解析正向解析:指域名解析到 IP 地址的解析過程。反向解析:指 IP 地址解析到域名的解析過程。
課后問題
這里我只是做了A記錄的正解到www前綴的域名,你還可以自己實現(xiàn)任意一個其他的嗎?比如A記錄的@解析,試試看吧!
引用
????https://www.cnblogs.com/Dy1an/p/11157152.html
????https://blog.csdn.net/weixin_41843699/article/details/90350077
????https://www.cnblogs.com/qingdaofu/p/7399670.html
????https://blog.csdn.net/crisdiano/article/details/104071227
????https://blog.csdn.net/Linjingke32/article/details/80993870
新的一年到了,這是一張3天免費體驗卡,一人只能使用一次,歡迎加入體驗,長按二維碼識別加入,可下載【知識星球】app方便收到更新通知

