DNS雙向解析服務(Linux主機伺服器架設技術)Domain Name Server
DNS雙向解析服務(Linux主機伺服器架設技術)Domain Name Server
本文並不在介紹從無到有寫出 dns 完整的設定檔,主要還是先利用 Linux/Linux Server 提供的工具,產生基本設定檔,再進一步解釋其中涵義,以及如何修改新增/修改主機名稱對映。
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 自行管理學校網域。更詳細的資料,請參考上面所列兩篇文章。
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套件
Linux/Linux 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並存)。
Linux Server初步設定方法
有兩個方式來設定 DNS 參數
1. 在設定管理密碼(Linux-setup)時勾選【這台主機要擔任 DNS Server 嗎 ?】,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔
注意:本方式僅適用於裝完 Linux Server,第一次登入時。因為 Linux-setup 本身會改變很多設定值(不只 dns),若機器已順利運作多時,勿用。
2. 直接在終端機介面下指令
1. 不限遞迴查詢: root@dns~# ols3dns
2. 限制遞迴查詢: root@dns~# ols3dns –no-recursive
3. 以大成國小為例
#—————————————————–#
# 臥龍小三 工 具 箱 (1.0.7Linux) Copyright 2006 OLS3 #
# DNS 自動產生器 1.0.7Linux 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!
Linux初步設定方法
與 Linux Server 一樣,有兩個方式來產生基本的 DNS 設定檔
1. 在設定管理密碼(Linux-csetup-utf8/Linux-csetup)時,在最後一個問題【這台主機要擔任 DNS Server 嗎 ?】回答「Y」,就會在 /etc/bind/ 底下產生不限遞迴查詢的相關設定檔。
注意:本方式僅適用於裝完 Linux Server,第一次登入時。因為 Linux-setup 本身會改變許多設定值,若機器已順利運作多時勿用。
2. 先把終端機的字元編碼改為 Big5 ,再下指令
1. 不限遞迴查詢: root@dns~# ols3dns
2. 限制遞迴查詢: root@dns~# ols3dns –no-recursive
3. 設定過程與上例一樣,請參考上面文件
進階設定
IPv4 的正反解
新增一筆IPv4位址正解
要新增一筆正解記錄只要在正解檔「 /etc/bind/db.xxx.tnc.edu.tw 」內,加上一筆 IN A 的記錄,再把 serial n加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 反解檔
與不限遞迴查詢做法相同,請參考前文