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; }; };
};
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功能”
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 加密
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; }; };
};
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 )

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 完成)
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 就會導致失敗。