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。底下是我的設定
acl intra { 192.168.1.0/24; }; options { directory "/var/cache/bind"; // If there is a firewall between you and nameservers you want // to talk to, you may need to fix the firewall to allow multiple // ports to talk. See http://www.kb.cert.org/vuls/id/800113 // If your ISP provided one or more IP addresses for stable // nameservers, you probably want to use them as forwarders. // Uncomment the following block, and insert the addresses replacing // the all-0's placeholder. // forwarders { // 0.0.0.0; // }; //======================================================================== // If BIND logs error messages about the root key being expired, // you will need to update your keys. See https://www.isc.org/bind-keys //======================================================================== dnssec-validation auto; auth-nxdomain no; # conform to RFC1035 // listen-on-v6 { none; }; listen-on port 53 { any; }; allow-query { any; }; allow-query-cache { none; }; recursion no; //allow-recursion { intra; }; also-notify { }; };
最上面的紅框,是指定ACL群組,可以指定多個IP,等於當作變數來使用。
下面的紅框,recursion no和allow-recursion只能指定一個,要嘛全關(開),要嘛就只有特定IP才開,裡面放的變數就是上面acl所指定的。這裡我是把他全關了。
4. 接著設定zone,一個domain還包含正解和反解,所以會有兩個以上的zone。可以把zone的設定寫在named.conf.local底下。
底下是範例:
acl allow-trans-ip { x.x.x.x; y.y.y.y; }; //---正解的區域--- //主要,如果要設定的zone是主要區域,就看這部分 zone "domain1.com" { type master; //master為主要區域,也可設定為slave就是次要區域,可從主要區域複製資料過來 file "/etc/bind/zones/domain1.com.fwd"; //指定dns檔案位置,檔名可自取,但如果有多個zone要設定,檔名格式最好一致 //底下的是master才要設定,指定哪些IP可以從此台master複製資料,不然全開,網路所有DNS都可以從這裡取得資料也太危險 allow-transfer { allow-trans-ip; //這個變數就是上面紅框處指定的 }; } //次要,如果要設定的zone是要從master取得資料的次要區域,就看這部分 zone "slave.com" { type slave; file "slave.com.fwd"; //次要區域的檔案有點不太一樣,如果使用絕對路徑,應該會發生無法寫入(permission deny)的錯誤 //所以我們只使用檔名,那麼路徑呢?ubuntu預設是放在/var/cache/bind/底下 //可在named.conf.options底下看到directory的設定就是預設檔案存放路徑 //底下的是slave才要設定 masters { x.x.x.x; }; //指定master是哪幾台,一樣可用acl指定IP群組 } //... //---反解的區域--- zone "3.2.1.in-addr.arpa" { //反解的命名規則,如果IP是1.2.3.x,那麼就要倒過來寫變成3.2.1.in-addr.arpa,格式要對 type master; //這裡就只寫master了,要設定slave的話跟上面一樣 file "/etc/bind/zonez/1.2.3.rev"; //檔名一樣可自取,多個zone的話檔名格式最好一致 allow-transfer { allow-trans-ip; }; };
5. 接下來就是編輯每個zone的檔案了。如果是master的話一定要編輯,不然沒資料怎麼讓slave抓啊~
如果是slave的話檔案不存在也可,從master抓來之後會自己產生,但要確定檔案存放的目錄能夠讓named有寫入權限。
底下是正解檔案範例:
$TTL 3600 ;指定SOA紀錄 @ IN SOA ns1.domain1.com. webadmin.domain1.com. ( ;注意webadmin.domain1.com其實是email,只是把@改成.,所以意思是webadmin@domain1.com 2014062007 ;Serial,每次編輯該檔都要改序號,這個是為了通知slave,master有改變,要他們來更新資料,建議格式是YYYYMMDDnn,nn為當日流水號 1800 ;Refresh 900 ;Retry 86400 ;Expire 3600 );Default TTL ;指定NS紀錄 ;一般DNS都會有兩台備用,所以如果有第二台當slave的話也記得要把該台寫到NS紀錄裡 @ IN NS ns1.domain1.com. @ IN NS ns2.domain2.com. ;指定A紀錄 @ IN A 1.2.3.4 ;@表示該domain名稱,在本例也就是domain1.com ns1.domain1.com. IN A 1.2.3.4 ;master的IP ns2.domain1.com. IN A 1.2.3.5 ;slave的IP web.domain1.com. IN A 1.2.3.6 mail1.domain1.com. IN A 1.2.3.7 main2.domain1.com. IN A 1.2.3.8 ;指定CNAME www.domain1.com. IN CNAME web.domain1.com. ;指定MX @ 3600 IN MX 1 mail1.domain1.com. ;數字1表示優先權最大 @ 3600 IN MX 5 main2.domain2.com.
底下是反解檔案範例:
$TTL 3600 ;指定SOA紀錄 @ IN SOA ns1.domain1.com. webadmin.domain1.com. ( 2014062003 1800 900 86400 3600 ) ; ;指定NS紀錄,SOA跟NS的寫法都跟正解一樣 @ IN NS ns1.domain1.com. @ IN NS ns2.domain1.com ;指定PTR紀錄,反解裡面就只有PTR紀錄,說明IP要對應到哪個名稱 4.3.2.1.in-addr.arpa. IN PTR ns1.domain1.com. ;注意最前面的IP順序是相反的 4 IN PTR ns2.domain1.com. ;也可以用簡寫,只寫IP最後一碼即可,但注意簡寫後面不可加. ;...
6. 接著重新啟動一下:/etc/init.d/bind9 restart
這樣就啟動我們的dns服務了,如果是slave的話也就自動向master抓好資料了。
參考資料:
鳥哥
沒有留言:
張貼留言