架设DNS服务器BIND设置详解
发布时间:2019-05-12

 設定 /etc/named.conf檔案

1. acl : 定義一份IP位址對應清單,以利存取時的控制。
2. options :控制通用的伺服器組態,設定其他選項的預設值。
3. controls :宣告使用ndc程式時控制的方式。
4. zone :定義zone,所謂zone是只DNS伺服器管理時的邏輯單位, 例如 *.twnic.net或 *.dns.twnic.net在每個區域中至少須存在一部DNS伺服器。
Bind 的主要設定檔為 named.conf,因此Bind執行時會去讀取此執行檔。而 named.conf的功能是由於每部 name server 主要是負責某些特定 zone 中有關機器的 domain name,IP 的查詢、127.0.0.1 本機 IP 的查詢,除此之外,name server 也需要知道要怎樣去找 root name server。因此 named.conf 便會指出該 name server 管轄的網域名稱及相關檔案存取的位置及名稱。
 
named.conf 檔案主要的內容包含4個部分,分別為:
 
options
關於 .(root) 的內容
關於 localhost 的正反解
關於其他 domain 的正反解
我們先看一個完整的 named.conf 的檔案:
acl internals { 192.168.10.0/24; };
options {
directory “/var/named”;
allow-transfer{ 192.168.11.7;
internals;
};
};
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
zone “.” { //.(root) 的內容
type hint;
file “named.ca”;
};
zone “localhost”{ //localhost 的正解
type master;
file “localhost.zone”;
};
zone “0.0.127.in-addr.arpa”{ //localhost 的反解
type master;
file “named.local”;
};
zone “twnic.com.tw”{ //使用者domain的正解
type master;
file “twnic.hosts”;
};
zone “10.168.192.in-addr.arpa”{ //使用者domain的反解
type master;
file “twnic.rev”;
};
 
由上例關於 named.conf 的設定檔中可分為許多不同的類型,不同類型皆由{}包起來,以下說明不同設定的類型。
 
1. acl : 定義一份IP位址對應清單,以利存取時的控制。
e.g.
 
acl internals { 192.168.10.0/24; };
 
定義IP位址清單範圍為192.168.10.0/24,而”internals”為使用者可自行定義的 acl 名稱,設定acl後對於之後相關存取設定時 (e.g. allow-query、allow-transfer…等等),便可直接使用 acl 名稱來代表之前所設定的IP範圍。
 
2. options :控制通用的伺服器組態,設定其他選項的預設值。
e.g.
 
options {
directory “/var/named”;
allow-transfer{ 192.168.11.7;
internals;
};
 
表示將 named 的區域紀錄檔(zone file)儲存在 /var/named 的目錄中,也就是Bind伺服器中所有DNS紀錄檔案都集中於此。此外,在往後的”DNS Server型態”中會提到的forwarder,其設定也是加在options內。
 
至於 allow-transfer 選項,它指定 DNS 對於特定 IP 位址的 zone transfer。 舉例來說, 我們允許 IP 位址為192.168.11.7和 IP 範圍192.168.10.0/24(由acl定義名稱為”internals”,於之後介紹acl)的主機(可能是我們網域上的一個次要 DNS伺服器)請求 zone transfer。如果您漏了這個選項,位於 Internet 的任何人都可以請求這個轉換。
 
3. controls :宣告使用ndc程式時控制的方式。
e.g.
 
controls {
inet 127.0.0.1 allow { localhost; } keys { rndckey; };
};
 
其中”inet”表示利用TCP/IP Socket來存取Internet資源,它是由指定的”ip_addr”(IP address)和”ip_port”(ip_port)所產生,而此處表示可允許本機(localhost)利用鍵值(rndckey)進行存取,此設定會在”DNS server 安全防護”中有詳細的說明。
 
4. zone :定義zone,所謂zone是只DNS伺服器管理時的邏輯單位, 例如 *.twnic.net或 *.dns.twnic.net在每個區域中至少須存在一部DNS伺服器。
e.g.
 
zone “.” {
type hint;
file “named.ca”;
};
 
定義“.”,Internet DNS 最上層的位置,而 file “named.ca”指定了其記錄檔(zone file)名稱。記錄檔都存放在 /var/named 這個目錄下面,也就是前面 options 指定的 directory。
e.g.
 
zone “twnic.com.tw”{
type master;
file “twnic.hosts”;
};
 
定義 twnic.com.tw 這個網域,是網域的正解設定,而其型態(type)是master DNS server,指定區域紀錄檔(zone file)為”twnic.hosts”。
e.g.
 
zone “10.168.192.in-addr.arpa”{
type master;
file “twnic.rev”;
};
 
這個部份就和上述的設定是相互配合的,是網域的反解設定。要特別注意的是 in-addr.arpa 是固定的定義格式,不可改變。而在設定反查詢區域的時候﹐您一定要將您的 net ID 部份反過來寫。例如﹕本地網路為192.168.0.0/24 ﹐它的反查詢區域名則是﹕“0.168.192.in-addr.arpa”﹔如果我將 netmask 改為16bit﹐即192.168.0.0/16﹐它的反查詢區域名就會變成﹕“168.192.in-addr.arpa”。
設定 /etc/resolv.conf 檔案
此檔案可用來設定 DNS 用戶端要求名稱解析時,所定義的各項內容。我們分別來看一個完整的resolv.conf的檔案:
 
domain twnic.com.tw
nameserver 192.168.10.1
nameserver 192.168.2.5
search twnic.com.tw twnic.net.tw
 
“domain”指定本地的網域名稱,如果查詢時的名稱沒有包含小數點,則會自動補上此處的網域名稱為字尾再送給DNS伺服器。
“nameserver”指定用戶端要求進行名稱解析的 nameserver IP位址,在此可指定多部DNS伺服器,則用戶端將會依序提出查詢要求。
“search”這個選項為非必要選項,而功能在於若使用者指定主機名稱查詢時,所需要搜尋的網域名稱。例如,當我們設 “search twnic.com.tw”時,當DNS伺服器在做名稱解析過程中,無法對輸入的名稱,例如pc1,找出相對應的IP時,則DNS會利用search的設定值加上需查詢的名稱,即pc1.twnic.com.tw來進行解析,解析失敗時則會嘗試pc1.twnic.net.tw。
需要注意的是當我們想嘗試多種在沒有包含小數點,於字尾補上所需要搜尋的網域名稱時,我們會在”search”中指定幾種組合給DNS伺服器,而不能在”domain”中指定。因為“domain”是指定本地的網域名稱,而搜尋時也以“domain”為優先嘗試,如果失敗之後才會嘗試”search”中的組合。
DNS server型態(type)
設定 master/slave server
設定 hint
設定 master
設定 slave
設定 forwarder
在bind的設定檔named.conf中,可設定的伺服器型態共有5種:
 
master: 主要伺服器,在網域中負責名稱解析。
slave: 為了避免master發生故障時影響網路上的名稱解析工作,可以安裝其他的DNS伺服器,並且會定期複製master中的資料。
stub: 與slave類似,但只會複製master的NS紀錄,而非所有區域(zone)資訊。
hint: 表示為root伺服器。
forward: 可將來自用戶端的名稱解析要求代為轉送至其他伺服器。
 
設定master/slave server
透過 master 和 slave 的架構,要進行資料變更的時候﹐只需在 master上面 維護就好,然後 slave 會定期的自動過來將更新資料同步回去。而slave 會在 refresh 時間到達的時候,就嘗試和 master 進行資料同步的動作,這在 DNS 系統裡面有一個專門術語﹐叫做“zone transfer”(區域轉移)。
 
設定hint:
e.g.
 
zone “.” { // 表示這是對於.(root)的解析。
type hint; // 型態為hint。
file “named.ca”; // 讀取的檔案為named.ca
};
 
設定master:
e.g.
 
zone “twnic.com.tw”{
type master;
file “named.cs”;
};
 
設定slave:
e.g.
 
zone “mlc.com.tw” {
type slave;
file “slave/slave.mlcnet”;
masters { 163.19.163.7; };
};
 
slave的設定只不過將type master改為slave並額外加入master的IP位址。
 
設定forwarder
我們除了能夠用 slave 來分擔 master 工作、減少網路流量之外,還可以透過 另外一種 DNS 機制來減低網路流量的,那就是 forwarder 設定了。 所謂的 forwarder,就是當某一台name server主機遇到非本機負責zone之查詢請求的時候,將不直接向 root zone 查詢而把請求轉交給指定的forwarder (一台或多台) 主機代為查詢。 如果name server上面指定了 forwarder,那這個name server發現 cache 沒 有記錄的話,將不向 root 查詢,而是將自己扮成一個 client,向 forwarder 送 出同樣的請求,然後等待查詢結果;而逐級往下查詢的動作,則交由 forwarder 負責﹐name server自己就輕鬆多了。但無論這個結果是自己直接查詢得來的﹐還是 forwarder 送回來的,name server都會保存一份資料在 cache 中。這樣,其後的相同查詢就快多了,這對於name server所服務的 client 而言更是有效率得多。
 
options {
…..
forwarders {
139.175.10.20; //設定forwarder的IP位址
168.95.1.1; };
};
設定 /etc/named/named.ca(named.root)檔案
此檔案為ROOT伺服器位址設定檔案,在DNS的名稱解析流程中,如果DNS伺服器的資料庫沒有包含所要求的紀錄,則此伺服器首先會要求ROOT伺服器解析有關網域的類型 (即是FQDN中最右邊的部分),因此是個很重要的一個檔案,而本檔案應定期更新,請至ftp://rs.internic.net/domain 下載 “named.root”檔案。檔案預設內容如下:
 
; This file holds the information on root name servers needed to
; initialize cache of Internet domain name servers
; (e.g. reference this file in the “cache . ”
; configuration file of BIND domain name servers).
;
; This file is made available by InterNIC
; under anonymous FTP as
; file /domain/named.root
; on server FTP.INTERNIC.NET
;
; last update: Nov 5, 2002
; related version of root zone: 2002110501
;
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
;
; formerly C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
;
; operated by VeriSign, Inc.
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30
;
; housed in LINX, operated by RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
;
; operated by IANA
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
;
; housed in Japan, operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
; End of File
 
在檔案中行首出現”;”符號,表示該行內容為註解,此外以”.”為首的13個設定內容(E.g. 3600000 IN NS A.ROOT-SERVERS.NET.),則表示13個 root 名稱伺服器的名稱,而每筆皆由4個欄位所組成,’3600000′是TTL(Time To Live),也就是此紀錄在快取中保留的時間(秒)。’IN’表示這是一個 internet 地址類型,’NS’是”Name Server”的縮寫,它是DNS資源紀錄的一種類型,而其後的”A.ROOT-SERVERS.NET.”就是表示伺服器的FQDN。其後緊接著另一紀錄(E.g. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4)則是紀錄此伺服器名稱所對應的IP,’A'也是資源紀錄的一種類型,之後會有資源紀錄的詳細介紹。
設定 /etc/named/localhost.zone檔案
這是第2個紀錄檔,包含許多DNS伺服器運作和設定上的重要項目。此檔案的預設內容如下:
 
$TTL 86400
$ORIGIN localhost.
@ 1D IN SOA @ root (
42 ; serial (d. adams)
3H ; refresh
15M ; retry
1W ; expiry
1D ) ; minimum
 
1D IN NS @
1D IN A 127.0.0.1
 
第一行是一個 TTL 設定,目前是定義這個記錄檔裡面的資源紀錄(Resource Record)在cache中保留的時間,預設 TTL 值為 86400 秒(剛好是一天)。在記錄檔中宣告的所有資源記錄(Resource Record),都一定有一個 TTL 設定,如果沒有,則使用這裡預設的值。注意 TTL 後面所接的時間須以”秒”為單位,
 
第二行是一個 ORIGIN 設定,說明下面的記錄源出何網域(這裡是源出 localhost. 的記錄)。請您留意最後的一個小數點”.”,它在DNS紀錄中表示全域名稱,也就是FQDN。如果在前面找不到 $ORIGIN 宣告,那就以 /etc/named.conf 中定義的 zone 名稱為基準。
 
第三行,是一個 SOA 記錄的設定,在這裡我們看到一個特殊字符“ @ ”,它就是 ORIGIN 的意思,也就是剛才所定義的 $ORIGIN localhost. 內容,您可以寫成 localhost. 也可以用 @ 來代替。 在 @ 之後,是 TTL 的設定,這裡是 1D,也就是一天的意思,如果這裡的 TTL 沒有設定,則套用前面的 $TTL 值,如果前面沒有定義 $TTL,那就參考其後介紹的 minium ttl 設定。
 
在TTL之後的”IN”是表示目前紀錄類型是屬於Internet類別。
 
在SOA後面的內容,是指此區域的授權主機和管理者電子郵件信箱。因為“@”在 DNS 記錄中是個保留字,所以在 SOA 中就用“.”來代替了“ @ ”。目前這個信箱是 root. 沒有指定主機位址,也就是本機,可以寫成 “root.localhost.”但不能寫成“root@localhost.”。
 
root後括號”()”內的設定在之後的DNS資源紀錄有詳細介紹。
 
“1D IN NS @”,表示一筆NS紀錄,指出本地網域的名稱伺服器為localhost.(@)。
 
“1D IN A 127.0.0.1″,表示一筆A紀錄,指出本地網域的名稱伺服器所對應的IP為127.0.0.1。
設定 /etc/named/named.local檔案
這個紀錄檔是指”0.0.127.in-addr.arpa”區域的反解紀錄檔。此檔案的預設內容如下:
 
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
 
1 IN PTR localhost.
 
以上檔案與之前介紹的localhost.zone檔案類似,不一樣的地方是在最後一行。它是一筆”PTR”紀錄,也就是反向解析的紀錄,它與”A”的功能剛好相反。
 
在說明最後一行之前,先解釋”in-addr.arpa”,此為DNS在標準中定義的特殊網域,藉以提供可靠的反向查詢方法。
 
127.0.0.1所對應的主機名稱為localhost,因為這裡是反向查詢,所以 IP 順序是倒過來寫的,於是這個反查詢 IP 就是”1.0.0.127.in-addr.arpa.”。 由於此處的ORIGIN(@)定義為”0.0.127.in-addr.arpa.”,所以在紀錄檔中如果名稱沒有包含小數點,則會自動補上$ORIGIN或是網域名稱的字尾。因此,最後一行的開始為”1″,其實就是”1.0.0.127.in-addr.arpa.”的意思。
DNS資源紀錄(Resource Record)介紹
類型
SOA
NS
A
AAAA
PTR
CNAME
MX
SOA設定內容說明
Serial
Refresh
Retry
Expire
Minimum
DNS server內的每一個網域名稱都有自己的檔案,這個檔案一般會稱為區域檔案 (zone file),例如之前所提到的”named.ca”或”named.local” 檔案…等等。區域檔案是由多個記錄組成的,每一個記錄稱為資源記錄(Resource Record,簡稱RR)。當在設定DNS名稱解析、反向解析及其他的管理目的時,您需要使用不同類型的RR,底下將介紹常用的RR類型及表示法。
 
類型
 
SOA
Start Of Authority,這種 record 放在 zone file 一開始的地方,每一個記錄檔只能有一個 SOA,而且一定是檔案中第一個“記錄”,它描述這個 zone 負責的 name server,version number…等資料,以及當 slave server 要備份這個 zone 時的一些參數。 緊接在 SOA 後面指定了這個區域的授權主機和管理者的信箱,這裡分別是 “school.edu.tw” 和” root.school.edu.tw”,也就是school.edu.tw主機和 root 的信箱。這裡要注意的是我們以”root.school.edu.tw”代表”root@school.edu.tw”
e.g.
 
@ IN SOA school.edu.tw. root.school.edu.tw. (
1999051401 ; Serial
3600 ; Refresh
300 ; Retry
3600000 ; Expire
3600 ) ; Minimum
 
在兩個括號中間的選項表示SOA的設定內容,底下會有更詳細的說明。
 
NS
name server,用來指定操作的DNS伺服器主機名稱,需注意的是不可以IP位址表示。
e.g.
 
IN NS dns.twnic.net.tw.
 
A
address,將DNS網域名稱對應到IPv4的32位元位址。
e.g.
 
server IN A 140.123.102.10
 
AAAA
可將DNS網域名稱對應到IPv6的128位元位址。
e.g.
 
twnic.net.tw. 86400 IN AAAA 3ffe: :bbb:93:5
 
PTR
pointer,定義某個 IP 對應的 domain name,即將 IP 位址轉換成主機的FQDN。
e.g.
 
20 IN PTR mail.twnic.net.tw.
 
CNAME
canonical name,可為同一部主機設定許多別名,例如 mix.twnic.net.tw的別名可為 www.twnic.net.tw和 ftp.twnic.net.tw,因此所設定的別名都會連至同一部伺服器。
e.g.
 
www IN CNAME mix
 
MX
mail exchanger,設定區域中擔任郵件伺服器的主機,所有要送往那部機器的 mail 都要經過 mail exchanger 轉送。而數字則是該主機郵件傳遞時的優先次序,此值越低表示有越高的郵件處理優先權。
e.g.
 
server IN MX 10 mail.twnic.net.tw.
 
SOA設定內容說明
SOA record,以之前例子來看,其中 @ 這個符號是縮寫,代表 named.conf 中這個 zone file 所對應的 zone。 SOA 後面的兩個參數是指這個 zone file 是在哪部主機 (school.edu.tw)定義的,以及這個 zone file 的負責人 (注意是寫成 root.school.edu.tw),然後是用括號括起來的 5 個參數, 分別由底下說明。
 
Serial
代表這個 zone file 的版本,每當 zone file 內容有變動,name server 管理者就應該增加這個號碼,因為 slave 會將這個號碼與其 copy 的那份比對以便決定是否要再 copy 一次 (即進行 zone transfer)。
 
Refresh
slave server 每隔這段時間(秒),就會檢查 master server 上的 serial number。不過這裡會發生一個問題就是,在 master server 在 update data 完成到 slave server 來檢查時再 update 可能還有 好一段時間,因此這段期間 master/slave DNS server間 zone files 就可能出現不一致。所以在Bind較新的版本中便加入”notify”功能,使用者在 “named.conf” 設定中在需要的 zone 中加入”notify”的設定,則 master server在 update 完成某個 zone file 的 data 後便會主動發個訊息(NOTIFY),藉以通知該其它的 slave servers,因此如果 slave servers 也有支援這個”notify”功能時,接下來 slave servers 馬上就可以做 zone transfer 來update data。
e.g.
 
zone “twnic.com.tw” {
type master;
file “twnic.hosts”;
notify yes;
also-notify { 192.168.10.1; }; //指定slave server的IP位址
};
 
Retry
當 slave server 無法和 master 進行 serial check時,要每隔幾秒 retry 一次。
 
Expire
當時間超過 Expire 所定的秒數而 slave server 都無法和 master 取得連絡,那麼 slave 會刪除自己的這份 copy。
 
Minimum
代表這個 zone file 中所有 record 的內定的 TTL 值,也就是其它的 DNS server cache 這筆 record 時,最長不應該超過這個時間。
公司名称:六安市金狮网络技术有限公司
公司地址:安徽省六安市金安区皖西大道红叶大厦802A
联系电话:0564-3214800 手机:13956148092 邮箱:120907442@qq.com QQ:120907442 / 1099497647
手机访问