前兩篇文章是從 DNS 使用的角度去理解 DNS 的,但是假如想進一步明白 DNS 內部運作原理,就有必要理解如何安裝 DNS 服務器。DNS 服務器有多種類型,理解類型是安裝 DNS 服務器的前提。同時從使用的角度看,理解 DNS 服務器類型,也能夠更加靈活的使用和理解 DNS 系統。
DNS 服務器類型
(1)權威 DNS 服務器,對于具備一定規模的企業來說,為了方便控制自己域名的解析,會自己搭建權威服務器。通過權威服務器能夠查詢特定 zone 的信息(先不用管什么是 zone)。這種 DNS 服務器沒有遞歸和迭代功能,只負責響應特定域名的解析。權威 DNS 服務器返回的結果永遠是最新的。
(2)Caching DNS Server
在自己電腦配置(比如 /etc/resolv.conf)的本地 DNS 服務器叫做 Caching DNS Server??蛻舳耍▽嶋H上是 system resolver)會向 Caching DNS 服務器發送遞歸域名解析請求,而 Caching DNS 服務器會迭代查詢域名解析結果。 對于上網的用戶來說,可以使用 ISP 提供的 Caching DNS 服務器,也可以使用類似 8.8.8.8 這樣的公共 DNS 服務器。
這種類型的 DNS 服務器一般企業內部會搭建,一方面是為了安全,所有的 DNS 查詢經過內部的機器進行查詢。另外一方面就是加速查詢結果。
(3)Forwarding DNS Server
對于客戶端來說,Forwarding DNS 服務器和 Caching DNS 服務器功能上沒有差別,但是在機制上兩者是不一樣的。它不會進行迭代查詢,而是將所有的請求轉發給其他的 DNS 服務器,然后緩存獲取到的結果。
安裝 DNS 服務器
這篇博文使用 bind 這個軟件來提供 DNS 服務器,安裝的環境是 Ubuntu 14.04.4 LTS。
安裝啟動或者調試 bind :
apt-get install bind9 bind9utils bind9-doc
named-checkconf #檢查配置文件有沒有錯誤
service bind9 restart #重新啟動 bind,修改配置文件后務必運行
tail -f /var/log/syslog #查看系統文件
相關的配置文件:
/etc/bind/named.conf #主文件,下面包含三個子文件
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";
安裝 Caching DNS Server
配置比較簡單,只要修改 /etc/bind/named.conf.options
文件即可。
options {
directory "/var/cache/bind";
recursion yes;
allow-query { any; };
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; };
};
重要的參數就是 recursion,開啟就行,表示允許客戶端進行遞歸查詢。一般非公共的 DNS 只允許內部的客戶端進行 DNS 查詢,可以給 allow-query 配置一個 acl ,假如允許所有客戶端查詢,配置 為 any 即可。
安裝 Forwarding DNS Server
配置比較簡單,只要修改 /etc/bind/named.conf.options
文件即可。
options {
directory "/var/cache/bind";
recursion yes;
allow-query { any; };
forwarders {
8.8.8.8;
};
forward only;
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; };
};
重要的參數就兩個,forwarders 配置需要轉發查詢的 DNS 列表,forward 表示轉發請求(即便 recursion 參數配置為 yes)。
安裝 Authoritative-Only DNS Server
相對與前兩種類型的 DNS 服務器來說,這種類型的服務器配置相對復雜,先做以下說明:
- 不演示 IP 反解的過程
- 不做 master/slave 配置
- NS 服務器名稱是 ns.example.com.,對應的 IP 地址是 139.129.23.162
(1)在服務器上修改 /etc/hosts,配置
192.0.2.1 ns.example.com
#必須是外網地址,因為外部的客戶端會查詢,不能給一個內部地址。
(2)修改 /etc/bind/named.conf.options ,配置
options {
directory "/var/cache/bind";
recursion no;
allow-transfer { none; };
dnssec-validation auto;
auth-nxdomain no;
listen-on-v6 { any; };
};
recursion 配置為 no,因為權威 DNS 服務器只負責它自己的 zone 解析,不負責遞歸查詢。假如不是主輔的 DNS 服務器,allow-transfer 配置為 none;
(3)配置 /etc/bind/named.conf.local
zone "example.com" {
type master;
file "/etc/bind/zones/db.example.com";
};
配置的 zone 表示那些域名是這臺 dns 服務器控制的,具體的信息來自于 /etc/bind/zones/db.example.com 文件。假如 named.conf.local 文件被破壞了,可以從 named.conf.default-zones 拷貝過來。
(4)配置 /etc/bind/zones/db.example.com 文件
這文件先初始化,可以從 /etc/bind/db.local 文件進行拷貝。
$TTL 604800
@ IN SOA ns.example.com. admin.example.com. (
5 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
; Name servers
example.com. IN NS ns.example.com.
; A records for name servers
ns IN A 139.129.23.162
; Other A records
@ IN A 139.129.23.162
www IN A 139.129.23.162
(5)測試 zone 文件是否正確
named-checkzone example.com /etc/bind/zones/db.example.com ,假如返回以下內容說明正確。
zone example.com/IN: loaded serial 5
OK
(7)使用該 DNS
dig -t a @139.129.23.162 www.example.com
也可以在你的域名解析商管理后臺將 NS 地址修改為 ns.example.com(139.129.23.162 )。