Zone文件和資源記錄Resource Record介紹
明確配置中的兩個概念:zone和RR。
BIND的配置文件描述了一個域名服務器的所有屬性,這些屬性是BIND的行為和功能。
其中的zone文件描述了域名服務器中包含的主機,所提供的服務類型等信息,BIND通過將zone文件中的信息加載到內存數據結構中並有效組織起來,然后對外部的DNS請求提供驗證和查詢請求。
通常情況下,一個zone文件描述該DNS服務器服務的一個授權服務器域。例如:有一個DNS服務器可以解析taobao.com的域名和baidu.com的域名,那么這個DNS服務器的配置文件中就可以設置兩個zone標簽,一個描述taobao.com的域名信息,另一個描述baidu.com的域名信息。
資源記錄Resource Record記錄了一個域(domain)的屬性和特性,注意,屬性是指共有的特征,特性指特有的特征。
named.conf文件詳解
named.conf是BIND的唯一的主配置文件,由一個個子句組成,每個子句都有一個頭跟一對大括號組成,大括號里面是該子句中的因子和值(具體見下面的例子)。
下面的代碼是named.conf的一個最簡配置。其中假設named.conf只負責解析授權域名cobb.com。
其中的key是由rndc-confgen生成的。
key "rndc-key" {
algorithm hmac-md5;
secret "eoiWMiCwCYPwNLWxl05rNw==";
};
controls {
inet 127.0.0.1 port 953;
allow { 127.0.0.1; };
keys { "rndc-key"; };
};
options {
//域名文件存放的絕對路徑
directory "/usr/local/named/var";
//如果bind啟動,自動會在/usr/local/named/var目錄生成一個named.pid文件,打開文件就是named進程的ID
pid-file "named.pid";
};
zone "." IN {
//根域名服務器
type hint;
//存放在//usr/local/named/var目錄,文件名為named.root
file "named.root";
};
//域cobb.com的zone文件
zone "cobb.com" IN {
type master; //該域名服務器是主域名服務器,這個選項主要用在主備部署中
file "cobb.com.zone"; //解析域名cobb.com的zone文件內容,其路徑由options中的directory指定
allow-update { none; }; //定義了允許向主zone文件發送動態更新的匹配列表
};
//反向解析
zone "1.168.192.in-addr.arpa" in {
type master;
//存放反向解析的文件
file "cobb.com.rev";
allow-update { none; };
};
說明:
controls子句定義了服務器的控制通道的一些信息,控制通道是named為外部提供的管理named服務器的接口,通常情況下named都在本機的【953】端口上監聽控制信息;allow表示允許本機上的rndc控制程序控制named服務器,allow除了指定ip地址外,還可以指定acl中的用戶地址;keys表示rndc控制named時需要攜帶的密鑰,這個密鑰由rndc-gen生成,並在named.conf中包含。
options選項中包含一些全局狀態描述,這些描述信息在所有的zone文件和view中可見,但如果zone文件或view中重新定義這些描述信息,則options中的信息被覆蓋。
zone文件詳解
文件cobb.com.zone文件位於/usr/local/named/var中,其內容如下所示:
$TTL 86400
$ORIGIN cobb.com.
@ IN SOA ns1 root(
2013031901 ;serial
12h ;refresh
7200 ;retry
604800 ;expire
86400 ;mininum
)
NS ns1.cobb.com.
NS ns2.cobb.net.
MX 10 mail.cobb.com.
ns1 IN A 192.168.10.1
www IN A 192.168.10.10
IN A 192.168.10.11
mail IN A 192.168.10.20
host1 IN A 192.168.10.30
ftp IN CNAME host1
上面的配置表示:
該zone有兩個域名服務器,一個是ns1.cobb.com,ip地址是192.168.10.1,另一個是ns2.cobb.net(它不在本域內);
該zone有一個郵件服務器,域名是mail.cobb.com,IP地址是192.168.10.20;
該zone有兩個對外服務的萬維網服務器,其域名是www.cobb.com,IP地址是192.168.10.10和192.168.10.11;
該zone有一個對外服務的ftp服務器,其域名是ftp.cobb.com,IP地址是192.168.10.30;
該zone有一個主機,其域名是host1.cobb.com,IP地址也是192.168.10.30;
其中TTL和ORIGIN等標簽在BIND中叫做指令。
zone文件中的所有指令都以一個$開始,指令主要用來表示zone文件中的一些控制信息。
$TTL指令表示一個資源記錄在其他DNS服務器中(這個DNS服務器是請求本BIND的服務器,一般情況下是local dns)的緩存時間,在這個緩存時間內,local dns不會再請求BIND,而是直接返回域名對應的IP地址。
$ORIGIN指令表示該zone文件用來描述的域(domain)名稱。
SOA(start of authority)資源記錄:它定義了一個域的全局特性,必須是出現在zone文件中的第一個資源記錄,而且一個zone文件中必須只有一個SOA資源記錄。
其中SOA后面的ns1與root分別是域名服務器和管理員郵箱(root@cobb.com),其全寫分別是ns1.cobb.com.和root.cobb.com.,因為$ORIGIN指明了域名,所以這個地方可以略去。
NS(name server)資源記錄:它定義了為本域(domain)(這個例子中是cobb.com)服務的域名服務器。需要注意的是外部域名服務器(例子中的ns2)必須為zone cobb.com包含一個zone文件。
MX(mail exchanger)資源記錄:它定義了本域中的郵件服務器。這個資源記錄是可選的,因為一個域中不一定有郵件服務器。
A(Address)資源記錄:這是個很關鍵的記錄。它定義了zone文件中提到的主機或服務的IPv4地址(IPv6地址叫AAAA記錄),而且這些IPv4地址必須是外部可見的。例如萬維網服務器www.cobb.com的IPv4地址是192.168.10.10。
CNAME記錄:是一個已經定義了IPv4地址的主機的別名記錄。通常用來為已經存在的主機分配一個或多個服務。示例中的主機host1.cobb.com既做主機又提供ftp服務。
從上面的分析可以看出,我們也可以不用CNAME,只需要為不同的服務指定相同的IP地址即可。但是實際上兩種情況下必須用CNAME記錄:
- 正式主機或別名主機在不同的域中,我們不知道外部域中的IP地址,所以必須要用CNAME,例如ftp.cobb.com是ftp.cobb.net的一個別名,但是在域cobb.com中無法知道ftp.cobb.net的IP地址,只能用CNAME記錄;
- 用戶希望訪問一個站點時用cobb.com產生www.cobb.com的效果,這時我們需要有如下的CNAME定義:
; 定義一個解析cobb.com的IP地址
IN A cobb.com
; 為www.cobb.com建立別名cobb.com
www IN A cobb.com.
Debian系統安裝BIND
- DNS緩存服務器:Bind9會把查詢到的域名信息緩存到服務器上,下次直接從本服務器上讀取。這樣可以節省帶寬和等待時間。
- DNS主服務器(primary master):Bind9從主服務器的配置文件中讀取域名區域信息,並作為該區域的權威解析資料。
- DNS從服務器(slave master):Bind9作為主服務器的備份,即使主服務器不可用時,也仍然能夠進行解析。
1. 安裝bind9
apt-get install bind9 bind9-host dnsutils bind9-doc
2. 配置文件
/etc/bind/named.conf
/etc/bind/named.conf.local
/etc/bind/named.conf.options
3. 創建一個DNS緩存服務器
3.1 轉發配置
編輯/etc/bind/named.conf.options文件,添加以下內容:
// 加入ISP提供的DNS服務器地址
forwards {
192.168.22.2;
};
// 注意后面的分號,一定不能少!
3.2 重啟bind
/etc/init.d/bind9 restart
3.3 修改/etc/resolv.comf文件
nameserver 192.168.22.200
#192.168.22.200為本機IP,這個根據個人情況進行填寫
修改/etc/hosts文件:
127.0.0.1 localhost
192.168.22.200 dns
3.4 測試
dig baidu.com
4. 搭建主DNS服務器
將配置linux.tech的主DNS服務器,需要創建正向和反向解析的Zone區域文件。
4.1 創建正反向Zone文件
編輯/etc/bind/named.conf.local文件,添加以下內容:
zone "linux.tech" {
type master;
file "/etc/bind/db.linux.tech";
};
zone "22.168.192.in-addr.arpa" {
type master;
file "/etc/bind/db.22.168.192.in-addr.arpa";
};
4.2 添加正向解析文件
創建/etc/bind/db.linux.tech文件,內容如下:
$TTL 604800
$ORIGIN linux.tech.
@ IN SOA dns admin (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS dns.linux.tech.
dns IN A 192.168.22.200
www IN A 10.9.36.96
4.3 添加反向解析文件
創建/etc/bind/db.22.168.192.in-addr.arpa文件,內容如下:
$TTL 604800
@ IN SOA dns.linux.tech. admin.linux.tech. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS dns.linux.tech.
200 IN PTR dns.linux.tech.
5. 重置bind並測試
/etc/init.d/bind9 reload
ping dns.linux.tech
ping www.linux.tech
dig dns.linux.tech
dig www.linux.tech
dig -x 127.0.0.1
dig -x 192.168.22.200
named-checkzone linux.tech /etc/bind/db.linux.tech
named-checkzone linux.tech /etc/bind/db.22.168.192.in-addr.arpa
6. 主從配置
zone "linux.tech" {
type master;
file "/etc/bind/db.linux.tech";
allow-transfer {
@ip_slave;
};
};
zone "linux.tech" {
type slave;
file "/etc/bind/slaves/db.linux.tech";
masters {
@ip_master;
};
};