BIND是Domain Name System (DNS) 協議的一個實現,提供了DNS主要功能的開放實現,主要包括如下三種:
*域名服務器
*DNS解析庫函數
*DNS服務器運行調試所用的工具
它是一款開放源碼的DNS服務器軟件,由美國加州大學Berkeley分校開發和維護的
DNS_server主要有如下三種應用模式:
*主域名服務器
*輔助域名服務器
*緩存域名服務器
Bind使用TCP和UDP端口53
官方網站:http://www.bind.com/
幫助文檔:http://www.isc.org/sw/bind/
配置文件樣例:http://www.bind.com/bind.html
系統環境:Linux_Ubuntu12.04_X64
軟件版本:BIND9
搭建測試主機:
*192.168.5.101緩存域名服務器、主域名服務器
*192.168.5.102緩存域名服務器、輔助/從域名服務器
*192.168.5.103 測試客戶機
sudo apt-get install bind9 bind9utils -y
dns@dns2:/etc/bind$ ll
total 60
drwxr-sr-x 2 root bind 4096 Sep 10 16:49 ./
drwxr-xr-x 91 root root 4096 Sep 1014:06 ../
-rw-r--r-- 1 root root 2389 Jul 27 11:17 bind.keys
-rw-r--r-- 1 root root 237 Jul 27 11:17 db.0
-rw-r--r-- 1 root root 271 Jul 27 11:17 db.127
-rw-r--r-- 1 root root 237 Jul 27 11:17 db.255
-rw-r--r-- 1 root root 353 Jul 27 11:17 db.empty
-rw-r--r-- 1 root root 270 Jul 27 11:17 db.local
-rw-r--r-- 1 root root 2994 Jul 27 11:17 db.root
-rw-r--r-- 1 root bind 463 Jul 27 11:17 named.conf
-rw-r--r-- 1 root bind 490 Jul 27 11:17 named.conf.default-zones
-rw-r--r-- 1 root bind 301 Sep 10 16:43 named.conf.local
-rw-r--r-- 1 root bind 890 Sep 10 14:06 named.conf.options
-rw-r----- 1 bind bind 77 Sep 10 14:06 rndc.key
-rw-r--r-- 1 root root 1317 Jul 27 11:17 zones.rfc1918
named.conf
主配置文件,設置通常的named參數,指向該服務器使用的域數據庫的信息源,注意裏面的include語句
named.conf.options
全局配置文件,全局選項配置
db.root
根服務器指向文件,由Internet NIC建立和維護,無需修改,可是須要按期更新
db.local
正向區域數據庫,用於將域名解析爲對應的IP地址
db.127
反向區域數據庫,用於將ip解析爲對應的域名
named.conf.local
用於定義解析域,通常是在named.conf裏的include語句中囊括,單獨在該文件中劃定解析域,也能夠直接在named.conf中直接劃定解析域
其中:主配置文件/etc/bind/named.conf的配置語句:
命令 用法
acl 定義ip地址的訪問控制清單
#control 定義ndc使用的控制通道
include 把其餘文件包含到主配置文件中
key 定義受權的安全密鑰
logging 定義日誌寫什麼,寫到那裏
options 定義全局配置選項和缺省值
#server 定義遠程服務器的特徵
.....
77
cd/var/cache/bind/
sudomkdir data
cd data
sudotouch cache_dump.db
sudotouch named_stats
sudochown -R bind:bind /var/cache/bind/data
sudo vim/etc/bind/named.conf.options
############################################
options {
directory "/var/cache/bind";
dump-file "/var/cache/bind/data/cache_dump.db";
statistics-file "/var/cache/bind/data/named_stats";
query-source port 53;
#query-source-v6 port 53;
allow-query { any; }; ;容許全部機器的DNS查詢
version "dns";
;當別人要探測咱們DNS服務器的版本時,對方獲得的將是dns
forwarders { 202.106.46.151; 8.8.8.8; };
#dnssec-validation auto;
auth-nxdomain no; # conform toRFC1035
#listen-on-v6 { any; };
; 若是DNS服務運行在有多個網卡的服務器上,那麼默認的它會在全部網卡接口上監聽服務,這個選項告訴它只在指定的藉口上進行服務監聽
};
###########################################
#max-cache-ttl、max-retry-time 目前測試: DNS緩存時間由db文件中的TTL 參數決定
DNS解析模式
當DNS解析的域名本機中沒有的時候,就會發起遞歸(recursion)或者轉發(forward)到遠程DNS去查詢。
遞歸:本機直接從根服務器上尋找對應域名的NS記錄,再由本機到NS指向的服務器中查詢記錄
轉發:本機將解析請求轉發到指定的服務器去解析,將轉發服務器的響應結果直接反饋給查詢者
BIND9默認打開遞歸查詢和關閉轉發功能
先按照緩存服務器的搭建方法配置此服務器
sudo vim named.conf.local
############################################
zone "example.com" IN {
type master;
file "db.example.com";
allow-transfer { 192.168.5.102; };
notify yes;
also-notify { 192.168.5.102;};
};
zone"5.168.192.in-addr.arpa" IN {
type master;
file"/etc/bind/db.192.168.5";
notify yes;
also-notify { 192.168.5.102; };
allow-transfer { 192.168.5.102; };
};
############################################
master表示定義的是主域名服務器
file 指定區域數據庫文件位置
notify和also-notify及allow-transfer等都是爲設置輔助域名服務器而配置的
sudo vimdb.example.com
############################################
$TTL 7D
@ IN SOA example.com. root.example.com. (
2013091001 ; Serial
7D ; Refresh
1D ; Retry
28D ; Expire
7D ) ; Negative Cache TTL
;
@ IN NS example.com. #在其後有一個附加的 "."
@ IN A 192.168.5.71
www IN A 192.168.5.71
############################################
@表明example.com.
若是不用@,這裏的www得寫成www.example.com.
第一行是TTL設定,生存時間記錄字段。它以秒爲單位定義該資源記錄中的信息存放在高
速緩存中的時間長度。這裏定義爲604800秒,也就是1周
第二行的SOA記錄,指定受權主機和管理員信箱
包含幾個子參數,用於和輔助域名服務器同步的:
serial-->至關於一個id號,很重要,只有比輔助服務器的值大,纔會更新,通常用當前日期並加上兩位序號來表示
refresh-->這裏是要告訴從服務器多久進行資料同步
retry-->若是從在更新時失敗,要隔多久有進行重試
expire-->這裏是記錄逾期時間,當從服務器一直都未能成功與主取得聯繫,到這個時間後就放棄了
Minimum--> 默認 TTL 值,若是您在前面沒有用「$TTL」來定義,就會以此值爲準
第三行的NS記錄,代表負責example.com這個域的Name server
第四行的A記錄,就是域名和ip的映射記錄
sudo vim db.192.168.5
$TTL 7D
@ IN SOA example.com. root.example.com. (
2013091004 ; Serial
7D ; Refresh
1D ; Retry
28D ; Expire
7D ) ; Negative Cache TTL
;
@ IN NS example.com.
@ IN PTR example.com.
71 IN PTR www.example.com.
先按照緩存服務器的搭建方法配置此服務器
和主域名服務器有幾點不一樣的地方:
編輯/etc/bind/named.conf.local文件
輔助服務器不須要建立域庫文件,由於是從主服務器上同步過來
sudo vim named.conf.local
############################################
zone "example.com" IN {
type slave;
file "/etc/bind/slave/db.example.com";
masters { 192.168.5.101; };
allow-notify { 192.168.5.101; };
};
zone "5.168.192.in-addr.arpa" IN {
type slave;
file "/etc/bind/slave/Sdb.192.168.5";
masters { 192.168.5.101; };
allow-notify { 192.168.5.101; };
};
############################################
slave是標明該服務器爲輔助域名服務器
file是指定存放域庫文件的位置,我自定義了一個slaves目錄來存放master傳過來的文件,相對安全些
sudo mkdir /etc/bind/slave
sudo chmod g+w /etc/bind/slave
masters指明主域名服務器地址
輔助服務器不須要建立域庫文件,由於是從主服務器上同步過來
注意:建立的slaves是在根目錄下面,而根目錄(/etc/bind/)默認是隻讀權限的,因此須要開放權限
可是又不能和平時加權限同樣,如用:chown bind:bind 相似的辦法
只有以下操做就能正確訪問:
sudo vim /etc/apparmor.d/usr.sbin.named
############################################
/etc/bind/** r,
改爲
/etc/bind/** rw,
############################################
而後重啓服務生效:
sudo /etc/init.d/apparmor restart
重啓主從服務器上的BIND服務
sudo /etc/init.d/bind9 restart
最好進行如下幾步檢查:
sudo netstat -tnlp | grep 53-->檢查開啓端口
sudo tail -f /var/log/syslog-->查看一下啓動日誌
查看從服務器上庫文件
cd /var/cache/bind
ls
從這裏能夠直觀的看見從主複製過來的庫文件,更重要的是看日誌,可以很清楚的看到主和從傳輸的過程
在客戶機上測試,就是本機,修改本機的dns,編輯/etc/resolvcond/resolv.conf.d/tail
nameserver 192.168.5.101
須要重啓生效
sudo /etc/init.d/resolveconf restart
named-checkconf
檢查named.conf和include裏包含的文件
eg:named-checkconf --help
eg:named-checkconf -t etc/bind/
沒有任何輸出表明語法沒有問題
named-checkzone
檢查zone
eg:named-checkzone -t etc/bind/
Bind 9以後提供新的功能爲」rndc」(remote name daemon control),可視爲Bind舊版ndc的延伸,它可以使系統管理者利用rndc command遠端或本端(localhost)控制管理Bind,並以加密方式來傳送資料,以防止其餘非受權使用者控制Bind。
rndcflush 清空本地DNS緩存
rndcflushname name刷新指定域名的緩存
rndcreload重載DNS服務器
rndc status 查看目前DNS服務器狀態
rndc stop 中止DNS服務器
rndc restart 從新啓動DNS服務器
rndc stats 生成DNS統計報表到statistics-file
rndc dumpdb 將全部緩存輸入文件named_dump.db,以查看DNS緩存,DNS緩存是在內存中的
success:成功查詢的次數
referral:就是非recursion的查詢次數
nxrrset:有這個域名,但找不到解析記錄
nxdomain:就是域名都找不到
recursion:遞歸查詢 failure:除上面那些以外的查詢失敗響應次數
設置DNS Cache 的時間
在 bind 9 中,使用 TTL 參數來設置 DNS 默認的緩存時間,但要記住這個是你解析的域名在別人的 DNS 中的緩存時間。
rndc配置
參考:http://dns-learning.twnic.net.tw/bind/security.html#two-one
1.
若是用戶bind對於/etc/bind/slaves目錄沒有寫權限, 則查看 /var/log/syslog 會出現以下相似錯誤:
tonybox:~# tail/var/log/syslog
Aug 15 15:50:12 ubuntu kernel:[12575.839327] type=1400 audit(1376553012.724:18): apparmor="DENIED"operation="mknod" parent=1 profile="/usr/sbin/named"name="/etc/bind/tmp-MosmnKMJxa" pid=2440 comm="named" requested_mask="c"denied_mask="c" fsuid=107 ouid=107
Aug 15 15:50:12 ubuntunamed[2439]: dumping master file: /etc/bind/tmp-MosmnKMJxa: open: permissiondenied