利用BIND9版本的View特性來設置域名的多匹配查詢
查看( 2209 ) /
评论( 3 )
TAG:
-
chengkinhung
发布于2007-10-22 13:11:07
-
實作DNS View范例
----------------------------------------------------------------------------------
(3) 配置BIND 9 DNS Views 的實作案例
----------------------------------------------------------------------------------
【實作環境】
操作系统: Debian 4.1;
BIND版本: BIND 9.3.4;
DNS服务器: 192.168.0.1;
内部IP段: 192.168.0.0/24;
外部IP段: 采用ADSL撥號上網,本次測試時的動態IP是210.209.111.254;
解釋域名: 子域名(hung.mooo.com**鳈C(www.hung.mooo.com);
假設我的域名現在需要針對來自四個不同區域的DNS查詢,分別返回不同的主機IP地址,我計劃
把DNS的配置文件分為如下四個View段落:
本機內網 internal 對應主機IP: 1.1.1.1
中國網通 chinanetcom 對應主機IP: 2.2.2.2
中國電信 chinatelecom 對應主機IP: 3.3.3.3
其他網絡 others 對應主機IP: 4.4.4.4
因為我沒有可用的注冊域名,所以首先要在免費的DNS注冊機構申請一個子域名. 很快就找到了
一個可以提供免費DNS注冊的機構: freedns.afraid.org, 這個網站所提供的注冊服務比較多,
包括了免費的NS記錄(其他大部分免費注冊機構都不提供NS記錄的注冊).
因為我的測試主機是用撥號上網的, IP是動態地址, 所以下面的注冊資料只是臨時測試使用的.
在本次測試中,我先注冊了一個A記錄(ns-hung.mooo.com),并將這個A記錄指向我的撥號上網的
主機IP(210.209.111.254); 然后再注冊一個用來委派子域的NS記錄, 我將這個測試用的子域
命名為hung.mooo.com,顧名思義,注冊子域名的NS記錄,當然需要指定一個NS(名稱服務器)地址,
而且NS地址不能用動態IP地址,所以就用前面剛剛注冊的A記錄作為本子域的NS服務器地址.
注冊資料是立即生效的(效率不錯),看看注冊結果:
dig ns-hung.mooo.com @ns1.afraid.org; #這是A記錄;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; <<>> DiG 9.3.4 <<>> ns-hung.mooo.com @ns1.afraid.org
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23072
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 4
;; QUESTION SECTION:
;ns-hung.mooo.com. IN A
;; ANSWER SECTION:
ns-hung.mooo.com. 3600 IN A 210.209.111.254
;; AUTHORITY SECTION:
mooo.com. 86400 IN NS ns1.afraid.org.
mooo.com. 86400 IN NS ns2.afraid.org.
mooo.com. 86400 IN NS ns3.afraid.org.
mooo.com. 86400 IN NS ns4.afraid.org.
;; ADDITIONAL SECTION:
ns1.afraid.org. 1800 IN A 67.19.72.206
ns2.afraid.org. 1800 IN A 66.252.1.255
ns3.afraid.org. 1800 IN A 72.20.25.134
ns4.afraid.org. 1800 IN A 67.18.179.15
;; Query time: 205 msec
;; SERVER: 67.19.72.206#53(67.19.72.206)
;; WHEN: Sun Oct 21 17:45:50 2007
;; MSG SIZE rcvd: 196
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dig hung.mooo.com NS @ns1.afraid.org; #這是NS記錄;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
; <<>> DiG 9.3.2 <<>> hung.mooo.com NS @ns1.afraid.org
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45228
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; QUESTION SECTION:
;hung.mooo.com. IN NS
;; AUTHORITY SECTION:
hung.mooo.com. 3600 IN NS ns-hung.mooo.com.
;; ADDITIONAL SECTION:
ns-hung.mooo.com. 3600 IN A 210.209.111.254
;; Query time: 119 msec
;; SERVER: 67.19.72.206#53(67.19.72.206)
;; WHEN: Sun Oct 21 22:36:25 2007
;; MSG SIZE rcvd: 69
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
【尋找測試IP】
注冊好子域的NS記錄之後,這個子域就被委派到我的撥號上網主機(即ns-hung.mooo.com),我用
免費的Vmware Server開設了一臺Linux機器,安裝的是Debian4.1版本,并且使用了預設的BIND9
來設置DNS服務器.
但是, 在主機上開始設置新子域(hung.mooo.com)之前, 還需要預先準備一些必不可少的資料,
也就是需要先尋找一些可用的IP段落, 用于在DNS的View中設置查詢的匹配條件. 而且當配置
完成之后還需要進行分布式的實驗測試, 但是因為環境條件所限制,我不可能操縱每個地區的
主機來真實地查詢測試一遍, 因此還必須利用DNS服務器的分布式特點來完成測試任務.
眾所周知, DNS服務器能夠完成遞歸查詢任務, 也就是替代客戶完成查詢結果. 事實上, 目前
絕大部分的ISP機構所提供的公用DNS服務器都是緩存服務器,也就是說它們自己本身沒有設置
域名的區域資料, 只是在客戶提出某個域名的查詢要求的時候,才會即時開始逐級查詢該域名
的注冊資料. 當最終獲得真正擁有這個域名的名稱服務器(NS)的主機地址之后(通常一個域名
都是指定了兩臺名稱服務器,有時稱它們為Master和Slave),再向這個名稱服務器的DNS服務器
發出該域名的查詢請求,然后才將所獲得的記錄緩存起來以供客戶下次查詢.
當使用命令行工具dig和nslookup來查詢某個域名的時候,都可以手工指定某個DNS服務器作為
請求查詢的對象(具體使用方法請參考后面的測試范例), 也就是說由指定的DNS服務器去執行
遞歸或替代查詢,這就等效于從該DNS服務器直接發出的查詢請求. 因此,我們只要針對IP段落
來尋找該段落中公用的DNS服務器,然后再指定用此服務器來進行查詢,那么就可以得出分布式
的測試結果了.
如前所述,這臺DNS服務器需要分為四個View段落, 每個段落分別處理不同的IP段落范圍的查詢
要求. 為了方便后面進行測試, 這里先選擇幾個公用的DNS服務器,然后再通過在線工具查找出
這幾個DNS服務器的IP所屬的段落. 我在網絡上隨機搜尋, 分別挑選了幾個DNS服務器, ping出
它們的IP地址, 然后再分別用在線的IP查詢工具找出它們所屬的網段區域和網絡公司. 這些IP
及其所查找到的地理位置資料如下:
#這是屬于網通網絡的DNS服務器,將會用于DNS的View中的chinanetcom匹配條件:
ns.163.net 202.108.255.201 202.108.0.0/16 網通 北京
ns1.ehttp.com.cn 218.57.8.171 218.56.0.0/14 網通 山東
fjxm.cncnet.net 218.104.128.70 218.104.128.0/20 網通 福建
#這是屬于電信網絡的DNS服務器,將會用于DNS的View中的chinatelecom匹配條件:
dns2.cs.hn.cn 202.103.96.112 202.103.96.0/23 電信 長沙
ns.chinanet.cn.net 202.97.7.6 202.97.0.0/19 電信 四川
dns3.xj163.cn 61.128.99.133 61.128.96.0/19 電信 新疆
#海外網絡的DNS服務器,因為DNS的View中的others匹配any條件,所以這些DNS只供測試時使用:
ns3.netvigator.com 218.102.23.228 218.102.0.0/15 NETVIGATOR 香港
為了更準確定位, 還可以使用了一些網上所提供的在線IP定位工具, 來查找上述IP的地區分布
信息. 但是, 考慮到在線工具的數據庫未必完全準確, 這里所提供的IP地址資料僅能供臨時的
測試用途, 讀者如果需要在實際應用中使用, 建議參考更權威更可靠的資料來源. 如下是我用
來在線查找和定位IP地址的工具:
http://www.arin.net/whois/
http://wq.apnic.net/apnic-bin/whois.pl
http://www.linkwan.com/gb/broadmeter/VisitorInfo/QureyIP.asp
根據上述查找出來的結果, 現在可以定出DNS的各個View段落中所對應的IP范圍了. 另外還要
請留意的是, 這里只為測試目的而列舉部分IP段落,當然在現實環境中實際應用的IP段落遠遠
不止這幾個段落. 為了方便整理和學習,我把這里的測試段落定義列表如下:
本機內網(internal) { localhost; 192.168.0.0/24; };
中國網通(chinanetcom) { 202.108.0.0/16; 218.56.0.0/14; 218.104.128.0/20; };
中國電信(chinatelecom) { 202.103.96.0/23; 202.97.0.0/19; 61.128.96.0/19; };
其他網絡(others) { any; };
[ 本帖最后由 chengkinhung 于 2007-11-1 11:43 编辑 ]
-
chengkinhung
发布于2007-10-22 13:13:54
-
測試結果
【設定BIND配置文件】
定義好IP段落參數後,就可以開始設置BIND的配置文件了,為了簡化配置文檔,我將原文檔中的
默認的根域設置, 獨立設置一個文件, 命名為named.conf.root, 然后在每個view里面調用它
這樣就無需象以前的例子中那樣,要在每一個View段落中都放置一長串根域的定義了, 因此我
只需要在named.conf.root文件中定義一次根域就可以了. 基于同樣道理,也可以把關于BIND
的所有的options段落也放置在公共部分, 例如相關的allow-query和allow-transfer的設置,
請參考之前的范例, 這里不再贅述.
請注意: 如果在BIND中啟用了View的話, 那么全部區域(包括根域)都必須放置在View里面,而
不能在公共部分設置區域(否則BIND雖然會正常啟動,但日志中會出現相關警告信息).
如下是我的named.conf配置文檔的View段落的內容, 請參考:
vi /etc/bind/named.conf; #這是BIND的配置文件(省略了部分內容);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
view "internal" {
match-clients { localhost; 192.168.0.0/24; };
include "/etc/bind/named.conf.root";
zone "hung.mooo.com" IN {
type master;
file "/etc/bind/db.hung.mooo.com.internal";
};
};
view "chinanetcom" {
match-clients { 202.108.0.0/16; 218.56.0.0/14; 218.104.128.0/20; };
include "/etc/bind/named.conf.root";
zone "hung.mooo.com" IN {
type master;
file "/etc/bind/db.hung.mooo.com.chinanetcom";
};
};
view "chinatelecom" {
match-clients { 202.103.96.0/23; 202.97.0.0/19; 61.128.96.0/19; };
include "/etc/bind/named.conf.root";
zone "hung.mooo.com" IN {
type master;
file "/etc/bind/db.hung.mooo.com.chinatelecom";
};
};
view "others" {
match-clients { any; };
include "/etc/bind/named.conf.root";
zone "hung.mooo.com" IN {
type master;
file "/etc/bind/db.hung.mooo.com.others";
};
};
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
設置好DNS的配置文件后,接著就要建立子域的區域文件了. 從配置文件中可以看出, 這個子域
需要分別建立四個區域文件, 以提供四種匹配情況下的查詢結果. 這里因為測試目的, 只在該
子域下面添加了一項A記錄,域名為www.hung.mooo.com. 如前所述,我需要分別設置這四個區域
文件的內容, 以應用于各自的View段落的查詢要求. 為了方便觀察和測試, 我將要它們的對應
關系列表如下:
db.hung.mooo.com.internal 從 本機內網(internal) 查詢將返回IP: 1.1.1.1
db.hung.mooo.com.chinanetcom 從 中國網通(chinanetcom) 查詢將返回IP: 2.2.2.2
db.hung.mooo.com.chinatelecom 從 中國電信(chinatelecom) 查詢將返回IP: 3.3.3.3
db.hung.mooo.com.others 從 其他網絡(others) 查詢將返回IP: 4.4.4.4
各個區域文件的詳細內容請分別參考如下:
vi /etc/bind/db.hung.mooo.com.internal; #這是用于內網的區域文檔;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$TTL 4320 ; 1 hour 12 minutes
@ IN SOA ns-hung.mooo.com. root.ns-hung.mooo.com. (
2007102001 ;
3600 ;
1800 ;
36000 ;
600 ) ;
IN NS ns-hung.mooo.com.
www.hung.mooo.com. IN A 1.1.1.1
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vi /etc/bind/db.hung.mooo.com.chinanetcom; #這是用于網通的區域文檔;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$TTL 4320 ; 1 hour 12 minutes
@ IN SOA ns-hung.mooo.com. root.ns-hung.mooo.com. (
2007102001 ;
3600 ;
1800 ;
36000 ;
600 ) ;
IN NS ns-hung.mooo.com.
www.hung.mooo.com. IN A 2.2.2.2
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vi /etc/bind/db.hung.mooo.com.chinatelecom; #這是用于電信的區域文檔;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$TTL 4320 ; 1 hour 12 minutes
@ IN SOA ns-hung.mooo.com. root.ns-hung.mooo.com. (
2007102001 ;
3600 ;
1800 ;
36000 ;
600 ) ;
IN NS ns-hung.mooo.com.
www.hung.mooo.com. IN A 3.3.3.3
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
vi /etc/bind/db.hung.mooo.com.others; #這是用于海外的區域文檔;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
$TTL 4320 ; 1 hour 12 minutes
@ IN SOA ns-hung.mooo.com. root.ns-hung.mooo.com. (
2007102001 ;
3600 ;
1800 ;
36000 ;
600 ) ;
IN NS ns-hung.mooo.com.
www.hung.mooo.com. IN A 4.4.4.4
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
【測試與結果】
全部配置文檔都設置好之後, 請重新啟動BIND9: /etc/init.d/bind9 restart;
然后用dig命令測試結果,這里的dig命令要帶上 @dns-server參數,用于指定從某臺DNS服務器
查詢, 也就是是分別用前面所查找到的DNS服務器來做測試. 下面列出的是我進行測試的部分
結果, 為了簡化版面, 有些測試結果省略了返回信息中的部分內容. 測試結果請參考如下:
dig www.hung.mooo.com @ns-hung.mooo.com; #這是從本地查詢的結果(省略部分內容);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
;; QUESTION SECTION:
;www.hung.mooo.com. IN A
;; ANSWER SECTION:
www.hung.mooo.com. 4320 IN A 1.1.1.1
;; AUTHORITY SECTION:
hung.mooo.com. 4320 IN NS ns-hung.mooo.com.
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dig www.hung.mooo.com @202.108.255.201; #這是從網通來查詢的結果(省略部分內容);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
;; ANSWER SECTION:
www.hung.mooo.com. 4203 IN A 2.2.2.2
;; AUTHORITY SECTION:
hung.mooo.com. 4203 IN NS ns-hung.mooo.com.
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dig www.hung.mooo.com @202.97.7.6; #這是從電信網絡來查詢的結果(省略部分內容);
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
;; ANSWER SECTION:
www.hung.mooo.com. 4090 IN A 3.3.3.3
;; AUTHORITY SECTION:
hung.mooo.com. 4090 IN NS ns-hung.mooo.com.
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
dig www.hung.mooo.com @ns3.netvigator.com; #這是從香港的netvigator的查詢結果;
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
...
;; ANSWER SECTION:
www.hung.mooo.com. 481 IN A 4.4.4.4
;; AUTHORITY SECTION:
hung.mooo.com. 546 IN NS ns-hung.mooo.com.
...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
請注意,由于有些DNS服務器可能會設置轉發查詢器(FORWARDERS),而轉發服務器的地址并未在
匹配地址中的話,查詢結果就會同預期不相同. 另外,因為我的測試子域名是在海外注冊的,而
國內部分網絡供應商的DNS不允許境外查詢. 若遇到這種情況的話,那么通過它們的DNS服務器
根本連我的主機A記錄(ns-hung.mooo.com)和子域的NS記錄(hung.mooo.com)都找不到,更不用
說查找該子域名下的域名記錄(www.hung.mooo.com)了.
[ 本帖最后由 chengkinhung 于 2007-11-1 11:51 编辑 ]
-
luren04发布于2008-04-23 10:32:18
-
建议转为简体的容易看一些。
