一、安裝bindweb
yum install -y bind bind-chroot bind-utis
二、配置named.confshell
[root@dns /]# vi /etc/named.conf
注:在options中增長 rrset-order { order cyclic; }; 分配的會更均勻。centos
三、配置named.rfc1912.zones緩存
[root@dns /]# vi /etc/named.rfc1912.zones
四、配置正向解析bash
[root@dns /]# cd /var/named/ [root@dns named]# cp named.localhost test.com.zone(必定要和主配置文件裏面定義的zone文件名一致) [root@dns named]# vi test.com.zone
zone配置文件簡單說明:服務器
常見的正解文件 RR 相關信息網絡
[domain] IN [[RR type] [RR data]]dom
主機名. IN A IPv4 的 IP 地址curl
主機名. IN AAAA IPv6 的 IP 地址ide
領域名. IN NS 管理這個領域名的服務器主機名字.
領域名. IN SOA 管理這個領域名的七個重要參數(如上說明)
領域名. IN MX 順序數字 接收郵件的服務器主機名字
主機別名. IN CNAME 實際表明這個主機別名的主機名字.
單位:W= 周、D= 日、H= 小時、M= 分鐘。
$TTL 86400
@ IN SOA ns.helome.com. root ( # ns.test.web. 是DNS服務器的名稱
0 ; serial (d. adams) 僅做爲序列號而已
1D ; refresh 服務器的更新時間
15M ; retry 從新更新時間間隔
1W ; expiry 多久以後宣佈失敗
1H ) ; minimum 至關於緩存記憶時間
@ IN NS ns.helome.com.
@ IN MX 5 mail.helome.com. (5爲優先級別)
ns IN A 192.168.32.131
www IN A 192.168.32.131
mail IN A 192.168.32.131
五、關閉iptables
service iptables stop
六、看配置文件有沒有讀取權限
[root@dns /]# ll /var/named/
若是沒有 chmod +r /var/named/* 便可
七、設置rndc.key
rndc-confgen -r /dev/urandom -a
八、啓動bind
service named start
bind dns 宕機檢測 故障切換shell腳本
www.test.com解析有多個A記錄,下面是實現故障切換的腳本:
經過檢測網站的返回狀態碼來肯定服務器的健康情況,若是不返回或返回的狀態非200,則開始記錄一次故障,連續三次故障後開始刪除此域名的故障ip A記錄,若是以後的檢測發現服務器已經恢復,則從新添加此ip的A記錄。
要正常使用下面腳本,須要注意如下事項:
一、把域名的A記錄IP寫入/tmp/online_ip.txt文件,格式爲每行一個IP。
二、根據bind設置修改腳本中的三個變量
(vi /etc/rndc.key , 可獲取keyname和keysecret)
三、在named.conf文件中的zone添加以下代碼:
vi /etc/named.rfc1912.zones中增長
allow-update {key rndc-key;};
rndc-key修改成本身的。
#!/bin/bash #=============================================================================== #Description: this script is to automactic update dns record when website is down. #Author : www.centos.bz #文件說明: # /tmp/online_ip.txt 記錄在線的服務器ip,須要提早寫入IP,每行一個IP # /tmp/down_ip.txt 記錄有故障的服務器ip # /tmp/curl.txt 記錄curl獲取的http狀態碼 # /tmp/${server_ip}_cur_time.txt 記錄服務器出現故障的次數 #=============================================================================== #設置一些必要的變量 domain=www.test.com keyname=rndc-key keysecret=PwLjE4wQaXHnt/yQi+lY6g== #用來檢測本機網絡是否正常 function network_detect(){ ping -c1 8.8.8.8 >/dev/null 2>&1 && echo connect || exit 1 } #用來刪除DNS記錄 function del_record(){ /usr/local/bind/bin/nsupdate <<EOF key $keyname $keysecret update delete $domain A $1 send quit EOF } #用來增長DNS記錄 function add_record(){ /usr/local/bind/bin/nsupdate <<EOF key $keyname $keysecret update add $domain 3600 A $1 send quit EOF } #用來檢測在線ip列表健康狀態 function online_detect(){ if [ -s /tmp/online_ip.txt ] ;then for server_ip in `cat /tmp/online_ip.txt` ; do curl -I -l -H "Host:$domain" $server_ip -o "/tmp/curl.txt" >/dev/null 2>&1 ###判斷狀態碼是否爲200 if [ -s /tmp/curl.txt ] && grep '200 OK' /tmp/curl.txt >/dev/null 2>&1;then echo "OK" ###清空故障次數 rm -f /tmp/${server_ip}_cur_time.txt ###狀態碼非200時 else ###開始計算故障次數 cur_time=0 [ -s /tmp/${server_ip}_cur_time.txt ] && cur_time=`cat /tmp/${server_ip}_cur_time.txt` cur_time=`expr $cur_time + 1` ###當故障次數大於等於3時 if [ $cur_time -gt 3 ];then ###刪除故障ip記錄 del_record $server_ip ###從在線ip列表中刪除故障ip sed -i "/$server_ip/d" /tmp/online_ip.txt ###記錄故障ip到文件 echo $server_ip >> /tmp/down_ip.txt ###刪除記錄此ip的故障文件 rm -f /tmp/${server_ip}_cur_time.txt else ###記錄故障次數 echo $cur_time > /tmp/${server_ip}_cur_time.txt fi fi rm -f /tmp/curl.txt done fi } #用來檢測故障ip列表健康狀態 function down_detect(){ if [ -s /tmp/down_ip.txt ];then for server_ip in `cat /tmp/down_ip.txt` ; do curl -I -l -H "Host:$domain" $server_ip -o "/tmp/curl.txt" >/dev/null 2>&1 if [ -s /tmp/curl.txt ] && grep '200 OK' /tmp/curl.txt >/dev/null 2>&1;then ###添加A記錄 add_record $server_ip ###從down_ip.txt刪除故障ip sed -i "/$server_ip/d" /tmp/down_ip.txt ###從新添加此ip到online_ip.txt echo $server_ip >> /tmp/online_ip.txt fi rm -f /tmp/curl.txt done fi } network_detect online_detect down_detect