DNS服務機——主機名控制者
由於人們對文字的記憶比數字高,純粹使用TCP/IP這些數字是很難記憶的 爲了適應人們的習慣 DNS服務幫我們將主機名解析成ip 這樣只要記住主機名就可以上網(使用internet了)
一 什麼是DNS(Domain Name System,DNS)
主機名自動解析爲ip
最早期 利用/etc/hosts文件將主機名和IP做一個對應 如此我們就可以通過主機名獲主機的ip了 但該文件的缺陷是主機名與ip的對應無法在所有計算機內更新
分佈式,階層式主機名管理架構 :DNS架構
DNS是一種因特網的通信協議名稱,bind是提供DNS服務的軟件,軟件提供的程序名爲named
FQDN(fully qualified domain name)完整主機名 如www.westos.org
Domain 區域(即在某個地區)
www.nage.com 是主機名 nage.com .com 這是域名 域是一個範圍
DNS是分階層的,例如註定層的.tw 接着.edu.tw .ksu.edu.tw www.ksu.edu.tw 分別代表不同的主機
通過DNS查詢主機名ip的流程
DNS是以類是樹形結構的形態來進行主機名的管理的 所以每一臺DNS服務器都僅管理自己的下一層主機名的轉譯而以,至於下層的下層,就交給下層的dns主機來管理 管理如下:
1 收到用戶的查詢要求 先查看自己本身有沒有記錄,若無則向.(root)查詢
2 向最頂層的.(root)查詢 用戶向.(root)詢問www.ksu.edu.tw在哪裏但是由於.(root)只記錄了.tw的信息,此時.(root)會告知:我不知道者臺主機的ip 不過你可以向.tw去詢問,我給你說.tw的ip
3 向第二層的.tw服務器查詢 用戶又到.tw那裏查詢www.ksu.edu.tw的信息 可是.tw說我不知道 我給你說.edu.tw的ip 你去問他
4向第三層.edu.tw服務器查詢 客戶又到.edu.tw那裏查詢 .edu.tw告訴他人你去.ksu.edu.tw那裏查詢 我給你他的ip
5 向第四層.ksu.edu.tw服務器查詢 客戶端找到.ksu.edu.tw這臺服務器,.ksu.edu.tw這臺服務器說沒錯www.ksu.edu.tw這臺主機名使我管理的我給你說他的ip是什麼 這是就找到了www.ksu.edu.tw這臺主機的Ip了
6記錄緩存並回報用戶 查到正確的ip之後 到再次有人要查詢www.ksu.edu.tw的時候 就不用再跑一次這樣的流程了 因爲這臺只記得dns會記錄一份查詢的結果在自己的緩存當中 以方便響應下一次的相同要求 當然那個cache當中的數據是有時間性的 當過了nds設置記憶的時間 通常是24小時 該記錄就會被釋放
這個分層查詢的過程就是這樣 這樣分層查詢的好處是:1 主機名修改僅需通知自己的dns即可 不需通知其他人 2 DNS服務器對主機名解析結果的緩存時間
遞歸: A 《 =》 B 《 = 》C A去找B B再去找A 稱爲遞歸
迭代:A 《=》B###B把消息給A說了之後 A再去找C 這種稱爲迭代
A 《=》 C
迭代:請求者要發出多次請求才會得到答案 cdn就是迭代的方法
3 可持續向下授權(子域名授權)
例題 通過dig 實現.tw-.edu.tw-.ksu.edu.tw-www.ksu.edu.tw查詢 並分析每個查詢階段的DNS服務器有幾臺
解答 dig +trace www.ksu.edu.tw ##trace跟蹤 追蹤的意思
NDS使用的port number UDP TCP 53這兩個port 通常DNS是以UDP這個較快速的數據傳輸協議來查詢的 但是如果查詢不到時 就會再次以TCP這個協議來查詢。所以DNS的daemon會同時啓動UDP TCP這兩個協議的53端口 記得防火牆也要同時放行UDP TCP53這兩個端口
DNS數據庫的記錄 正解 反解 zone的意義
正解:從主機名查詢到ip的流程
反解:從ip反解析到主機名的流程
不管是正解還是反解 每個與的記錄就是一個區域(zone)
誰可以申請正解的DNS服務器架設呢 答案是都可以 只要該域沒人使用 那誰先強到誰就可以使用 正解域通常需要以下幾種標誌:
正解的設置權以及DNS正解Zone記錄的標誌
SOA 就是開始驗證(start of authority)的縮寫
NS 就是名稱服務器(name server)的縮寫 記錄DNS服務器
A 就是地址(address)的縮寫 記錄ip
反解的設置權以及DNS反解zone記錄的標誌
PTR就是指向(PoinTeR)的縮寫 後面記錄的數據就是反解到主機名
一個正解或一個反解就稱爲一個zone
Master /Slave架構
一般一臺Master 兩臺Slave
不論是Master還是Slave服務器 都必須同時提供DNS服務纔好 因爲在DNS系統當中 域名的查詢是“先進先出”的狀態 每一臺DNS的數據庫內容需要完全一致 否則就會趙成客戶端找到的ip是錯誤的
Master/Slave數據的同步化過程 無論是Master/slave數據庫都會有一個代表數據庫新舊的“序號” 這個序號值的大小會影響是否進行更新操作 更新的方式有兩種:
1 Master主動告知 例如master自動修改了數據庫,數據庫序號變大,重新啓動DNS服務後 master會主動告知slave來更新數據庫 這樣就能夠實現數據庫的同步
2 slave 主動提出要求 slave 會定時向master查看數據庫序號大小 當發現master數據庫序號比自己大時 slave就會主動更新自己的數據庫
Client端的設置
/etc/resolv.conf 這個就是ISP的DNS服務器IP記錄處
/etc/nsswitch.conf 這個文件則是用來決定先要使用/etc/hosts還是 /etc/resolv.conf的設置
DNS的ip可以設置多個 因爲當第一臺DNS宕機時 我們客戶端可以使用第二臺來查詢 不過在網絡正常情況下 永遠都只有第一臺DNS被用來查詢 這有點像備份
例題 我的主機使用DHCP獲取ip 但當我修改過/etc/resolv.conf之後 隔不多久這個文件又變成原來的樣子 這是什麼原因 要這麼處理
解 因爲使用DHCP系統會主動使用DHCP服務器傳來的數據進行系統配置文件的修訂 因此你要告訴系統不要用DHCP傳來的數值修改服務器配置文件 在/etc/sysconfig/network-scripts/ifcfg-eth0等相關文件裏面加上一行 PEERDNS=no 然後重新啓動網絡即可
DNS的正反解查詢命令 host nslookup dig
dig www.westos.org 正解
dig -x www.westos.org 反解 反解時ip爲172.25.254.100 則會變成100.254.25.172.in-addr.arpa.這個模樣
查詢域管理者的相關信息whois whois是有jwhois這個軟件提供的 如果找不到whois時 就可以yum install -y jwhois
Whois這個命令可以查詢到當初註冊某個domain的用戶的相關信息
DNS服務器的軟件 種類與caching only DNS服務器設置
搭建dns所需要的軟件 rpm -qa | grep ‘^bind’
Bind-libs-9.7.0-.... 給bind和相關命令使用的函數庫
Bind-utils-9.7.0-...這個是客戶端查找主機名的相關命令
Bind-9.7.0-.....bind主程序所需軟件
Bind-chroot-9.7.0...將bind主程序關在家裏面
Bind-chroot chroot代表change to root(根目錄) centos6.x默認將BIND鎖在/var/named/chroot目錄中
/etc/named.conf主配置文件 這個文件可以規範zone file的完整文件名
單純的cache-onlyDNS服務器與forwarding功能
沒有自己公開的DNS數據庫的服務器爲cache-only(唯高速緩存)DNS server 即這個DNSserver 值有緩存搜索結果的功能 它本身沒有主機名與ip正反解的配置文件 完全是由對外的查詢來提供他的數據庫
DNS服務的詳細配置
1 DNS服務器的架設需要上層DNS的授權纔可以成爲合法的DNS服務器
##如果我們尚未向上層ISP註冊合法的域名 所以我們就沒有權力架設合法的DNS服務器了
2 配置文件位置 可參考/etc/sysconfig/named 目前BAID程序以運行chroot
3 named 主配置文件 /etc/named.conf
4 每個正反解區域都需要一個數據庫文件,而文件名則是在/etc/named.conf裏設置
5 當DNS查詢時 若本身沒有數據庫文件 則前往root(.) 或forwarders服務器查詢
6 named是否啓動成功 務必要查詢/var/log/messages內的信息
正解文件記錄的數據(Resource Record,RR )
A後接ip NS後接主機名
A查詢ip的記錄
NS 查詢管理區域名(zone)的服務器主機名
SOA 查詢管理域名的服務器管理信息
CNAME 設置謀主機名的別名(alias)
MX 查詢某域名的郵件服務器主機名
反解文件記錄的RR數據
dig -x www.westos.org
解析後的ip反過來寫 在結尾後加上.in-addr-arpa.的結尾字樣即可
PTR就是反解
DNS啓動與查看防火牆
/etc/init.d/named start
Chkconfig named on
Tail -n 30 /var/log/messages | grep named
日誌錯誤會有語法錯誤和邏輯錯誤兩種
測試與數據庫更新
通過client端的查詢功能 目的是檢測數據庫有無錯誤
協同工作的DNS:slave DNA及子域授權設定
Slave DNS的特點(備用DNS 一般服務端最少要有兩臺DNS才行)
1 爲了不間斷的提供DNS服務 你的領域至少要有兩臺DNS作爲查詢的功能
2 這幾臺DNS服務器應該要分散在兩個以上的不同ip網段纔好
3 爲管理方便 通常除了一臺做masterDNS 其他都用來做slaveDNS的模式
4 slave DNS本身沒有數據庫 他的數據庫是由masterDNS所提供
5 master/slave DNS要有可以相互傳輸的zone file信息才行 這部分需要在/etc/named.conf的設置中加以輔助
Master DNS權限的開放
1 修訂named.conf 主要修改zone參數內的allow-transfer項目
Vim /etc/named.conf
Allow-transfer{172.25.254.90} ##在這裏添加slave的ip
2 在zone file 裏面添加NS標誌 要注意需要有A(正解)及PTR(反解)的設置
Vim /etc/named/named.westos.org ##以master主機名自己創建的文件
Vim /etc/named/named.ip
在你的zone file文件中添加NS標誌 IN NS
再重啓即可 /etc/init.d/named restart
Slave DNS的設置及數據庫權限問題
由於slave DNS也是DNS服務器 所以也要安裝bind bind-chroot等軟件 接下來設置named.conf 由於master/slave的數據庫是一樣的 理論上named.conf就是大同小異的了 唯一的區別是zone type 類型的差異 以及聲明master在那裏就可以了 由於zone file 是從master取得的 通過named這個程序來主動建立起需要的zone file 以此這個zone file放置的目錄權限就很重要了
配置子域DNS服務器:子域授權課題
除了master/slave 需要協調DNS服務器共同提供服務外 DNS如果有上層 下層關係時該如何設置?做法如下:
1 上層DNS服務器:只需要添加zone file 的NS與A即可
Vim /etc/named/named.westos.org
/etc/init.d/named restart
及上層DNS服務器只要在westos.org那個zone file內 增加指定NS並指向下層DNS的主機名和IP(A)即可 而zone file的序號也要添加才行
2 下層DNS服務器:需要有完整的zone相關設置
修改named.conf 增加zone的參數 假設文件名爲named.niki.westos.org
Vim /etc/named.conf
/etc.init.d/named restart
即下層DNS服務器 申請的域名必須是上層DNS提供的名稱 並告知上層DNS管理員 我們這個zone 所需指定的DNS主機名與對應的ip即可 然後就開始設置自己的zone 與zone file相關數據
1 在internet當中 任何一臺合法的主機都具有獨一無二的主機名 這個主機名包含了hostname+domain name 並稱爲 Fully Qualified Name(FQDN)
2 爲克服人類對ip不易記憶的困擾而有名稱解析器的產生 首先是/etc/hosts 而後則是DNS系統
3 目前Unix like的機器中 都是以BIND這個伯克萊大學開發的軟件來架設DNS服務器的
4 DNS是個協議的名稱 bind是個軟件 這個軟件提供的程序是named
5 在DNS系統中 每一筆記錄我們就稱他爲RR(Resource Record)
6 在DNS系統中 正解是有主機名找ip 反解則是ip找主機名 zone則是一個或者是部分域的設置值
7 在BIND9之後 默認的情況下named 已經做了chroot的動作
8 Slave主機自身並沒有自行設置zone file 其zone file是由master主機傳來的 因此master主機必須要針對slave主機開放allow-transfer的設置項目才行
9 整個DNS查找的流程當中 若找不到本身的數據 則會向root(.)要求資料
10 正解的記錄(record)主要有SOA A MAX NS CNAME TXT HINFO等
11 反解的記錄主要有 SOA PTR等
12 DNS查詢的命令主要有host nslookup dig whois等
在載入了named這個daemon之後 請務必前往/var/log/messages裏面察看是否成功開啓