1.Linux-Centos 7 架設DNS服務及設定Bind chroot環境

資訊文件分類:

網域名稱服務(Domain Name Service, DNS)是建立伺服器服務的基本功能,雖然說一般的網站管理人員可以選擇把DNS交給ISP或是域名管理單位進行代管,不過大多數的代管單位都有數目上的限制,而且只限於簡單的 A 及 MX Record,如果有多個domain需要管理,然後又常常需要變更DNS的名稱,通常自行管理是一個比較好的選擇,不過如果您只有一個網站,或是很單純的機器是在外部的機器代管,那麼只需使用簡單的代管服務或是工具管理即可,不需要那麼麻煩又管理一個服務~

 

如果要自行管理您的DNS,那麼請在自已的域名管理單位(筆者是亞太)將其設定為「自行架設DNS」,並設定二組不同的DNS位置(可以設定同一組IP,兩組不同名字),如下圖所示:

dns

接下來請在自已的主機上安裝二個RPM,由於我們等會要設定chroot的環境,那什麼是chroot?又為何要設定chroot呢?簡單來說就是要增加系統的安全性,把運行的根目錄用chroot限制於特定的目錄下,減少被存取到 /etc/目錄下內容的機會,所以一般來說都會建議採用chroot的環境~DNS在Linux的環境上,預設都是用Bind,安裝指令為:

#yum install bind bind-chroot -y

由於系統預設會使用mount –bind的指令,將bind的環境掛在chroot環境中,以下的目錄和檔案,在啟用bind-chroot後就會被mount至/var/named/chroot下:

/etc/named
/etc/pki/dnssec-keys
/run/named
/var/named
/usr/lib64/bind or /usr/lib/bind (視平台而定)

以下的檔案也會被掛載到/var/named/chroot中:

/etc/named.conf
/etc/rndc.conf
/etc/rndc.key
/etc/named.rfc1912.zones
/etc/named.dnssec.keys
/etc/named.iscdlv.key
/etc/named.root.key

編輯(請使用vim指令)/etc/named.conf,編輯內容如下:

options {

 listen-on port 53 { xxx.xxx.xxx.xxx; };   #設定成你的主機IP
 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 no;

 dnssec-enable yes;
 dnssec-validation yes;
 dnssec-lookaside auto;
 bindkeys-file "/etc/named.iscdlv.key";

 managed-keys-directory "/var/named/dynamic";

 pid-file "/run/named/named.pid";
 session-keyfile "/run/named/session.key";

};

logging {
 channel default_debug {
 file "data/named.run";
 severity dynamic;
 };
};

zone "." IN {
 type hint;
 file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

zone "yourdomain" {   #例:kevinlinul.idv.tw 
 type master;
 file "/etc/named/yourdomain.hosts";  #一般是設定成您的「domain.hosts」
 };

接下編輯(請用vim)/etc/named/yourdomain.hosts這個檔案,在此我們以kevinlinul.idv.tw這個domain為例,設定2組A Record。

$ttl 38400
kevinlinul.idv.tw. IN SOA kevinlinul.idv.tw. kevin\.linul.gmail.com. (
                   2014091101  #serial,代表序號,可以設定一個你覺得有意義的數字,
                               #數字愈大愈新,若有架設slave DNS,則此序號比slave大
                               #時,會將資料更新到slave上。
                   10800       #Refrest,設定slave(若有架設的話)多久更新一次記錄
                   3600        #Retry,設定slave(若有架設的話),在更新失敗後多久
                               #後再試一次
                   604800      #Expire,設定slave(若有架設的話),在更新失敗後多久
                               #中止更新動作
                   38400 )     #minimun,TTL,也就是其他DNS Cache這個DNS資料不會
                               #超過這個時間
kevinlinul.idv.tw.      IN NS kevinlinul.idv.tw. #指定服務該domain的DNS主機名稱
kevinlinul.idv.tw.      IN A xxx.xxx.xx.xxx      #指定kevinlinul.idv.tw.的IP位
                                                 #址,請注意後面要加「.」
blog.kevinlinul.idv.tw. IN A xxx.xxx.xx.xxx      #新指定一台主機
                                                 #blog.kevinlinul.idv.tw,請注
                                                 #意後面要加「.」
www                     IN A xxx.xxx.xx.xxx      #新指定一台主機
                                                 #www.kevin.idv.tw,只設定主機名
                                                 #稱,系統會自動加上後面的domain

第一行「kevinlinul.idv.tw. IN SOA kevinlinul.idv.tw. kevin\.linul.gmail.com.」中,kevinlinul.idv.tw是代表domain,也可以用「@」符號取代,SOA代表開始後面的認證授權資料,「kevin\.linul.gmail.com.」就是email,等同於「kevin.linul@gmail.com」請注意最後要加一個「.」,沒加的話,系統會自動把domain加上,就會變成「kevin.linul@gmail.com.kevinlinul.idv.tw」,這樣就錯了。

存檔後離開,用以下指令啟動DNS服務:

#systemctl restart named-chroot.service
#systemctl enable named-chroot.service
#systemctl disable named.service

啟動成功後,您可以至/var/named/chroot/etc 及 /var/named/etc/named 目錄中,可以發現剛剛設定的檔案都被掛載上去了~這就代表啟動成功。

接下來可以用nslookup這個指令來測試剛剛兩筆記錄是不是正確:

#nslookup
> server xxx.xxx.xx.xxx  #你架設的dns IP位置
Default server: xxx.xxx.xx.xxx
Address: xxx.xxx.xx.xxx#53
> www.kevinlinul.idv.tw
Server:       xxx.xxx.xx.xxx
Address: xxx.xxx.xx.xxx#53
> blog.kevinlinul.idv.tw
Server:       xxx.xxx.xx.xxx
Address: xxx.xxx.xx.xxx#53

如果都有出現,代表你的DNS已架設完成囉!

參考資料:https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Networking_Guide/sec-BIND.html