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

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

 

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

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

  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.aclapp

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.viewspa

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";
    };
};

 

最後是對域的解析:code

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

$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.zoneblog

$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不認爲這種衝突是錯誤。話說這原本也不是錯誤,北京電信的用戶既屬於北京,也屬於電信,這沒錯啊!視圖配置大概就講這些。

相關文章
相關標籤/搜索