bind9在多view情況下通過TSIG key實現主dns和多個輔DNS的同步傳輸


Master dns 192.168.8.1

slave dns 192.168.8.2,192.168.8.3,192.168.8.4

//-------------------------------------------------------------

提示:TSIG key的使用詳見“bind9在view情況下通過TSIG key實現nsupdate功能

Master dns named.conf配置如下:

key  " rndc-key " { algorithm hmac-md5; secret  " PpRyh6fU1ejnutT+jafXag== "; };
controls { inet  127.0. 0.1 port  953 allow {  127.0. 0.1; } keys {  " rndc-key "; }; };

acl  " trusted " {  192.168. 0.0/ 16; localhost; };
acl  " xfer " {  192.168. 8.1; 192.168.8.2; 192.168.8.3; 192.168.8.4; };  // 主輔dns-ip地址
acl  " nic " { 172.16. 0.0/ 27; };  // 用於管理dns的地址

logging { ... };

options { ...
    allow-transfer { xfer; nic; };   // 全局允許讀取zone數據的ip
    };

include  " isp/cernet.conf ";
include  " isp/chinanet.conf ";
key  " cernet-key " { algorithm hmac-md5; secret  " ALiFYsMuRdD03+V5qiNxnA== "; };
key  " chinanet-key " { algorithm hmac-md5; secret  " dMZeJ1vhhjjoig+sFYjZvg== "; };
key  " defaultisp-key " { algorithm hmac-md5; secret  " dkMHny2EEQSmvfiGKeL9YA== "; };

view  " internal-in "  in {          //  定義一個名為 internal-in 的 view
    match-clients { key rndc-key; !xfer; trusted; };  //  范圍是匹配那些用 rndc-key 加密的,以及 trusted, 另外: 主輔dns-ip包含在trusted中,"!xfer"排除主dns-ip是為了主dns在執行nsupdate時使用key匹配所有的view; 排除輔dns-ip是為了輔dns能夠在同步zone時通過key匹配所有的view
    allow-transfer { key rndc-key; nic; };  // 只允許用 rndc-key 加密過的 zone transfer 請求 
    server  192.168. 8.2 { keys rndc-key; };  // 向從服務器發送消息時,用 rndc-key 加密
    server  192.168. 8.3 { keys rndc-key; };  // 配置多個slave的ip
    server  192.168. 8.4 { keys rndc-key; };
    recursion yes;    //  允許處理來自 internal-in 的主機的遞歸請求
    additional- from-auth yes; 
    additional- from-cache yes;

zone  " . " { type hint; file  " named.root "; };
zone  " 0.0.127.in-addr.arpa " { type master; file  " local/localhost.rev "; }; 
zone  " localhost " { type master; file  " local/localhost.zone "; }; 
zone  " 8.168.192.in-addr.arpa " { type master; file  " master/8.168.192.in-addr.arpa.zone "; };
zone  "test.com " { type master; file  " master/test.com.in.zone "; allow-update { key rndc-key; }; };
};

view  " external-cernet "  in { 
    match-clients { key cernet-key; cernet; }; 
    allow-transfer { key cernet-key; };
    server  192.168. 8.2 { keys cernet-key; };
    server  192.168. 8.3 { keys cernet-key; };
    server  192.168. 8.4 { keys cernet-key; };
    recursion no;  //  禁止所有人向從服務器請求 zone transfer
    additional- from-auth no; 
    additional- from-cache no;

zone  " test.com " { type master; file  " master/test.com.cernet.zone "; allow-update { key cernet-key; }; };
};

view  " external-chinanet "  in { 
    match-clients { key chinanet-key; chinanet; }; 
    allow-transfer { key chinanet-key; };
    server  192.168. 8.2 { keys chinanet-key; };
    server  192.168. 8.3 { keys chinanet-key; };
    server  192.168. 8.4 { keys chinanet-key; };
    recursion no; 
    additional- from-auth no; 
    additional- from-cache no;

zone  "test.com " { type master; file  " master/test.com.chinanet.zone "; allow-update { key chinanet-key; }; };
};

view  " external "  in { 
    match-clients { key defaultisp-key; any; }; 
    allow-transfer { key defaultisp-key; };
    server  192.168. 8.2 { keys defaultisp-key; };
    server  192.168. 8.3 { keys defaultisp-key; };
    server  192.168. 8.4 { keys defaultisp-key; }; 
    recursion no; 
    additional- from-auth no; 
    additional- from-cache no; 

zone  "test.com " { type master; file  " master/test.com.out.zone "; allow-update { key defaultisp-key; }; };
};

 

slave dns named.conf配置如下(3個slave配置基本相同):

key  " rndc-key " { algorithm hmac-md5; secret  " PpRyh6fU1ejnutT+jafXag== "; };
controls { inet  127.0. 0.1 port  953 allow {  127.0. 0.1; } keys {  " rndc-key "; }; };

acl  " trusted " {  192.168. 0.0/ 16; localhost; };

logging { ... };

options { ...
    allow-transfer { none; };
    };

include  " isp/cernet.conf ";
include  " isp/chinanet.conf ";
key  " cernet-key " { algorithm hmac-md5; secret  " ALiFYsMuRdD03+V5qiNxnA== "; };
key  " chinanet-key " { algorithm hmac-md5; secret  " dMZeJ1vhhjjoig+sFYjZvg== "; };
key  " defaultisp-key " { algorithm hmac-md5; secret  " dkMHny2EEQSmvfiGKeL9YA== "; };

view  " internal-in "  in { 
    match-clients { key rndc-key; ! 192.168. 8.1; trusted; };  // 主dns-ip包含在trusted中,排除192.168.8.1是為了當主dns執行nsupdate通知所有主輔dns進行更新時,能夠通過key匹配到正確view。nsupdate詳見文章“bind9在view情況下通過TSIG key實現nsupdate功能”   
    allow-transfer { none; };   //  禁止所有人向從服務器請求 zone transfer 
    server  192.168. 8.1 { keys rndc-key; };   // 向主服務器發送消息時,用 rndc-key 加密
    recursion yes; 
    additional- from-auth yes; 
    additional- from-cache yes;

zone  " . " { type hint; file  " named.root "; };
zone  " 0.0.127.in-addr.arpa " { type master; file  " local/localhost.rev "; }; 
zone  " localhost " { type master; file  " local/localhost.zone "; }; 
zone  " test.com " { type slave; file  " slaves/test.com.in.zone "; masters {  192.168. 8.1; }; };
};

view  " external-cernet "  in { 
    match-clients { key cernet-key; cernet; }; 
    server  192.168. 8.1 { keys cernet-key; };
    recursion no; 
    additional- from-auth no; 
    additional- from-cache no;

zone  "test.com " { type slave; file  " slaves/test.com.cernet.zone "; masters {  192.168. 8.1; }; };
};

view  " external-chinanet "  in { 
    match-clients { key chinanet-key; chinanet; }; 
    server  192.168. 8.1 { keys chinanet-key; };
    recursion no; 
    additional- from-auth no; 
    additional- from-cache no;

zone  " test.com " { type slave; file  " slaves/test.com.chinanet.zone "; masters {  192.168. 8.1; }; };
};

view  " external "  in { 
    match-clients { key defaultisp-key; any; }; 
    server  192.168. 8.1 { keys defaultisp-key; };
    recursion no; 
    additional- from-auth no; 
    additional- from-cache no; 

zone  " test.com " { type slave; file  " slaves/test.com.out.zone "; masters {  192.168. 8.1; }; };
};

 

同步過程分析:(引用:ChinaUnix )

View Code
1)你修改並 reload 了 telecom view 的  bob.com. 這個 zone 。注意!正確的命令是 rndc reload bob.com. IN telecom ,記得加上后面的 "IN telecom‘ 。 
2)主服務器將向從服務器發送一個 notify 消息,這個消息是用 telecomkey 標識過的。 
    (主→從 :notify) 
3)當從服務器收到這個 notify 消息時,會根據消息尾部的 TSIG 部分找出 key 的名稱 :telecomkey 。 
4)從服務器對比每個 view 的 match-clients ,發現匹配 telcom 這個 view 的設定  
5)從服務器返回一個 notify response 消息,根據 telecom view 的 server 語句,用 telecomkey 加密並發給主服務器。 
    (從→主 :notify response) 
6)接着從服務器就會啟動 soa query,同樣該 query 也是用 telecomkey 加密的。(從→主 :soa query) 
7)主服務器收到這個 soa query 后,發現是用 telecom key加密的 ,返回 telecom 的 bob.com. SOA 記錄,並用 telecomkey 進行表示 
     (主→從 :soa query response) 
8)從服務器在收到來自主服務器的 response 后,和它自己 telecom view 的 bob.com zone 的 serial 比較,發現的確是增大了 
8)從服務器向主服務器發送 tcp 消息,請求 zone transfer (從→主 :zone transfer 請求) 
9)主服務器檢查 telecom view 的 allow-transfer ,發現該請求是以 telecomkey 加密的,則允許進行 zone transfer  
10)主服務器返回 telecom view 的 bob.com 這個 zone 的數據(來自文件 bob.com.telecom) 
      (主→從 :zone transfer 開始) 
11)zone transfer 完成,主從服務器關閉 TCP  連接 (zone transfer 完成) 

 

特別注意,以下幾種常見無法同步的原因:

a)key 在另一台 server 上不存在
b)同一個名稱的 key 在兩台 server 上的內容不一樣
c)兩台 server 的時間不同步,導致 TSIG key 驗證通不過。所以最好兩台 server 用 ntp 進行同步。這種情況比較隱蔽,需要特別注意。經過試驗,兩台 server 如果時間相差超過 5min 就會導致失敗。

 


免責聲明!

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



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