Linux 學習筆記 001 – DNS Server 架設練習
參考教學: 鳥哥的 Linux 私房菜,第十九章、主機名稱控制者: DNS 伺服器
本筆記是參考鳥哥這一章的 DNS Server 架設,來做一次練習,因此如果想看教學的人,還是建議去看鳥哥網頁 ^__^
1. 頂層域名 TLD
- ccTLD 國家頂層域名 例如 .tw
- gTLD 普通頂層域名 例如 .com
2. 領域查詢權
- 簡單的說,就是向負責單位申請你希望負責某某一域的總負責權
- 例如、 ABC 公司向 .tw 申請 abc.com.tw 這一整個域的 DNS 解析權
- 那有人需要解析 XXX.abc.com.tw 的時候,會依循次序從 .來到 .tw, TWNIC 的機器就會把責任丟給 abc.com.tw 的 DNS 機器,由它去跟使用者說:XXX.abc.com.tw在哪裡
3.
- 正解:把名稱翻譯為IP
- 反解:把IP翻譯為名稱
4. 正解 zone 的常見標誌
- SOA 開始驗證的縮寫,此標誌代表是幾個重要參數(主機名稱、管理員EMAIL、資料序號、更新頻率refresh、重試retry、到期expire、快取時間 min TTL)
- NS NAMESERVER的名稱,就是那台主機的名
- A IP 翻譯訊息,或者可以說是「正式名稱」
- CNAME 就是 A 的別名囉!
5. 反解 zone 的常見標誌
- SOA
- NS
- PTR 指標
- 反解其實是對 X.x.x.in-addr-arpa 查詢 某主機的紀錄。
- 使用指令 dig -x ( 不加 -x 則會直接取用 DNS 的紀錄返回給你)
6. hint 類型
- 專指紀錄 . 的 zone (一個正解 zone 內可能有很多筆 zone 資料)
7. 通常只有mail server會比較需要嚴格的正反解成對
8. master/slave架構
- 多台 DNS 作為互相備援,但是若每台都要手動更新很痛苦,因此只有其中一台為 Master,其餘為 Slave,slave會以master為準,去更新自己。同時也可以設定master主動通知slave
- 此外,當網路上有查詢需求時,會先抓到誰不知道,看運氣,所以,盡可能即時的同步資料是很重要的。
9. 使用軟體
- BIND 主程式名稱 named
- 通常會加裝 bind-chroot ,使其可以鎖定在某目錄下,該目錄作為 BIND的根目錄,這樣即使遭到攻破,災情就可以鎖定在該目錄下,預設目錄 /var/named/chroot
10. 重要檔案或資料夾:
- /etc/named.conf, 主要設定
- /etc/sysconfig/named, 額外設定,chroot之類的
- /var/named 目錄
11. cache-only DNS
- 自己其實沒有儲存任何正反解資料,他每次都會去查 . ,然後提供給查詢者
12. forwarding DNS
- 跟上面一樣,自己沒資料,每次都委請上層 DNS 查,然後把資料提供給查詢者
- 使用時機,例如、防火牆比較嚴格,需要連 53 port 都阻擋,則可以火牆上架設這種 DNS
13. 設定 named.conf
- 註解是 //
- 結尾需要分號 ;
14. 練習設定最簡單的 forwarding DNS
- 設定 named.conf
// 仿照鳥哥的設定 options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; forward only; forwarders { 168.95.1.1; // 種花的 8.8.8.8; // google }; };
- 啟動 /etc/init.d/named start
- 觀察日誌,確保沒有錯誤
15. 設定正常 DNS 來練習(但不能拿到真實網路上去 )
要先設計好架構,例如
- 網域 yes.right, IP 群 192.168.15.0/24
- 此域總共4台主機,其中 DNS master一台,名稱是 dns1.yes.right,負責解析全部 yes.right
- 其餘電腦分別是 t41.yes.right 、 t43p.yes.right 、 x31.yes.right
16. 要設定的檔案
- named.conf
- name.yes.right 正解資料
- name.192.168.15 反解資料
- named.ca 關於 . 的資料
named.conf
options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; allow-transfer { none; }; // 是否允許來自 slave DNS 對我的整個領域資料進行傳送,有 slave DNS 再開 }; // ----------------------------------- // 設定 zone 資料 // ----------------------------------- // 一、 . 的資料 zone "." IN { type hint; file "named.ca"; }; // 二、正解資料 zone "yes.right" IN { // 自設的 gTLD type master; // 本機的 DNS 是什麼類型 file "named.yes.right"; // name 檔案名稱 }; // 三、反解資料 zone "15.168.192.in-addr.arpa" IN { type master; file "named.192.168.15"; }; // 檔名不一定需要 named 開頭,僅為慣例並非規定,可依據自己習慣來訂。
正解 zone file :named.yes.right
;#; TTL $TTL 600 ;#; ----------------------------------- ;#; @ 代表 zone 的意思! ;#; 這裡是 named.yes.right ,所以 @ 代表 yes.right. ;#; 記住要使用 FQDN 然後要加小數點 . ;#; 不然就只會被當成機器名稱,而非完整網域名稱 ;#; ----------------------------------- ;#; 這裡是起碼要有的 SOA NS A / MX 可有可無 @ IN SOA dns1.yes.right. root.www.yes.right. ( 2013121601 3H 15M 1W 1D ) @ IN NS dns1.yes.right. ; DNS 伺服器名稱 dns1.yes.right. IN A 192.168.15.19 ; 本台 DNS 伺服器 IP,設定 dns1 為 A 標誌 @ IN MX 10 www.yes.right. ; 本領域的郵件伺服器MX ,10 是優先次序號,別忘了 dig 查詢 MX 時會看到啥 ;#; ------ ;#; 設定關於本台 DNS 的其他名稱資料 ;#; ------ www.yes.right. IN A 192.168.15.19 ; 設定www為 A 標誌 linux.yes.right. IN CNAME www.yes.right. ; 設定此為別名 ftp.yes.right. IN CNAME www.yes.right. ; 設定此為別名 major.yes.right. IN CNAME www.yes.right. ; 設定此為別名 ;#; ;#; 如果有其他 slave 以及其他名稱轉換就可以寫在後面 ;#; t41.yes.right. IN A 192.168.15.90 t43p.yes.right. IN A 192.168.15.92 x31.yes.right. IN A 192.168.15.93
反解 zone file :named.192.168.15
$TTL 600 @ IN SOA dns1.yes.right. root.www.yes.right. ( 2013121601 3H 15M 1W 1D ) @ IN NS dns1.yes.right. 19 IN PTR dns1.yes.right. 19 IN PTR www.yes.right. 90 IN PTR t41.yes.right. 92 IN PTR t43p.yes.right. 93 IN PTR x31.yes.right. ;#; ------------------- ;#; 其實就是把 A 換成 PTR ;#; -------------------
17. DNS 的啟動
host# /etc/init.d/named start 正在啟動 named: [ 確定 ]
- # 好像不能當註解了 ,一直出錯,只好發狠給他用 ;#; 註解 XDDD
19. 觀察 message 揪錯, 任何一個 named.192.168.15: 行數,這樣類型的訊息都不能有,這樣的錯誤訊息代表 DNS 邏輯上一定有問題,不能聽之任之。
20. 放開防火牆 UDP & TCP 53
21. 設定 /etc/resolv.conf ,把自己的 DNS 放到最前面
# Generated by NetworkManager nameserver 192.168.15.19
22. 嘗試查詢 dig
23. 如果需要更新資訊
- 1. 修改正反解資料或 zone 檔案增修
- 2. 序號增大
- 3. 重新啟動 named
24. 增加 slave 機器, Master 的工作
- named.conf 內,正解、反解的區域內都要加上 allow transfer + slave IP
- 正反解的 zone 檔案,都得加上 slave 的 NS & A / PTR
- 序號務必增大
25. 增加 slave 機器, slave 的工作
named.conf 內
zone "15.168.192.in-addr.arpa" IN { type slave; file "slaves/named.192.168.15"; masters { 192.168.15.19; }; };
- type 得改成 slave
- 檔案放到 slave 資料夾 (file “slaves/named.192.168.15”; )
- 宣告 masters {192.168.15.19;} (註,mastrer 機器在此就只需要宣告 file “檔名” ,而不必加 masters 這一句)
- 注意! masters 有 s 喲
- 最後,確認有資料夾 slave ( ll -d /var/named/slaves ), 可以把 named.ca 丟進去,也可以不丟啦! slave 嘛!
26. 啟動與觀察日誌,沒問題後就 dig 查查看
- 如果日誌出現權限錯誤,一定是資料夾權限出問題 ,檢查之
27. 子網域授權
- 情境假設: dns1.yes.right 這台機器作為上層 DNS ,授權 good.yes.right 子網域解析權給 dns1.good.yes.right (192.168.15.200)
- dns1.yes.right 的 zone file 內,增加 NS 資料、A 資料
- dns1.good.yes.right,設定好自己的 zone 與設定
28. 上層 dns1.yes.right 的部份
- 序號加大 XD
- 把 good 子網域的 NS 指給 dns1.good.yes.right ,並加上 A 標誌
.good.yes.right. IN NS dns1.good.yes.right. dns1.good.yes.right. IN A 192.168.15.200
重新啟動,沒錯誤就可以繼續去架設子網域的 DNS 。
29. 下層 dns1.good.yes.right 的部份
一樣
- named.conf :照寫,只是網域不同
- 正解zone :照寫,只是網域不同
- 反解zone :照寫,只是網域不同
30. 總結
- 下層的dns把自我工作做好即可,不需要在下層dns指出上層。
- 上層dns則必須要在 zone 中指出下層的授權對象,好讓 user 可以轉過去找到下層DNS負責解析
31. view
- 對於不同的使用者,回答不同的解析答案
- 例如、不同來源的人,給他不同地區的 mirror 主機位置
32. rndc
- 是一個工具,讓你管理 DNS Server
- 需要先建立 rndc.key ,之後加到 named.conf,但是新版應該都會自動建立
- 產生組態的指令 rndc-confgen ,會產生一些資料
- 前半段複製到 /etc/rndc.conf ,資訊如下
# Start of rndc.conf key "rndc-key" { algorithm hmac-md5; secret "Gc/dWALMmgB0ysX7BaOgSw=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; }; # End of rndc.conf
- 上述 key 片段,另外手動新增到 /etc/rndc.key 這個檔案。
- 後半複製到named.conf,而且要記得解除 # ,資訊如下
# Use with the following in named.conf, adjusting the allow list as needed: # key "rndc-key" { # algorithm hmac-md5; # secret "Gc/dWALMmgB0ysX7BaOgSw=="; # }; # # controls { # inet 127.0.0.1 port 953 # allow { 127.0.0.1; } keys { "rndc-key"; }; # }; # End of named.conf
- 重新啟動 named
- 可以執行 rndc 指令了
32. 執行範例
# rndc status version: 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 CPUs found: 1 worker threads: 1 number of zones: 18 debug level: 0 xfers running: 0 xfers deferred: 0 soa queries in progress: 0 query logging is OFF recursive clients: 0/0/1000 tcp clients: 0/100 server is up and running
33. 執行指令時,如果出現金鑰訊息,就手動重建一次金鑰即可
34. 動態 DNS
- 需建立 key
- 之後 Client 端使用 nsupdate 指令來 update 自己的 zone file
Leave a Reply