兩種方法實(shí)現(xiàn)DNS主從服務(wù)器數(shù)據(jù)同步
兩種方法實(shí)現(xiàn)DNS 主從服務(wù)器數(shù)據(jù)同步為了保證更好地進(jìn)行域名解析服務(wù),一般在網(wǎng)絡(luò)中設(shè)置主、從兩臺(tái)DNS 服務(wù)器。由于當(dāng)前各ISP 間的橋接存在帶寬瓶頸,為了使不同ISP 的用戶快速訪問(wèn)高校內(nèi)部網(wǎng)站,很
兩種方法實(shí)現(xiàn)DNS 主從服務(wù)器數(shù)據(jù)同步
為了保證更好地進(jìn)行域名解析服務(wù),一般在網(wǎng)絡(luò)中設(shè)置主、從兩臺(tái)DNS 服務(wù)器。由于當(dāng)前各ISP 間的橋接存在帶寬瓶頸,為了使不同ISP 的用戶快速訪問(wèn)高校內(nèi)部網(wǎng)站,很多學(xué)校在配置域名服務(wù)器時(shí)都采用了BIND 9的VIEW 功能。其實(shí)現(xiàn)原理如下:對(duì)于發(fā)出域名解析請(qǐng)求的不同源IP 地址,針對(duì)同一域名解析到不同的目的IP 地址,即用戶通過(guò)最短路徑到達(dá)欲訪問(wèn)的網(wǎng)站。舉例來(lái)說(shuō),對(duì)于校內(nèi)同一臺(tái)服務(wù)器,教育網(wǎng)用戶發(fā)出的訪問(wèn)請(qǐng)求解析到的域名IP 地址是位于教育網(wǎng)上的服務(wù)器地址,網(wǎng)通用戶解析到的域名IP 地址是網(wǎng)通上的服務(wù)器地址,這樣使用戶能夠訪問(wèn)到最快的服務(wù)器。
主域名服務(wù)器使用的VIEW 分界,按照不同查詢來(lái)源地址來(lái)回應(yīng)不同的答案,這對(duì)于一般的查詢工作是非常高效的。但是當(dāng)從服務(wù)器進(jìn)行SOA 查詢或者做Transfer 時(shí),如果主服務(wù)器看到客戶端請(qǐng)求,只能回應(yīng)該客戶端所在的VIEW ,而不能順利完成其他VIEW 的同步。保證主從域名服務(wù)器的數(shù)據(jù)同步,就是為域名服務(wù)正常工作提供保障。因此,如何保證域名系統(tǒng)的主從服務(wù)器的數(shù)據(jù)同步性,就顯得極為重要。本文分別利用BIND 9的
TRANSFER-SOURCE 功能和TSIGKEY 功能,闡述了這一問(wèn)題的兩種不同的解決方案。 觸發(fā)同步的過(guò)程
首先介紹主從服務(wù)器的同步過(guò)程。觸發(fā)同步過(guò)程的原因有4種:1. 從域名服務(wù)器剛剛啟動(dòng);2. 主域名服務(wù)器的Serial 值增大;3. 執(zhí)行了rndc reload命令;4. 到了主從服務(wù)器的同步更新時(shí)間。
主從域名服務(wù)器開(kāi)始同步(見(jiàn)圖1):
1. 主服務(wù)器向從服務(wù)器發(fā)送notify 消息
2. 從服務(wù)器收到主服務(wù)器發(fā)送notify 消息,向主服務(wù)器返回一個(gè)notify response消息。
3. 從服務(wù)器向主服務(wù)器發(fā)送SOA query消息。
4. 主服務(wù)器向從服務(wù)器返回SOA response消息。
5. 從服務(wù)器收到SOA response消息后,比對(duì)自身的Serial 值,如果發(fā)現(xiàn)主服務(wù)器的Serial 值大于自身的Serial 值,那么就發(fā)送Zone transfer request消息。
6. 主服務(wù)器返回Zone transfer response消息。
7. 主服務(wù)器執(zhí)行Zone transfer。
兩種主從服務(wù)器的數(shù)據(jù)同步法
根據(jù)主從服務(wù)器的同步步驟,要解決域名服務(wù)器的同步問(wèn)題,主要問(wèn)題是如何標(biāo)識(shí)主服務(wù)器的notify 消息,即notify 消息隸屬于哪個(gè)VIEW 、從服務(wù)器如何識(shí)別notify 消息。同樣,notify response消息、SOA query、SOA response消息、Zone transfer request消息、Zone transfer response消息、Zone transfer的數(shù)據(jù)也存在類似的問(wèn)題。Bind 9提供了兩種標(biāo)識(shí)此類信息的方法:1. 利用TRANSFER-SOURCE 功能,從服務(wù)器需要設(shè)置和VIEW 一一對(duì)應(yīng)的IP 地址;2. 利用TSIGKEY 功能對(duì)消息進(jìn)行加密。
利用TRANSFER-SOURCE 功能
環(huán)境假定:授權(quán)domain 是test.lcu.edu.cn;
,主DNS 的IP 地址是210.44.112.66(DNS包含Internet 和Cernet 兩個(gè)VIEW) ;
從DNS 的IP 地址是210.44.112.67(對(duì)應(yīng)Cernet View)和210.44.112.68(對(duì)應(yīng)Internet View) 。
1. 對(duì)主DNS 的配置
include “/etc/cernet.cfg”; //指定教育網(wǎng)地址文件, 可以根據(jù)自己的配置來(lái)進(jìn)行靈活配置。 view “cernet” { //定義了一個(gè)Cernet view
match-clients {!210.44.112.68;cernet; }; //cernet是cernet.cfg 定義的教育網(wǎng)ACL zone "." IN {
type hint;
file "named.root";
};
zone “test.lcu.edu.cn” {
type master;
file “cernet.zone” ;
allow-transfer { 210.44.112.67; };//使用210.44.112.67作Cernet zone transfer };
};
view "internet" {
match-clients {!210.44.112.67; any; };
recursion no;
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type master;
file "internet.zone";
allow-transfer { 210.44.112.68; }; //使用210.44.112.68作Internet zone transfer };
};
2. 對(duì)從服務(wù)器的配置
include “/etc/cernet.cfg”; //指定教育網(wǎng)地址文件, 可以根據(jù)自己的配置來(lái)進(jìn)行靈活配置。 view “cernet” {
match-clients {cernet; }; //cernet是cernet.cfg 定義的教育網(wǎng)ACL
zone "." IN {
type hint;
file "named.root";
,};
zone “test.lcu.edu.cn” {
type slave;
file “slave.cernet.zone” ;
masters { 210.44.112.66; };
allow-source { 210.44.112.67; };//和主DNS 配置對(duì)應(yīng)
};
};
view "internet" {
match-clients {any; };
recursion no;
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type slave;
file "slave.internet.zone";
masters { 210.44.112.66; };
allow-source { 210.44.112.68; }; //和主DNS 配置對(duì)應(yīng)
};
};
3. 配置分析
在主服務(wù)器端配置VIEW 中的match-client 和allow-transfer 標(biāo)示信息,在從服務(wù)器端配置VIEW 中的masters 和allow-source 標(biāo)識(shí)信息,這樣做可以解決主從服務(wù)器同步問(wèn)題。 利用TSIGKEY 功能
環(huán)境假定:授權(quán)域domain 是test.lcu.edu.cn ;
主DNS 的IP 地址是210.44.112.66(DNS包含Internet 和Cernet 兩個(gè)VIEW) ; 從DNS 的IP 地址是210.44.112.67。
1. 對(duì)主服務(wù)器的配置
include “/etc/cernet.cfg”; //指定教育網(wǎng)地址文件, 可以根據(jù)自己的配置來(lái)進(jìn)行靈活配置。 view “cernet” { //定義了一個(gè)Cernet view
match-clients { key cernetkey; cernet; }; //范圍是匹配這些用 cernetkey 加密 的以及 cernet 地址(?)
allow-transfer { key cernetkey; };
//只允許用 cernetkey 加密過(guò)的 zone transfer 請(qǐng)求
,server 210.44.112.67 { keys cernetkey; }; // 向從服務(wù)器發(fā)送消息時(shí),用 cernetkey 加密
zone "." IN {
type hint;
file "named.root";
};
zone “test.lcu.edu.cn” {
type master;
file “cernet.zone” ;
};
};
view "internet" {
match-clients {key internetkey; any; };
recursion no;
allow-transfer { key internetkey; }; // 只允許用 internetkey 加密過(guò)的 zone transfer 請(qǐng)求
server 210.44.112.67 { keys internetkey; }; // 向從服務(wù)器發(fā)送消息時(shí),用 internetkey 加密
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type master;
file "internet.zone";
};
};
2. 對(duì)從服務(wù)器的配置
include “/etc/cernet.cfg”; //指定教育網(wǎng)地址文件, 可以根據(jù)自己的配置來(lái)進(jìn)行靈活配置。 view “cernet” { //定義了一個(gè)Cernet view
match-clients { key cernetkey ;cernet; }; //范圍是匹配這些用 cernetkey 加密的,以及 cernet 地址
allow-transfer {none };
// 禁止任何 zone transfer 請(qǐng)求
server 210.44.112.66 { keys cernetkey; };
// 向主服務(wù)器發(fā)送消息時(shí),用 cernetkey 加密
zone "." IN {
,type hint;
file "named.root";
};
zone “test.lcu.edu.cn” {
type slave;
masters {210.44.112.66;};
file “cernet.zone” ;
};
};
view "internet" {
match-clients {key internetkey; any; };
recursion no;
allow-transfer { none}; // 禁止任何 zone transfer 請(qǐng)求
server 210.44.112.66 { keys internetkey; };
// 向主服務(wù)器發(fā)送消息時(shí),用 internetkey 加密
zone "." IN {
type hint;
file "named.root";
};
zone "test.lcu.edu.cn" IN {
type slave;
masters {210.44.112.66;};
file "internet.zone";
};
};
使用dnssec-keygen 命令生成 TSIG key。具體命令如下:
/usr/sbin/dnssec-keygen -a alg -b bits [-n type] [options] name
3. 配置分析
使用TSIG 對(duì)主從DNS 配置,VIEW 和KEY 一一對(duì)應(yīng),從而解決了主從服務(wù)器間的消息標(biāo)示問(wèn)題。
兩方法的優(yōu)缺點(diǎn)
兩種方法比較而言,使用TRANSFER-SOURCE 功能,需要多設(shè)置幾個(gè)IP 地址,配置相對(duì)簡(jiǎn)單,原理容易理解,但是造成一定的IP 地址浪費(fèi)。使用TSIG KEY方法,要準(zhǔn)備KEY 文件,并且KEY 文件和VIEW 要一一對(duì)應(yīng),做起來(lái)比較繁瑣。
配置技巧
配置過(guò)程中的技巧及常見(jiàn)問(wèn)題:
,1. 在配置文件中使用include 語(yǔ)句,增加文件的可讀性。像各種ACL ,KEY 文件都可以使用include 語(yǔ)句,在很大程度上減小了主配置文件的大小。
例:include ”/etc/cernet.cfg”;
2. 開(kāi)始配置服務(wù)器時(shí),關(guān)掉Linux 的SElinux 功能,因?yàn)镾Elinux 功能會(huì)帶來(lái)意想不到的麻煩。
3. 遇到問(wèn)題時(shí),多使用tail –f /var/log/messages查看日志。
4.BIND 工作不正常時(shí),如果發(fā)現(xiàn)日志中有permission denied的字樣,可以把所有的配置文件權(quán)限改大,規(guī)避問(wèn)題。
5. 使用rndc reload test.lcu.edu.cn. IN cernet重載cernet View下的test.lcu.edu.cn 。修改ZONE 文件之后,一定要記得將Serial 值改大,然后執(zhí)行rndc reload,才能實(shí)現(xiàn)數(shù)據(jù)同步。
6. 如果有部分外部域名解析不正常的情況,又沒(méi)有充分的排錯(cuò)時(shí)間,可以使用forward 語(yǔ)句規(guī)避問(wèn)題。如
options {
…
forwarders {202.102.128.68; //連通的兩個(gè)DNS 服務(wù)器
202.102.152.3;
};
…
}.
7. 主從服務(wù)器的時(shí)區(qū)和時(shí)鐘要一致,使用ntpdate 同步時(shí)間。
(作者單位為聊城大學(xué)網(wǎng)絡(luò)信息中心)