利用BIND9版本的View特性來設置域名的多匹配查詢
chengkinhung
|
1#
chengkinhung 发表于 2007-10-22 13:05
利用BIND9版本的View特性來設置域名的多匹配查詢
----------------------------------------------------------------------------------
(1) 配置BIND 9 DNS Views 的原理和需求 ---------------------------------------------------------------------------------- DNS服務器最基本的任務就是響應域名的查詢,返回該域名的地址資料. 在DNS服務器中將一個 域名分成內部與外部做不同的View解析, 可以提升安全性,以及分類應付不同區域的查詢請求. 例如您的單位需要分成內部網和外部網,希望將同一個域名解析為不同的IP地址, 以提高安全 防護的目的, 或者應付不同業務的應用; 又比如您需要將業務按地域來劃分,打算在各個地區 分別設置各自的主機來處理訪問請求(或者單機雙線也適用),以圖解决中国南北網(电信/网通) 互不相通所導致的速度差异之问题,希望將電信用戶解釋到由電信網絡所提供的IP地址上, 而 網通用戶則解釋到由網通網絡所提供的IP地址上; 要實現將來自不同地域(用IP段來標識)的請求, 自動引導到不同區域的主機,可以采用域名的 多解釋方法來簡單實現. 在BIND9中有個新的view指令可以完成達到這個目的, 方法就是設置 多個view段落來響應同一個域名的查詢請求. 只需要在每個view段落的match-clients項目中, 設置所需匹配的客戶端IP段落, 并且在每個段落中都設置該域名的區域資料,但不同的view則 指向不同的區域文件, 然后在各自的區域文件中分別設置相應的區域內容,這樣就可以達到按 請求者的IP段落,來分別響應并提供不同的查詢結果了. 針對訪問者不同的IP段,來解釋主機域名的相應的IP地址, 也可以輕易實現負載均衡或者化解 地區局限. 舉個例子來說, 目前國內的網絡因為種種原因,同外部網絡的連線經常出現不穩定 的狀況,造成從大陸內部無法訪問外部,而外部也無法訪問內部,尤其是導致電郵收發異常緩慢 甚至丟失反彈,非常令人頭疼. 而且很多時候造成這種不穩定的因素, 還常常是源自于國家級 主干網絡的非技術性故障,這就很難從主機供應商方面尋求解決問題的方案. 如果要徹底解決 這個問題的話, 那么一個可能的方案就是按地域來劃分業務. 例如,分別在不同地區設置一臺 主機(假設在北京設置一臺主機,在廣州設置一臺主機,在香港設置另一臺主機),然后就可設法 將大陸內部北方的客戶引導到北京(網通)的主機, 將南方的客戶引導到廣州(電信)的主機,而 將海外的客戶則引導到香港的主機. 請注意: view指令是BIND 9的新功能, BIND 8以前的版本無此功能; ---------------------------------------------------------------------------------- ---------------------------------------------------------------------------------- (2) 配置BIND 9 DNS Views 的實驗范例 ---------------------------------------------------------------------------------- 【實驗環境】 操作系统: Debian 4.1; BIND版本: BIND 9.3.4; DNS服务器: 192.168.0.8; 内部IP段: 192.168.0.0/24; 外部IP段: 除192.168.0.0/24之外的所有IP; 解釋域名: mytest.com; 希望内部IP和本機IP(192.168.0.8)所解析到www.mytest.com的IP地址为1.1.1.1; 希望外部IP段(192.168.0.7和192.168.0.17)则解析到2.2.2.2; 希望其他IP段(我的測試IP是192.168.0.2)則解釋到3.3.3.3; 【BIND9的配置文件】 vi /etc/bind/named.conf; # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - include "/etc/bind/named.conf.options"; view "internal" { match-clients { localhost; 192.168.0.8; }; match-destinations { any; }; recursion yes; allow-query { localhost; 192.168.0.0/24; }; allow-transfer { 192.168.0.7; }; include "/etc/bind/named.internal.zones"; include "/etc/bind/named.conf.local"; }; view "external" { match-clients { 192.168.0.7; 192.168.0.17; }; match-destinations { any; }; recursion yes; allow-query { any; }; allow-transfer { 192.168.0.7; }; include "/etc/bind/named.external.zones"; include "/etc/bind/named.conf.local"; }; view "others" { match-clients { any; }; match-destinations { any; }; recursion yes; allow-query { any; }; allow-transfer { 192.168.0.7; }; include "/etc/bind/named.others.zones"; include "/etc/bind/named.conf.local"; }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 請注意: 各個View指令的應用是按先后順序執行的,即是按首先符合的條件返回結果,例如本地 請求首先符合第一View指令, 則返回結果,不再檢查其他的View; 來自192.168.0.7的請求符合 第二個View指令, 則返回結果, 不再檢查后面的View; 所以,如果要在該View的match-clients 中設置任何條件(即any)的話, 就必須將這個View擺在最后面, 而絕不能放在其他View的前面. vi /etc/bind/named.internal.zones; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "mytest.com" IN { type master; file "/etc/bind/mytest.com.internal"; }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vi /etc/bind/named.external.zones; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "mytest.com" IN { type master; file "/etc/bind/mytest.com.external"; }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vi /etc/bind/named.others.zones; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - zone "." { type hint; file "/etc/bind/db.root"; }; zone "localhost" { type master; file "/etc/bind/db.local"; }; zone "127.in-addr.arpa" { type master; file "/etc/bind/db.127"; }; zone "0.in-addr.arpa" { type master; file "/etc/bind/db.0"; }; zone "255.in-addr.arpa" { type master; file "/etc/bind/db.255"; }; zone "mytest.com" IN { type master; file "/etc/bind/mytest.com.others"; }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vi /etc/bind/mytest.com.internal; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TTL 4320 ; 1 hour 12 minutes @ IN SOA ns.mytest.com. root.ns.mytest.com. ( 2007101701 ; 3600 ; 1800 ; 36000 ; 3600 ) ; IN NS ns.mytest.com. ns IN A 192.168.0.8 www IN A 1.1.1.1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vi /etc/bind/mytest.com.external; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TTL 4320 ; 1 hour 12 minutes @ IN SOA ns.mytest.com. root.ns.mytest.com. ( 2007101701 ; 3600 ; 1800 ; 36000 ; 3600 ) ; IN NS ns.mytest.com. ns IN A 192.168.0.8 www IN A 2.2.2.2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - vi /etc/bind/mytest.com.others; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - $TTL 4320 ; 1 hour 12 minutes @ IN SOA ns.mytest.com. root.ns.mytest.com. ( 2007101701 ; 3600 ; 1800 ; 36000 ; 3600 ) ; IN NS ns.mytest.com. ns IN A 192.168.0.8 www IN A 3.3.3.3 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 【測試與結果】 設置好後重啟BIND服務: /etc/init.d/bind9 restart; 如果一切設置正常的話,現在DNS服務器應該能分別針對不同IP地址的請求,來返回不同的主機 解釋了, 這里測試從192.168.0.2,192.168.0.7和192.168.0.8(本機)查詢結果是: 從192.168.0.2查詢(dig @191.168.0.2 www.mytest.com;)則返回3.3.3.3; 從192.168.0.7查詢(dig @191.168.0.7 www.mytest.com;)則返回2.2.2.2; 從192.168.0.8查詢(dig @191.168.0.8 www.mytest.com;)則返回1.1.1.1; |