2020年6月20日 星期六

Ubuntu 使用 bind9 架設DNS Server(轉貼)

Ubuntu 使用 bind9 架設DNS Server


這是寫給自己看的安裝筆記,所以比較簡單。

1. 首先安裝必要套件
  1. sudo apt-get install bind9 bind9-doc dnsutils

2. 進入到/etc/bind目錄,會看到底下目錄結構:

紅框的兩個檔案是我們要修改的。
named.conf.local 裡面可以設定正反解的zone,如果不想改,也可以新增自己喜歡的檔案,但要記得在named.conf裡面include他
named.conf.options 主要在設定dns的一些選項和安全性。
其他的檔案就是預設的一些localhost的正反解相關,這裡我們不用理他沒關係。



3. 首先設定named.conf.options,比較重要的是關閉recursion。底下是我的設定
  1. acl intra { 192.168.1.0/24; };
  2. options {
  3. directory "/var/cache/bind";
  4.  
  5. // If there is a firewall between you and nameservers you want
  6. // to talk to, you may need to fix the firewall to allow multiple
  7. // ports to talk. See http://www.kb.cert.org/vuls/id/800113
  8.  
  9. // If your ISP provided one or more IP addresses for stable
  10. // nameservers, you probably want to use them as forwarders.
  11. // Uncomment the following block, and insert the addresses replacing
  12. // the all-0's placeholder.
  13.  
  14. // forwarders {
  15. // 0.0.0.0;
  16. // };
  17.  
  18. //========================================================================
  19. // If BIND logs error messages about the root key being expired,
  20. // you will need to update your keys. See https://www.isc.org/bind-keys
  21. //========================================================================
  22. dnssec-validation auto;
  23.  
  24. auth-nxdomain no; # conform to RFC1035
  25. // listen-on-v6 { none; };
  26. listen-on port 53 { any; };
  27. allow-query { any; };
  28. allow-query-cache { none; };
  29. recursion no; //allow-recursion { intra; };
  30. also-notify { };
  31. };

最上面的紅框,是指定ACL群組,可以指定多個IP,等於當作變數來使用。
下面的紅框,recursion no和allow-recursion只能指定一個,要嘛全關(開),要嘛就只有特定IP才開,裡面放的變數就是上面acl所指定的。這裡我是把他全關了。

4. 接著設定zone,一個domain還包含正解和反解,所以會有兩個以上的zone。可以把zone的設定寫在named.conf.local底下。
底下是範例:
  1. acl allow-trans-ip { x.x.x.x; y.y.y.y; };
  2. //---正解的區域---
  3. //主要,如果要設定的zone是主要區域,就看這部分
  4. zone "domain1.com" {
  5. type master; //master為主要區域,也可設定為slave就是次要區域,可從主要區域複製資料過來
  6. file "/etc/bind/zones/domain1.com.fwd"; //指定dns檔案位置,檔名可自取,但如果有多個zone要設定,檔名格式最好一致
  7. //底下的是master才要設定,指定哪些IP可以從此台master複製資料,不然全開,網路所有DNS都可以從這裡取得資料也太危險
  8. allow-transfer {
  9. allow-trans-ip; //這個變數就是上面紅框處指定的
  10. };
  11. }
  12. //次要,如果要設定的zone是要從master取得資料的次要區域,就看這部分
  13. zone "slave.com" {
  14. type slave;
  15. file "slave.com.fwd";
  16. //次要區域的檔案有點不太一樣,如果使用絕對路徑,應該會發生無法寫入(permission deny)的錯誤
  17. //所以我們只使用檔名,那麼路徑呢?ubuntu預設是放在/var/cache/bind/底下
  18. //可在named.conf.options底下看到directory的設定就是預設檔案存放路徑
  19. //底下的是slave才要設定
  20. masters { x.x.x.x; }; //指定master是哪幾台,一樣可用acl指定IP群組
  21. }
  22. //...
  23.  
  24. //---反解的區域---
  25. zone "3.2.1.in-addr.arpa" { //反解的命名規則,如果IP是1.2.3.x,那麼就要倒過來寫變成3.2.1.in-addr.arpa,格式要對
  26. type master; //這裡就只寫master了,要設定slave的話跟上面一樣
  27. file "/etc/bind/zonez/1.2.3.rev"; //檔名一樣可自取,多個zone的話檔名格式最好一致
  28. allow-transfer { allow-trans-ip; };
  29. };


5. 接下來就是編輯每個zone的檔案了。如果是master的話一定要編輯,不然沒資料怎麼讓slave抓啊~
如果是slave的話檔案不存在也可,從master抓來之後會自己產生,但要確定檔案存放的目錄能夠讓named有寫入權限。

底下是正解檔案範例:
  1. $TTL 3600
  2. ;指定SOA紀錄
  3. @ IN SOA ns1.domain1.com. webadmin.domain1.com. ( ;注意webadmin.domain1.com其實是email,只是把@改成.,所以意思是webadmin@domain1.com
  4. 2014062007 ;Serial,每次編輯該檔都要改序號,這個是為了通知slavemaster有改變,要他們來更新資料,建議格式是YYYYMMDDnnnn為當日流水號
  5. 1800 ;Refresh
  6. 900 ;Retry
  7. 86400 ;Expire
  8. 3600 );Default TTL
  9.  
  10. ;指定NS紀錄
  11. ;一般DNS都會有兩台備用,所以如果有第二台當slave的話也記得要把該台寫到NS紀錄裡
  12. @ IN NS ns1.domain1.com.
  13. @ IN NS ns2.domain2.com.
  14.  
  15. ;指定A紀錄
  16. @ IN A 1.2.3.4 ;@表示該domain名稱,在本例也就是domain1.com
  17. ns1.domain1.com. IN A 1.2.3.4 ;masterIP
  18. ns2.domain1.com. IN A 1.2.3.5 ;slaveIP
  19. web.domain1.com. IN A 1.2.3.6
  20. mail1.domain1.com. IN A 1.2.3.7
  21. main2.domain1.com. IN A 1.2.3.8
  22.  
  23. ;指定CNAME
  24. www.domain1.com. IN CNAME web.domain1.com.
  25.  
  26. ;指定MX
  27. @ 3600 IN MX 1 mail1.domain1.com. ;數字1表示優先權最大
  28. @ 3600 IN MX 5 main2.domain2.com.

底下是反解檔案範例:
  1. $TTL 3600
  2. ;指定SOA紀錄
  3. @ IN SOA ns1.domain1.com. webadmin.domain1.com. (
  4. 2014062003
  5. 1800
  6. 900
  7. 86400
  8. 3600 )
  9. ;
  10. ;指定NS紀錄,SOANS的寫法都跟正解一樣
  11. @ IN NS ns1.domain1.com.
  12. @ IN NS ns2.domain1.com
  13.  
  14. ;指定PTR紀錄,反解裡面就只有PTR紀錄,說明IP要對應到哪個名稱
  15. 4.3.2.1.in-addr.arpa. IN PTR ns1.domain1.com. ;注意最前面的IP順序是相反的
  16. 4 IN PTR ns2.domain1.com. ;也可以用簡寫,只寫IP最後一碼即可,但注意簡寫後面不可加.
  17. ;...
  18.  

6. 接著重新啟動一下:/etc/init.d/bind9 restart
這樣就啟動我們的dns服務了,如果是slave的話也就自動向master抓好資料了。

參考資料:
鳥哥

沒有留言:

張貼留言