動作

DNS

出自 Itsmw

簡介

 本文並不在介紹從無到有寫出 dns 完整的設定檔,主要還是先利用 B2D/OB2D Server 提供的工具,產生基本設定檔,再進一步解釋其中涵義,以及如何修改新增/修改主機名稱對映。

 底下有兩篇文篇,對於 Bind9 會有更詳細的解說,請務必要參考:

  1. http://turtle.ee.ncku.edu.tw/~tung/dns/bind_conf.html
  2. http://linux.vbird.org/linux_server/0350dns.php



DNS開啟Port

  • TCP anynet 53
  • UDP anynet 53
  • TCP localhost 953 (管理指令用)



全球DNS管理

 DNS是 Domain Name Server 的簡稱,它的功能在於把 IP(v4 and v6) 位址與英文網址建立起對照表,以提供雙向解析的服務。在 InterNet 上,所有的 DNS Server 是以階層的方式,層層授權,層層管理。例如:「edu.tw」是教育部電算中心的網域,電算中心會為其架 DNS Server,管理所有的學術網路。由此,教育部的 DNS Server 授權台南縣教育網路中心的 DNS Server 自行管理【tnc.edu.tw】的網域。最後再由 dns.tnc.edu.tw 授權各校的 DNS Server 自行管理學校網域,例:【大成國小 dc1es.tnc.edu.tw】。更詳細的資料,請參考上面所列兩篇文章。

M6 dns stru.png


 南縣各校所使用的 Domain Name 皆是由 dns.tnc.edu.tw (163.26.200.1) 授權出去的【網域】,所以各校務必要建置 DNS Server 啟用該網域。至於特定用途的網站,才由 dns.tnc.edu.tw 指定網址。如:《 xoops.tnc.edu.tw 》、《 x.tnc.edu.tw 》、《 freesf.tnc.edu.tw 》等,皆在 163.26.200.1 中直接指定網址。

安裝與初步設定

DNS 查詢指令簡介

Client DNS 查詢過程

 在介紹查詢指令前,我們要先了解什麼是 DNS Cache,而它又和 Client 的 DNS 有關,因此本文在此做一簡單說明。

Client 端的 IP查詢過程

 依上圖,別台 DNS Server 會 cache 學校 dns 記錄,因此學校 dns server 若做任何變動,Client 電腦並不會立即知道(被 cache 騙了)。因此,若學校有變更 dns 記錄,除了要修改 serial 外,想查詢是否設定成功,只得對自己查,這也是為何 dig 指令後面必須加上 @163.26.xxx.xxx 參數的原因。

在 Linux 上常用的 DNS 查詢指令

  • nslookup dc1es.tnc.edu.tw
    直接查詢 dc1es.tnc.edu.tw 的 IP 位址
  • dig dc1es.tnc.edu.tw
    查詢 dc1es.tnc.edu.tw 網域狀況,詢問的對象視 /etc/resolv.conf 內 nameserver 的設定值而異
  • dig @163.26.200.1 dc1es.tnc.edu.tw
    向 163.26.200.1 查詢 dc1es.tnc.edu.tw 網域狀況
  • dig @163.26.200.1 dns.dc1es.tnc.edu.tw AAAA
    向 163.26.200.1 查詢 dns.dc1es.tnc.edu.tw 的 IPv6 網址
  • dig -x 163.26.182.1
    查詢 163.26.182.1 的反解記錄
  • dig @163.26.200.1 -x 163.26.182.1
    向 163.26.200.1 查詢 163.26.182.1 的反解記錄
  • dig @163.26.200.1 -x 2001:288:75a6::1
    向 163.26.200.1 查詢 IPv6 2001:288:75a6::1 的反解記錄
  • dig @163.26.182.1 dc1es.tnc.edu.tw MX
    向 163.26.182.1 查詢收件人為 xxx@dc1es.tnc.edu.tw 的信件會轉送至何處
  • dig @163.26.182.1 dns.dc1es.tnc.edu.tw MX
    向 163.26.182.1 查詢收件人為 xxx@dns.dc1es.tnc.edu.tw 的信件會轉送至何處
  • dig @168.95.1.1 yahoo.com NS
    向 168.95.1.1(中華電信 DNS Server) 查詢 yahoo.com 網域是由那些 Name Server 來服務



DNS Server套件

B2D/OB2D Server 已預設裝妥 Bind9 這一套 DNS Server 套件及其設定工具 ols3dns ,使用其產生器,所製造出的設定檔結構解釋如下:

  • 設定檔位置在 /etc/bind/ 底下


  • 無限制遞迴查詢(預設值)
    • 主控檔: named.conf
      其功能在於指定各網域(Zones)的設定檔名稱暨位置,以下各設定檔是以 ols3dns 產生器為例來進行說明,實務上,檔名只要在 named.conf 定義清楚即可,不一定要遵循下面的範例
rndc.key

遠端控制(Remote Name Daemon Control)金鑰

RNDC詳解: http://dns-learning.twnic.net.tw/bind/security.html#two

named.ca 最頂層 dns server 定義,在 named.conf 設定時必須使用 type hint 來指定
db.xxxx.tnc.edu.tw IPv4/IPv6共用正解檔
db.163.26.xxx IPv4反解檔
2001.288.75xx.rev IPv6反解檔
localhost IPv4/IPv6 localhost 正解檔
rev-127.0.0 IPv4 localhost 反解檔
rev.local6 IPv6 localhost 反解檔


  • 限制遞迴查詢設定檔結構
    • 主控檔: named.conf + auth_zones.conf
      named.conf 主內容在限制遞迴查詢,而可查詢的網域改放在 auth_zones.conf
    • 其他檔案與上面一致


  • port 值: TCP/UDP 53 ; localhost: 953
  • 手動啟動 | 停止 DNS 服務: /etc/init.d/bind9 start | stop | restart


設定檔內關鍵用語解說

 筆者整理了 Bind9 各設定檔常出現的關鍵用語如下,請參考:

$TTL 86400 對方主機查詢完畢,其值要保留(快取)的秒數,例:86400秒
$ORIGIN 宣告本設定檔所列之所有記錄出自於那個網域,最後必須以「.」做結尾,否則會自動再加上網域名稱
$ORIGIN subnet 授權自己的子網域給另一台 DNS Server
@ 代表「Zone」

以 db.xxx.tnc.edu.tw 設定檔為例,【@】指的是 xxx.tnc.edu.tw。
以 localhost 設定檔為例,【@】指的是 localhost

IN SOA 開始授權(Star of Authority),後面接了兩個參數是指「本 zone 的管理主機名」及「本 zone 的管理者」
IN NS 負責的 Name Server 主機名稱為何?
IN A 為主機名稱賦予 IPv4 位址
IN AAAA 為主機名稱賦予 IPv6 位址
IN CNAME --> 別名 例: www,ftp,s1...皆是 dns 的分身
IN PTR --> 反解 某 IP 所代表的主機名稱
IN MX -->Mail eXchange 轉信,例:
    mail.tw IN MX 0 spamgw.tw
    mail.tw IN MX 10 mail.tw

說明如下:

  1. 把【xxx@mail.tw】信件先轉給【spamgw.tw】(註: 有兩筆 MX 記錄時,數值低的有較高的優先權)
  2. spamgw.tw】收了信之後(並處理之),發現原來指定收信人是在【mail.tw】,因此再把它轉回給【mail.tw
  3. 如果 spamgw 故障,理論上會送至第二優先 mail.tw(它自己),但依游戲規則,就算是 mail.tw 它自己,它還是會去問 dns.tw ,信件 xxx@mail.tw 的 MX 為何?結果 dns.tw 說,要優先送 spamgw.tw。簡言之,設了 MX 之後,最優先的那台主機一定不可以故障,否則會收不到信件
  • 注意:mail 與 dns 同位址時,不可以採用 CNAME 的設法,一定要用 IN A,才可正常收發信件



限制遞迴查詢 vs 不限制

 限制遞迴查詢的意思是,本 DNS Server 只回答所轄網域的問題,其餘不答。不限制的話,就沒有上述限制。例如:當一台 client 向大成國小 DNS Server(163.26.182.1)詢問 tw.yahoo.com 時,若大成國小有做限制,那麼它不會回答,因為 tw.yahoo.com 不歸 dc1es.tnc.edu.tw 所管。反之,若不做任何限制,它會依其根設定檔(named.ca)一層層往上問,幫 client 找到 tw.yahoo.com 的 IP Address 並回覆之。

 可是,貴校可能已設妥限制,而且學校的電腦也都以本校的 DNS Server 為查詢主機,為何還是可以查得到 tw.yahoo.com ?那是因為在 named.conf 內的:「acl allow_clients { 127.0.0.1; 163.26.182.0/24; 2001:288:75a6::/48; };」設定中有說明,要開放給校內的機器查詢。

 限制遞迴查詢雖然會造成一些不方便,但它會有較高的安全性,尤其是對 ARP 類病毒偽造網址攻擊,有較高的防禦能力。不過未來若 IPv6 only 實施(沒有 ARP 機制,改用 fe80:...機制),其實限制遞迴查詢,就比較沒有存在意義(目前是 IPv4 與 IPv6並存)。


B2D Server初步設定方法

 有兩個方式來設定 DNS 參數

  1. 在設定管理密碼(b2d-setup)時勾選【這台主機要擔任 DNS Server 嗎 ?】,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔
    注意:本方式僅適用於裝完 B2D Server,第一次登入時。因為 b2d-setup 本身會改變很多設定值(不只 dns),若機器已順利運作多時,勿用。
  2. 直接在終端機介面下指令
  1. 不限遞迴查詢: root@dns~# ols3dns
  2. 限制遞迴查詢: root@dns~# ols3dns --no-recursive
  3. 以大成國小為例
    #-----------------------------------------------------#

    # 臥龍小三 工 具 箱 (1.0.7b2d) Copyright 2006 OLS3  #
    # DNS 自動產生器 1.0.7b2d for Linux          #
    # All rights Reserved.                #
    #-----------------------------------------------------#

    請輸入網域名稱? 例如: jmjh.tnc.edu.tw
    dc1es.tnc.edu.tw
    請輸入IP前三個數字? 例如: 163.26.167
    163.26.182
    請輸入第一台主機的第四個IP?
    例如: 163.26.167.1 的 1
    1
    您要架設第二部 DNS 嗎?(Y/N)
    N

    Done!


OB2D初步設定方法

 與 B2D Server 一樣,有兩個方式來產生基本的 DNS 設定檔

  1. 在設定管理密碼(ob2d-csetup-utf8/ob2d-csetup)時,在最後一個問題【這台主機要擔任 DNS Server 嗎 ?】回答「Y」,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔。
    注意:本方式僅適用於裝完 OB2D Server,第一次登入時。因為 ob2d-setup 本身會改變許多設定值,若機器已順利運作多時勿用。
  2. 先把終端機的字元編碼改為 Big5 ,再下指令
  1. 不限遞迴查詢: root@dns~# ols3dns
  2. 限制遞迴查詢: root@dns~# ols3dns --no-recursive
  3. 設定過程與上例一樣,請參考上面文件



Ubuntu初步設定方法

 筆者目前已開發一套設定工具 yhtools ,大家可以用它來簡單設定出基本設定值,它支援 IPv4 及 IPv6 的。用法可參考筆者拙著,或以下網址:
http://myip.tw/itsmw/index.php?title=YHTools



進階設定

IPv4 的正反解

新增一筆IPv4位址正解

 要新增一筆正解記錄只要在正解檔「 /etc/bind/db.xxx.tnc.edu.tw 」內,加上一筆 IN A 的記錄,再把 serial no 加1,並重新啟動 DNS Server 即可。 下文,筆者以新增 spamfilter.dc1es.tnc.edu.tw 網址,指向 163.26.182.250 IPv4 位址為例進行解說。

  1. 編輯 /etc/bind/db.xxx.tnc.edu.tw

    $TTL 86400
    @  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
               2006030801 ; 這個數字是序號(serial no.) , 每修改一次就要加 1 號
               86400 ; refresh
               1800 ; retry
               1728000 ; expire
               1200 ; Negative Caching
               )
       IN   NS dns.dc1es.tnc.edu.tw.
    dns IN A 163.26.182.1
    @ IN MX 0 mail.dc1es.tnc.edu.tw.
    ;網域名稱 dc1es.tnc.edu.tw 也要賦予一組 IPv4 位址
    dc1es.tnc.edu.tw. IN A 163.26.182.1
    ;
    s1     IN   CNAME dns.dc1es.tnc.edu.tw.
    www    IN   CNAME dns.dc1es.tnc.edu.tw.
    ftp    IN   CNAME dns.dc1es.tnc.edu.tw.
    proxy  IN   CNAME dns.dc1es.tnc.edu.tw.
    ;
    mail  IN  A  163.26.182.1
    s2    IN  A  163.26.182.2
    nt    IN  A  163.26.182.3
    s4    IN  A  163.26.182.4
    s5    IN  A  163.26.182.5
    nat   IN  A  163.26.182.234
    ;為 spamfilter 加上 IN A 的記錄
    spamfilter IN A 163.26.182.250  

    註1:正反解設定檔是用「;」來標示註解文字,不是「#」,請勿用錯
    註2:每一行都要靠左,除非本行是上一行的附屬設定

  2. 重新啟動 bind9
    root@dns:~# service bind9 restart
  3. 檢查重新啟動的訊息是否正常
    root@dns:~# tail -50 /var/log/syslog



IPv4反解問題

 IPv4正解,可以由上層 DNS Server 授權某任一 IPv4 位址來擔任 DNS 工作,不受 IPv4 網段影響。但反解就不行,因為它受到「至少要一個完整 C Class 網段」的限制。因此,所有分配到 163.26.xxx.1 的學校,可以幫其他前三個數字一致的機器做反解,但 163.26.xxx.129 就不行。這也是為什麼,我們可以向中華電信申請 dns 名稱正解管理權,但反解就不行,只能靠它幫忙代管的原因。

 基於上述原因,若貴校有非反解不可的原因,又不在 163.26.xxx.0 網段上,可以連絡教網中心主任協助處理。至於 IPv6 的部分,因為所配發網段皆是完整的 prefix 48 ,所以不會有此一困擾。不過如果貴校如果剛好就分配到 163.26.xxx.0 網段,則可以經由編輯 /etc/bind/db.163.26.xxx 來新增一筆 IPv4 反解記錄。

$TTL 86400

@   IN   SOA   dns.dc1es.tnc.edu.tw.   admin.dns.dc1es.tnc.edu.tw. (
      2000082620  ; serial 要加 1
      86400  ; refresh
      1800  ; retry
      1728000  ; expire
      1200  ; Negative Caching
      )
      IN   NS   dns.dc1es.tnc.edu.tw.

1     IN   PTR   dns.dc1es.tnc.edu.tw.
2     IN   PTR   s2.dc1es.tnc.edu.tw.
3     IN   PTR   nt.dc1es.tnc.edu.tw.
4     IN   PTR   s4.dc1es.tnc.edu.tw.
5     IN   PTR   s5.dc1es.tnc.edu.tw.
234   IN   PTR   nat.dc1es.tnc.edu.tw.
250   IN   PTR   spamfilter.dc1es.tnc.edu.tw.



手動增加 IPv6 的正反解

沒限制遞迴查詢(預設)

修改 named.conf

 把紅字的部分, 加至 /etc/bind/named.conf

options {

     directory "/etc/bind";
     allow-transfer {
        163.26.182.2; // Secondary DNS
     };
     listen-on-v6 { any; };
};

logging {
     category lame-servers{null;};
};

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

zone "localhost" {
     type master;
     file "localhost";
};

zone "0.0.127.in-addr.arpa" {
     type master;
     file "rev-127.0.0";
};

zone "dc1es.tnc.edu.tw" {
     type master;
     file "/etc/bind/db.dc1es.tnc.edu.tw";
};

zone "182.26.163.in-addr.arpa" {
     type master;
     file "db.163.26.182";
};

// ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "rev.local6";
};

// 2001.288.750b 的反解檔
zone "6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa." {
     type master;
     file "2001.288.75a6.rev";
};



繼續修改 db.xxx.tnc.edu.tw

$TTL 86400
@  IN  SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (
           2006030802 ; serial 要加 1
           86400 ; refresh
           1800 ; retry
           1728000 ; expire
           1200 ; Negative Caching
           )
   IN   NS dns.dc1es.tnc.edu.tw.
dns  IN  A    163.26.182.1
     IN  AAAA 2001:288:75a6::1
;上面 IN AAAA 前面一定要留空白, 代表是要繼續設 dns 主機的 AAAA(IPv6) 記錄
;
@ IN MX 0 mail.dc1es.tnc.edu.tw.
;
dc1es.tnc.edu.tw. IN A 163.26.182.1
      IN  AAAA  2001:288:75a6::1
;上面兩行指「網域名稱 dc1es.tnc.edu.tw 也賦予一組 IPv4 及 IPv6 位址」
;
s1     IN CNAME dns.dc1es.tnc.edu.tw.
www    IN CNAME dns.dc1es.tnc.edu.tw.
ftp    IN CNAME dns.dc1es.tnc.edu.tw.
proxy  IN CNAME dns.dc1es.tnc.edu.tw.
;
mail   IN  A     163.26.182.1
       IN  AAAA  2001:288:75a6::1
s2     IN  A     163.26.182.2
nt     IN  A     163.26.182.3
s4     IN  A     163.26.182.4
s5     IN  A     163.26.182.5
nat    IN A  163.26.182.234
       IN AAAA  2001:288:75a6::234  
spamfilter IN A  163.26.182.250  
;經過修改 spamfilter.dc1es.tnc.edu.tw 便會有 IPv4 及 IPv6 兩筆記錄


修改 localhost 新增 ::1 正解

$TTL 86400
@    IN   SOA    dns.dc1es.tnc.edu.tw.    admin.dns.dc1es.tnc.edu.tw. (
      2000082620 ; serial 要加 1
      86400 ; refresh
      1800 ; retry
      1728000 ; expire
      1200 ; Negative Caching
      )
     IN   NS   dns.dc1es.tnc.edu.tw.
;
localhost. IN  A    127.0.0.1
           IN  AAAA  ::1


  • 註:紅字為修改之處



建立 ::1 及 2001.288.75xx.rev 反解檔

  • 建立 ::1 IPv6 的 localhost 反解
    root@dns~# vi /etc/bind/rev.local6

$TTL 86400
@ IN  SOA  dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (1 15m 5m 30d 1h)
    IN   NS  dns.dc1es.tnc.edu.tw.

; (1 15m 5m 30d 1h) 中的 1 是序號, 每次修改都要加 1

;;

1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa. IN PTR localhost.

註:除了 IN NS 這一行為 SOA 這一行的附屬參數,所以左側留有空白外,其餘各行前面不可留空白

  • 建立 IPv6 反解檔
    root@dns~# vi /etc/bind/2001.288.75a6.rev

$TTL 86400
$ORIGIN 6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa.
@  IN   SOA dns.dc1es.tnc.edu.tw. admin.dns.dc1es.tnc.edu.tw. (1 15m 5m 30d 1h)
   IN   NS   dns.dc1es.tnc.edu.tw.
;;
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  dns.dc1es.tnc.edu.tw.
234.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0  IN  PTR  nat.dc1es.tnc.edu.tw.



限制遞迴查詢

 只需修改下面這兩個設定檔,其餘設定值與不限遞迴查詢一致

修改 named.conf

options {
     directory "/etc/bind";
     allow-transfer {
        163.26.182.2;
     };
     listen-on-v6 { any; }; //要加上這一行
};


logging {
     category lame-servers{null;};
};

// 把學校 IPv6 網段加入可允許查詢區,例:新增 2001:288:75a6::/48;
acl allow_clients { 127.0.0.1; 163.26.182.0/24; 2001:288:75a6::/48; };

// 在 acl 中的 IP 允許的操作
view "recursive" {
     match-clients { allow_clients; };
     recursion yes;
     include "auth_zones.conf";
};

// 未在 acl 中的 IP 拒絕使用遞迴式查詢
view "external" {
     match-clients { any; };
     recursion no;
     include "auth_zones.conf";
};


修改 auth_zones.conf

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

zone "localhost" {
     type master;
     file "localhost";
};

zone "0.0.127.in-addr.arpa" {
     type master;
     file "rev-127.0.0";
};

zone "dc1es.tnc.edu.tw" {
     type master;
     file "/etc/bind/db.dc1es.tnc.edu.tw";
};

zone "182.26.163.in-addr.arpa" {
     type master;
     file "db.163.26.182";
};

// 新增 ::1 的反解檔
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa."{
     type master;
     file "rev.local6";
};


// 新增 2001.288.75a6 的反解檔
zone "6.a.5.7.8.8.2.0.1.0.0.2.ip6.arpa." {
     type master;
     file "2001.288.75a6.rev";
};

修改 db.xxx.tnc.edu.tw 正解檔

 與不限遞迴查詢做法相同,請參考前文

建立 ::1 及 2001.288.75xx.rev 反解檔

 與不限遞迴查詢做法相同,請參考前文

本文小檔案

__NORICHEDITOR__

題名: Title::DNS說明
作者: Creator::itsmw作者群
主題/關鍵詞: Subject::dns, bind, bind9
簡述: Description::dns安裝設定簡介
出版者: Publisher::MyIP itsmw 計畫
其他參與者: Contributor::itsmw作者群
日期: Date::2010-5-7
文件類型: Type::08伺服器軟體
資料格式: Format::text/html
文件識別代號: Identifier::http://myip.tw/itsmw/index.php?title=DNS
來源: Source::http://myip.tw/b2ddoc/LinuxBase
語言: Language::zh-TW
相關資源: Relation::http://myip.tw/b2ddoc/LinuxBase
文件涵蓋範圍: Coverage::Linux平台
版權規範: Rights::GNU Free Documentation License 1.2