2013年1月23日 星期三

SUSE Linux DNS建置

 
  其實DNS其實並沒有很困難,了解其應用原理就很簡單。
  一般來講為什麼要有DNS相信大家都很清楚,就是為了名稱解析而已,如果要上網都打IP那也是很神奇的一件事,要了解DNS就要先了解DNS的查詢原理。
  在鳥哥的私房菜上裡有提到就很清楚一開始clinet要上網查詢首先有幾個步驟:如要查www.hinet.net.tw
1、向local DNS查詢,查不到
2、向root DNS查詢,會交由負責管理tw的DNS
3、管理tw DNS會再交由負責管理net.tw的DNS
4、管理net.tw DNS會再交由負責管理hinet.net.tw的DNS
5、最後管理hinet.net.tw DNS會知道www這個主機名稱的IP位置而解析成功

在架設DNS前先確定要安裝套件
rpm -ql bind
bind是DNS的套件
接下來設定vi /etc/named.conf
zone "." in {
        type hint;
        file "root.hint";
};
zone "localhost" in {
        type master;
        file "localhost.zone";
};
zone "0.0.127.in-addr.arpa" in {
        type master;
        file "127.0.0.zone";
};
以上為預設設定,這些就不需要更改,以下是我個人所要添加的domain
zone "example.com" in {
        type master;宣告他的類型為主要DNS
        file "master/example.com.db";record所要存放的位置
        allow-transfer { none; };是否允許allow-transfer,預設是any
};
zone "233.168.192.in-addr.arpa" in {
        type master;
        file "master/233.168.192.in-addr.arpa.db";
        allow-transfer { none; };
};
我設定一個domain為example.com做為我的網域名稱,當然這個是實驗用的,外部當然解不到
反解也是相同設定,說明反解的設法
zone "233.168.192.in-addr.arpa"這設定我的反解名稱,為何是這樣,前三個數字是我DSN的前32-bits,不過這裡要反過來寫,後面的in-addr.arpa這個是固定的,專門用來反解用的網域,背下來就對了。
file裡的檔案位置是存在/var/lib/named裡,進入到這個目錄後有幾個目錄其中一個就是master,後面的example.com.db是我要存的檔名

  之後我把/var/lib/named/localhost.zone複製一份到master順便改名為example.com.db
vi example.com.db
$TTL 1W
@               IN SOA  server2.example.com.   root (
                                20130123        ; serial (d. adams)
                                86400           ; refresh
                                3600            ; retry
                                43200           ; expiry
                                1W )            ; minimum
                IN NS           server1.example.com.
                IN NS           server2.example.com.
server1         IN A            192.168.233.128
server2         IN A            192.168.233.129
TTL指別人來查能cache多久
SOA通常為第一個設定start of authority我會解釋授權開始
@代表我的網域如果不特別指定會抓/etc/named.conf裡的example.com
IN指internet
server2.example.com. 這表示我授權的是那一個DNS,注意後面有一個點,如果沒打會自動代網域名稱,後面的root為管理員的信箱,這裡我沒設,如果要設定的話不可加@,以點來代替,如johnny.example.com指定johnny的信箱。
serial為序號,通常是日期且不可超過10位數字,slave更新zone是看序號,手動更新一定要改序號。
其他的為slave來同步zone是多久,失敗重試時間,重試失敗多久後停止,最後1W為TTL假如一開始沒指定,這邊就可自己設定。
有幾個限制要遵守
Expire>=Refresh+Retry
Expire>=10*Retry
Refresh>=2*Retry

指定NS=nameserver,DNS的主機名稱
前面沒加會當做接著前面的設定做,也就是照@=example.com來寫
全部為
 example.com.               IN NS server1.example.com.
 example.com.               IN NS server2.example.com.

server1 IN A 192.168.233.128
server2 IN A 192.168.233.129
設定A=address,也就是IP位置
server1後沒有一個點全部為
server1.example.com. IN A 192.168.233.128
server2.example.com. IN A 192.168.233.129
server2是我主要的DNS server,server1是我次要的DNS server在這裡加次要DNS的原因為將來我要設通知同步的話只要把notify設成yes就好
一樣把/var/lib/named/127.0.0.zone復製並改檔名為233.168.192.in-addr.arpa.db
接下來設定反解,在DNS的設定;代表註解
;$TTL 1W
$ORIGIN 233.168.192.in-addr.arpa.
@               IN SOA          server2.example.com.   root.localhost. (
                                20130123        ; serial (d. adams)
                                86400           ; refresh
                                3600            ; retry
                                43200           ; expiry
                                86400 )         ; minimum
                IN NS           server2.example.com.
                IN NS           server1.example.com.
129             IN PTR          server2.example.com.
128             IN PTR          server1.example.com.
其他設定同上
PTR是反解129為我的最後一碼IP位置全部來寫的話為
129.233.168.192.in-addr.arpa.             IN PTR server2.example.com.
128.233.168.192.in-addr.arpa.             IN PTR server1.example.com.
設定完成啟動DNS
rcnamed start
建立slave DNS
zone "example.com" in {
        type slave;
        file "slave/example.db";
        masters { 192.168.233.129; };
};
zone "233.168.192.in-addr.arpa" in {
        type slave;
        file "slave/233.168.192.in-addr.arpa.db";
        masters { 192.168.233.129; };
};
slave只需寫好zone,指定為slave,指定master是誰
啟動dns服務後就可以在指定的資料夾中看到設定檔,有就表示成功,沒有表示設錯
db的檔案當然可以存在不同的路徑上,只不過如果不存在這些路徑的話要改變所有人
意思是說,當slave要同步master的zone時,如果檔案是存在slave以外的檔案,同步可能會有問題,這樣就要用chown來改變ower及grp,改為named,這樣同步才不會有問題

另外基於安全上的考量,建議把master的allow-transfer設為只有slave可以
在slave則設為none,這樣別人來查詢時才不會把所有資料都吐出來讓大家看到。


by Johnny