BIND簡易教程(2):BIND視圖配置


目錄:
BIND簡易教程(1):安裝及基本配置
BIND簡易教程(2):BIND視圖配置(本篇)
BIND簡易教程(3):DNSSec配置

 

上文書說到,我們把aaa.apple.tree解析到192.168.4.100。那么世界上任何一個人在請求aaa.apple.tree的時候,解析到的都是這個IP地址,之后,再訪問這個域名(當然這個IP地址只是實驗的,而且我域名也沒注冊,除了我內網之外,世界上任何一個人都訪問不到)。那么問題來了,兩個人一個在電信,一個在聯通,都想訪問這個域名的話,我的服務器要放在哪個運營商更好呢?畢竟,“世界上最遙遠的距離,不是你在我面前我卻不認識你,而是你在電信,我在聯通”。那么可不可以這樣,我現在提供兩台服務器,一台放在電信,一台放在聯通,然后,讓電信的用戶查詢 aaa.apple.tree的時候,解析到電信的服務器上去,聯通的用戶查詢aaa.apple.tree的時候,解析到聯通的服務器上去?答案是,可以的。這就是我今天要講的BIND的高級功能:視圖查詢。

配置視圖,主要需要三個步驟:

  1. 收集IP地址的集合。例如我現在有3個IP地址的集合,讓每個集合能訪問到不同的地址,即,某個集合中的一個ip在查詢的時候,提供一個解析結果,另一個集合中的另一個ip查詢的時候,提供另一個結果;
  2. 給每個IP集合提供一個視圖。這個視圖中要寫清楚是哪個集合,能請求到哪個域。
  3. 給每個視圖的每個域提供一個解析文件。

下面,我們假設192.168.4.x這個網段是電信的,192.168.1.x這個網段是聯通的,對比配置一下視圖。
先寫IP集合:
電信地址集合:dianxin.acl

acl “dianxin” {
    192.168.4.0/24;
};

聯通地址集合:liantong.acl

acl “liantong” {
    192.168.1.0/24;
};

 

再寫視圖:
電信視圖:dianxin.view

include "/etc/bind/views/acls/dianxin.acl";
view "dianxin" {
    match-clients { "dianxin"; };
    zone "apple.tree" IN {
        type master;
        file "/etc/bind/views/zones/dianxin.apple.tree.zone";
    };
};

聯通視圖:liantong.view

include "/etc/bind/views/acls/liantong.acl";
view "liantong" {
    match-clients { "liantong"; };
    zone "apple.tree" IN {
        type master;
        file "/etc/bind/views/zones/liantong.apple.tree.zone";
    };
};

 

最后是對域的解析:

電信apple.tree域: dianxin.apple.tree.zone

$TTL 86400
@   IN  SOA apple.tree. apple.apple.tree. (
          2016090100     ; Serial
               28800     ; Refresh
                7200     ; Retry
              604800     ; Expire
               86400     ; Negative Cache TTL
)
@   IN  NS  apple.tree.
@   IN  A   192.168.4.43
aaa IN A 192.168.4.100
bbb     IN      A       192.168.4.101
ccc     IN      CNAME   bbb

聯通apple.tree域: liantong.apple.tree.zone

$TTL 86400
@   IN  SOA apple.tree. apple.apple.tree. (
          2016090100     ; Serial
               28800     ; Refresh
                7200     ; Retry
              604800     ; Expire
               86400     ; Negative Cache TTL
)
@   IN  NS  apple.tree.
@   IN  A   192.168.4.43
aaa IN A 1.1.1.1
bbb     IN      A       2.2.2.2
ccc     IN      CNAME   bbb

 

OK。這樣我們就配置了一套電信視圖和一套聯通視圖(所謂一套就是“acl+view+zone”這三者解析)。

如果你樂意,還可以配一套移動視圖和一套移不動視圖,大概就都是醬嬸的。先測試一下吧(別忘了sudo rndc reload加載):
當我從電信的機器(192.168.4.43)查詢時:

$ dig aaa.apple.tree @192.168.4.43
; <<>> DiG 9.9.5-3ubuntu0.8-Ubuntu <<>> aaa.apple.tree @192.168.4.43
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57758
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;aaa.apple.tree. IN A
;; ANSWER SECTION:
aaa.apple.tree. 86400 IN A 192.168.4.100
;; Query time: 4 msec
;; SERVER: 192.168.4.43#53(192.168.4.43)
;; WHEN: Mon Jan 11 08:58:28 CST 2016
;; MSG SIZE rcvd: 59

而當我從聯通的機器(192.168.1.100)查詢時:

$ dig aaa.apple.tree @192.168.4.43
; <<>> DiG 9.9.5-3ubuntu0.5-Ubuntu <<>> aaa.apple.tree @192.168.4.43
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40018
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; WARNING: recursion requested but not available
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;aaa.apple.tree. IN A
;; ANSWER SECTION:
aaa.apple.tree. 86400 IN A 1.1.1.1
;; Query time: 3 msec
;; SERVER: 192.168.4.43#53(192.168.4.43)
;; WHEN: Sun Sep 04 12:32:56 CST 2016
;; MSG SIZE rcvd: 59

 

視圖配置就是這樣的。有個問題我一直沒有介紹,那就是:我怎么知道哪些IP是電信的IP,哪些是聯通的?如果你以前看過我的博客,那應該看過這篇《解析純真IP地址庫》。沒錯,寫程序來獲得每個運營商的IP集合。再開動一下腦筋,我們還能獲得些什么呢?——除了運營商,我們還可以根據地域來划分IP,寫出來各個省的視圖。


密集恐懼症患者的福音。我個人建議如果你真要配置全國各省甚至各市的視圖,就不要手動寫配置文件了,寫個腳本生成吧。而且,一台機器的內存有可能撐不住,可能要考慮主從。
甚至,我們還可以用地域和運營商相結合。當然,這種不同維度結合的時候,需要有化解沖突的方式,比如,電信解析到P地址,而北京解析到Q地址。那么你讓北京電信的用戶怎么想?實際上,對於這種情況,BIND是這么處理的:首先,我們收集IP集合的時候,一個北京電信的IP就既在北京的IP集合中,又在電信的IP集合中,當客戶端訪問DNS服務器時,BIND首先對客戶端IP進行匹配,找到這個IP屬於某一個集合,就會去查詢這個集合對應的視圖。誰先誰后?那就要看兩個acl在named.conf加載時候的先后順序了。誰寫在前面,誰先加載。BIND不認為這種沖突是錯誤。話說這本來也不是錯誤,北京電信的用戶既屬於北京,也屬於電信,這沒錯啊!
視圖配置大概就講這些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM