????????DNS(domain name system)是用戶上網(wǎng)的基礎(chǔ)服務(wù),由于IP地址純數(shù)字的特點(diǎn)膊存,使得人們很難記住一個(gè)網(wǎng)站真實(shí)的IP地址导而,就如同人們很難記得某某的手機(jī)號碼是多少。那如何解決這個(gè)問題呢隔崎?直觀的辦法就是創(chuàng)建一個(gè)“聯(lián)系人”的功能今艺,將“人名”字段與“電話號碼”字段進(jìn)行關(guān)聯(lián),例如小明-13534567890爵卒;小紅-13534567891虚缎,這樣歉眷,人們在撥打電話的時(shí)候翻翩,只需要記得人名,無需記得每個(gè)人的電話號碼荞雏,與此類似轴合,DNS應(yīng)運(yùn)而生创坞。類似上述例子,域名解析要做的就是將難記的IP地址如42.245.252.152受葛,打一個(gè)備注:www.reibang.com题涨,這時(shí)候,簡書的拼音是遠(yuǎn)遠(yuǎn)比一長串?dāng)?shù)字更方便記憶总滩。
????????如果各位對于dns的基本概念存在疑問纲堵,建議花一段時(shí)間先學(xué)習(xí)一下維基百科dns的知識。筆者一直強(qiáng)調(diào)基礎(chǔ)知識的重要性闰渔。
????????domain name system用做域名解析的實(shí)質(zhì)是存了一張域名對應(yīng)IP地址的關(guān)系表席函,網(wǎng)絡(luò)中客戶端進(jìn)行查詢時(shí)就會來查這一張表,并在表中得到需要的IP地址信息澜建。如何搭建和維護(hù)這一張表向挖,就是筆者要做的內(nèi)容。
????????bind是目前主流的dns開源軟件炕舵,這節(jié)筆者嘗試使用bind搭建一臺主dns服務(wù)器。
希望達(dá)成的效果:
1. ? ? 新建網(wǎng)絡(luò)區(qū)域內(nèi)域名解析系統(tǒng)跟畅,做到如下表所示的域名—IP對應(yīng)關(guān)系咽筋。
????????域名????????????????????????????????服務(wù)器IP
????????a.hbai.com????????????????????192.168.0.1
????????b.hbai.com????????????????????192.168.0.2
????????c.hbai.com ? ? ? ? ? ? ? ? ? ?192.168.0.3
????????d.hbai.com????????????????????192.168.0.4
2. ? ? 除上述內(nèi)網(wǎng)域名外,其余域名查詢轉(zhuǎn)發(fā)至園區(qū)網(wǎng)外dns進(jìn)行解析徊件,并返回實(shí)際IP地址奸攻。如查詢www.baidu.com返回百度服務(wù)器IP蒜危。
????????好,目標(biāo)明確之后睹耐,筆者來登陸第一節(jié)搭建的linux服務(wù)器辐赞。
????????首先,筆者保存一下上一章做的測試網(wǎng)頁硝训,并且關(guān)閉apache服務(wù):
????????/bin/systemctl stop httpd.service
? ? ? ? yum安裝bind:yum install bind
????????接下來筆者來進(jìn)行基礎(chǔ)配置:vi /etc/named.conf
????????注意其中幾個(gè)重要字段:
????????listen-on port 53 { 127.0.0.1; };?????? 本地監(jiān)聽端口响委;
????????listen-on-v6 port 53 { ::1; };????????? IPv6監(jiān)聽端口,由于筆者暫時(shí)沒有打算使用IPv6窖梁,所以把它用//注釋掉赘风;
????????directory?????? "/var/named";???? 指明了域文件所在的目錄(就是筆者需要維護(hù)對應(yīng)關(guān)系表所在目錄)最好不要修改;
????????allow-query { localhost; };?????????? 允許那些主機(jī)來查詢纵刘,默認(rèn)是localhost邀窃,由于筆者園區(qū)網(wǎng)絡(luò)與公網(wǎng)有防火墻,這臺dns就可以對園區(qū)或者專網(wǎng)提供服務(wù)假哎,所以把“l(fā)ocalhost”改為“any”瞬捕;
????????recursion yes;??????????????????? 是否允許遞歸,如果服務(wù)器設(shè)為主dns倒是可以關(guān)閉遞歸查詢舵抹,目前筆者搭建的這臺需要提供dns查詢山析,所以開啟;
????????logging {??????????????????????? logging字段掏父,定義日志所在位置笋轨,之后筆者對dns服務(wù)器進(jìn)行監(jiān)控會用到,不做修改赊淑。
????????zone "." IN {?????????????????? ??定義了root zone的服務(wù)類型為hint爵政,記錄文件在/var/named/named.ca中;
????????include "/etc/named.rfc1912.zones";?? 定義區(qū)文件位置陶缺,筆者要新增的域*.local屬于一個(gè)zone钾挟,即需要在該文件中增加。
對如上內(nèi)容作修改為:
????????其中新增了一個(gè)forwarders字段饱岸,表示如果服務(wù)器無法解析該域名時(shí)將請求交與括號內(nèi)dns服務(wù)器解析掺出。就是因?yàn)檫@個(gè)字段,筆者可以對本地?zé)o法解析的域名(即除*.hbai.com)的域名都轉(zhuǎn)到公用dns上解析苫费。各位在買運(yùn)營商帶寬時(shí)汤锨,運(yùn)營商會提供IP地址與dns服務(wù)器,這時(shí)可以直接加在forwarders字段百框。
保存退出wq!
啟動dns服務(wù):/bin/systemctl start named.service
查看一下服務(wù)狀態(tài):/bin/systemctl status named.service
????????筆者注意到第三行一個(gè)字段Loaded: loaded (/usr/lib/systemd/system/named.service;disabled
????????這個(gè)表示該服務(wù)不隨開機(jī)啟動闲礼,由于dns這類基礎(chǔ)業(yè)務(wù)類最好在服務(wù)器發(fā)生宕機(jī)之后可以自動恢復(fù),保障業(yè)務(wù)連續(xù),因此將其設(shè)置為開機(jī)啟動柬泽。
????????設(shè)置dns服務(wù)為開機(jī)啟動:bin/systemctl enable named.service
????????繼續(xù)查看一下狀態(tài):/bin/systemctl status named.service
????????完成~
????????筆者來測試一下服務(wù)是否正常:
????????老樣子慎菲,關(guān)掉防火墻:systemctl stop firewalld.service
????????與上一章相同的網(wǎng)絡(luò)環(huán)境,筆者發(fā)現(xiàn)telnet 192.168.101.2 53端口不通锨并?露该。。
????????telnet 192.168.101.2 22端口進(jìn)行一下測試第煮,發(fā)現(xiàn)可以訪問解幼。說明問題還是出在53端口上
????????筆者看了一下配置似乎沒什么大問題,沒辦法空盼,進(jìn)行故障排查吧书幕。
????????本地測試一下,在dns服務(wù)器上去測試一下端口是不是可以正常訪問
????????未找到該命令揽趾。為了測試台汇,插播一條消息,筆者在服務(wù)器上繼續(xù)安裝telnet:
????????看一下目前telnet的情況:yum list installed | grep telnet
????????查看一下可以安裝telnet的安裝包:yum list | grep telnet
????????直接安裝telnet.x86_64:
????????yum install telnet.x86_64
????????yum install telnet-server.x86_64
????????再查看一下telnet安裝狀態(tài): yum list installed | grep telnet
????????裝好之后繼續(xù)在服務(wù)器上進(jìn)行telnet測試篱瞎,發(fā)現(xiàn)還是提示被拒絕(Connection refused)苟呐。
????????繼續(xù)telnet localhost 53,發(fā)現(xiàn)連接上了:connected to localhost
????????說明筆者192.168.101.2這個(gè)IP在黑名單里啊俐筋,沒有服務(wù)提供牵素。繼續(xù)檢查配置,發(fā)現(xiàn)在/etc/named.conf中確實(shí)有如下一行沒有注意澄者。
????????這一段剛開始修改時(shí)筆者只注意在port 53 的監(jiān)聽上笆呆,其實(shí)后面括號內(nèi)定義了53端口只能由127.0.0.1進(jìn)行訪問。發(fā)現(xiàn)故障原因后粱挡,筆者直接將其注釋掉赠幕。
????????重啟服務(wù):/bin/systemctl restart named.service
????????繼續(xù)回到筆者測試電腦上telnet 192.168.101.2,發(fā)現(xiàn)端口可通询筏。小插曲解決榕堰。
????????下面筆者來配置*.local的域:vi /etc/named.rfc1912.zones
????????原有兩個(gè)zone,在此基礎(chǔ)上筆者新建一個(gè)名為hbai.com的zone嫌套。并將其type設(shè)為master逆屡。
????????zone "hbai.com" IN {
???????????????type master;
???????????????file "db.hbai";
????????};
????????保存退出wq!
????????好了,下一步就是創(chuàng)建域名對應(yīng)IP地址的關(guān)系表:cd /var/named
? ? ? ? ls看一下文件:
????????筆者新建一個(gè)剛剛在zone聲明的文件db.hbai: vi db.hbai
????????首先定義dns生存時(shí)間ttl踱讨,定在1h吧魏蔗,換算成秒:$TTL 3660
????????第二行筆者做一個(gè)start of authority標(biāo)記,定義一個(gè)授權(quán)區(qū)的開始:
????????hbai.com.?????? IN?????SOA???? mian.hbai.com.????master.hbai.com.
????????用()定義一段跨行數(shù)據(jù)勇蝙,并對每個(gè)數(shù)據(jù)打一個(gè)說明標(biāo)簽:
????????2018011001????? ;??????serial
????????定義serial沫勿,每當(dāng)重啟dns服務(wù)時(shí)dns會檢測new-serial挨约,當(dāng)new-serial大于old-serial時(shí)主dns會向從dns同步zone味混。這里筆者沒有搭建從dns产雹,意義不大。
????????14400?????????? ;?????? refresh (4 hours)
????????定義refresh翁锡,從dns每過多長時(shí)間向主dns進(jìn)行serial核對蔓挖。意義也不大。
????????7200??????????? ;?????? retry??(2 hours)
????????定義retry馆衔,當(dāng)從dns向主dns獲取serial無響應(yīng)時(shí)多長時(shí)間重新發(fā)起瘟判。目前意義不大。
????????604800????????? ;?????? expire?(1 week)
????????定義expire角溃,當(dāng)無主dns響應(yīng)時(shí)從dns提供權(quán)威解析時(shí)間拷获。
????????86400?????????? ;?????? minimum (1 day)
????????定義negative caching,不做詳細(xì)解釋减细,有興趣查一下RFC 2308文檔定義匆瓜。
????????另起一行? $ORIGIN hbai.com.
????????定義從改行一下所有域名以hbai.com結(jié)尾。
????????添加NS記錄未蝌,將以hbai.com的域名解析權(quán)交與名為main.hbai.com的dns
????????添加最開始表格的域名-IP對應(yīng)關(guān)系驮吱。
????????wq!保存退出。
????????筆者來看一下整體的文件:cat db.hbai
????????重啟dns服務(wù):/bin/systemctl restart named.service
????????開啟防火墻:systemctl start firewalld.service
????????永久添加tcp 53端口:firewall-cmd --zone=public --add-port=53/tcp --permanent
????????永久添加udp53端口:firewall-cmd --zone=public --add-port=53/udp --permanent
????????重啟防火墻:firewall-cmd --reload
????????筆者最后在電腦上進(jìn)行dns服務(wù)測試:開始--搜索—cmd
????????輸入nslookup
????????看到目前電腦的dns萧吠,筆者繼續(xù)隱去左冬。。
????????設(shè)置服務(wù)器為192.168.101.2:server 192.168.101.2
????????看到這時(shí)候“默認(rèn)服務(wù)器”和“Address”字段都變?yōu)榱?92.168.101.2的IP地址纸型。
????????直接輸入a.hbai.com拇砰;d.hbai.com;www.baidu.com進(jìn)行測試狰腌。
????????筆者看到除破,對于筆者自己維護(hù)的域名(*.hbai.com)的域名,筆者的dns server給出了權(quán)威解析癌别,而對于不在筆者管控的其他域名皂岔,通過遞歸查詢返回了非權(quán)威的dns應(yīng)答。
????????到此為止dns服務(wù)器的搭順利完成~
????????由于公網(wǎng)IP沒法貼出來展姐,上圖一堆馬賽克沒法展示效果躁垛,筆者第二章設(shè)置了服務(wù)器接入專網(wǎng),并配置了IP地址10.150.101.249圾笨。筆者可以同樣在專網(wǎng)內(nèi)做一個(gè)測試:
????????這樣結(jié)果就很清楚了教馆。
????????DNS Server的搭建可以使得筆者正常訪問園區(qū)內(nèi)外的網(wǎng)絡(luò)資源(如百度),也可以標(biāo)注數(shù)據(jù)中心內(nèi)或者專網(wǎng)內(nèi)的服務(wù)器信息(如a.hbai.com 192.168.0.1)擂达,提供網(wǎng)絡(luò)服務(wù)的基本保障土铺。
問題:
1. ? ? 類比電話簿,如果一個(gè)網(wǎng)站服務(wù)器出現(xiàn)故障,需要更換服務(wù)器IP地址悲敷,這件事情對dns有什么影響究恤,對用戶訪問有什么影響?
2. ? ? 故障排查(trouble shooting)是一個(gè)復(fù)雜的東西后德,第三章和第四章都嘗試進(jìn)行了簡單的故障排查部宿,簡單闡述筆者在遇到問題時(shí)故障排除的思路。
3. ? ? 第三章筆者搭建了一個(gè)測試網(wǎng)站瓢湃,在此基礎(chǔ)上嘗試將網(wǎng)站遷移至另一臺服務(wù)器如192.168.101.3并將域名test.hbai.com指向192.168.101.3做到如下頁面的訪問理张。
4. ? ? 筆者其實(shí)已經(jīng)按照master-slave的部署方式修改了named.conf、named.rfc1912.zones绵患、db.hbai的文件雾叭,我們可以將如此配置直接copy至另一臺用做slave dns的服務(wù)器來完成主從搭建,嘗試說明對于master dns和slave dns分別要對上述三個(gè)文件的哪些字段修改落蝙?