DNS(Domain Name Server,域名系統)是互聯網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶方便的訪問互聯網,而不用去費力的記憶IP字符串。經過域名,最終能夠獲得該域名對應的IP地址的過程叫作域名解析。DNS協議運行在UDP洗衣上,使用的是53號端口。
html
DNS解析是目前互聯網大多數應用的實際的尋址方式;域名技術的不斷髮展,和基於域名技術出現的新技術和新思路極大的豐富了互聯網的應用;域名如今起着互聯網的一種相似於身份標記的做用,具備惟一性,所以互聯網的全球化發展也使得域名也成爲一種重要的資源linux
NS服務器在互聯網上承擔的如此重要的任務,所以其高可用性也成爲了重點。在一個區域的資源記錄經過手動或自動方式更新到單個主名稱服務器(主DNS)上,主DNS服務器能夠是一個或者多個區域的權威名稱服務器。
冗餘的DNS服務器作爲同一區域中主服務器的備份服務器,防止主服務器沒法訪問或者宕機。輔DNS服務器會按期與主DNS服務器通信,進而保證它的區域信息文件保持最新。若是不是最新的信息,輔助DNS服務器就會從主DNS服務器上獲取最新的區域數據文件副本。這種將區域文件複製到多臺名稱服務器的過程稱爲區域複製。web
因爲本次試驗要模擬整個DNS的解析流程,所以須要的8臺虛擬機,在其中5臺機器上安裝bind程序提供域名解析服務,2臺虛擬機安裝httpd(web服務)提供網頁訪問服務,剩下的一臺虛擬機模擬客戶端進行DNS查詢。
注意:
1.實驗前要關閉selinux,防火牆而且清空防火牆規則;
2.因爲機器數量較多最好保持時間同步,以避免致使實驗沒法正常運行;
3.自建文件包注意權限問題,以防出現沒法解析。數據庫
因爲僅僅是做爲模擬,所以這裏僅在douma.com的域名服務器作了主從備份,這裏僅僅提供正向解析,想了解反向解析的構建的話能夠參考以前的文章https://blog.51cto.com/11010461/2105703vim
環境清理
在全部主機上運行後端
setenforce 0 iptables -F iptables -X
搭建基礎服務
在準備作dns解析的服務器上安裝bind。緩存
yum install bind -y
在web服務器上配置httpd提供web服務服務器
#安裝httpd 135和136兩臺主機 yum install httpd -y #構建相應頁面 #192.168.99.135 echo this is web1.douma.com ! > /var/www/html/index.html #192.168.99.136 echo this is web2.douma.com ! > /var/www/html/index.html
啓動httpd 而且驗證是否可以提供服務架構
systemctl start httpd #使用curl命令訪問httpd curl + ip
douma.com主服務器192.168.99.133
編輯主服務器的配置文件負載均衡
vim /etc/named.conf
對主配置文件作以下修改
編輯域文件,建立對douma.com域的解析
vim /etc/named.rfc1912.zones
添加以下字段
zone "douma.com" IN { type master; file "douma.com.zone"; };
建立douma.com.zone文件
cd /var/named/ vim douma.com.zone
編輯添入信息
$TTL 1D @ IN SOA dns1.douma.com. admin.douma.com.( 2018060205 ;序列號 1D ;刷新時間 2H ;重試時間 3D ;過時時間 1H) ;否認答案的TTL值 NS dns1 NS dns2 dns1 IN A 192.168.99.133 dns2 IN A 192.168.99.134 @ IN A 192.168.99.135 @ IN A 192.168.99.136 www IN A 192.168.99.135 www IN A 192.168.99.136 * IN CNAME www
修改文件權限
chown :named douma.com.zone chmod 640 douma.com.zone
啓動bind服務而且驗證是否能夠解析
systemctl start named systemctl status named #dig命令在bind-utils包中,若是安裝bind時候未綁定安裝能夠後續手動安裝 dig www.douma.com @192.168.99.133
正常解析
配置從服務器
從服務器192.168.99.134
編輯bind主配置文件
vim /etc/named.conf
編輯域配置文件添加從服務器配置
vim /etc/named.rfc1912.zones
添加以下字段
zone "douma.com" IN { type slave; masters {192.168.99.133;}; file "slaves/douma.com.zone"; };
這裏不用手動建立douma.com.zone,在服務啓動後會自動去主服務進行同步
啓動服務
systemctl start named
在從服務器上驗證是否可以解析
dig www.douma.com @192.168.99.134
com地址是192.168.99.132
編輯配置文件
vim /etc/named.conf
編輯named.rfc1912.zones添加解析信息
vim /etc/named.rfc1912.zones #添加如下信息 zone "com" { type master; file "com.zone"; };
建立com.zone
cd /var/named/ vim com.zone
添加對應解析信息
$TTL 1D @ IN SOA dns.com. admin.com. ( 2018010201 1D 2H 3D 3H) NS dns1 douma NS dns2 douma NS dns3 dns1 A 192.168.99.132 dns2 A 192.168.99.133 dns3 A 192.168.99.134
# 修改權限 chown :named com.zone chmod 640 com.zone
啓動服務而且驗證是否能夠查詢
systemctl start named dig www.douma.com @192.168.99.132
根服務器的IP地址192.168.99.131
編輯/etc/named.conf
vim /etc/named.conf
因爲的模擬根服務器,所以在它之上不能有其餘的dns服務器,要註釋掉配置文件最後的根域
建立根域定義
vim /etc/named.rfc1912.zones
添加根域信息
zone "." { type master; file "root.zone"; };
建立域文件
cd /var/named/ vim root.zone
編輯根解析庫
$TTL 1D @ IN SOA dns1. admin. ( 20180601 1D 2H 3D 1H) NS dns1 com NS dns2 dns1 A 192.168.99.131 dns2 A 192.168.99.132
修改文件權限
chown :named root.zone chmod 640 root.zone
啓動服務並作驗證
systemctl start named dig www.douma.com @192.168.99.131
ISP地址192.168.99.130
編輯/etc/named.conf文件
vim /etc/named.conf
因爲是本身搭建的模擬DNS運行的系統,所以須要修改named.ca文件,將根服務器指向本身構建的根,同時因爲僅僅是ISP的服務器,無需定義域,僅僅負責查詢便可。
編輯named.ca文件
vim /var/named/ vim named.ca
啓動服務並進行驗證
systemctl start named dig www.douma.com @192.168.99.130
客戶端僅須要將DNS指向ISP服務器便可
vim /etc/resolv.conf #添加dns信息 nameserver 192.168.99.130
驗證是否能夠解析
dig www.douma.com @192.168.99.130
使用curl命令請求web端
curl www.douma.com
dns的解析是簡單的輪詢
雖然DNS的輪詢也是一種負載均衡的方式,成本極低,可是其缺點一樣明顯,DNS做爲簡單輪詢沒法理解後端服務器的承載能力;輪詢過程僅僅負責將請求轉交,一旦轉交的目標主機故障仍會轉交,沒法容錯;要保證數據最新就要設置較小的刷新時間,但會形成額外的DNS流量開銷;一旦某臺服務器宕機,修改DNS設置後,仍需一段時間才能生效。
DNS輪詢受到各方的影響比較嚴重,並不能算一種很好的負載均衡技術
https://web.stanford.edu/~riepel/lbnamed/
在 named.conf 中能夠設置 bind 的 round-robin 的給出結果的順序:
options {
rrset-order { order random; };
};
rrset-order 支持三個參數:fixed, random, cyclic 。fix 會將多個A記錄按配置文件的順序固定給出;random 會隨機給出;cyclic 會循環給出。