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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料