CentOS6.4 配置DNS服務器

一、安裝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設置修改腳本中的三個變量

  1. domain=www.test.com
  2. keyname=rndc-key
  3. keysecret=PwLjE4wQaXHnt/yQi+lY6g==

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
相關文章
相關標籤/搜索