模擬構建DNS解析流程
DNS初步認識
??DNS(Domain Name Server,域名系統)是互聯網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶方便的訪問互聯網,而不用去費力的記憶IP字符串。通過域名,最終可以得到該域名對應的IP地址的過程叫做域名解析。DNS協議運行在UDP洗衣上,使用的是53號端口。
??
??
DNS的重要性以及高可用(DNS冗余)
重要性
??
??DNS解析是目前互聯網大多數應用的實際的尋址方式;域名技術的不斷發展,和基於域名技術出現的新技術和新思路極大的豐富了互聯網的應用;域名現在起著互聯網的一種類似於身份標記的作用,具有唯一性,因此互聯網的全球化發展也使得域名也成為一種重要的資源
冗余(高可用)
??
??NS服務器在互聯網上承擔的如此重要的任務,因此其高可用性也成為了重點。在一個區域的資源記錄通過手動或自動方式更新到單個主名稱服務器(主DNS)上,主DNS服務器可以是一個或者多個區域的權威名稱服務器。
??冗余的DNS服務器做為同一區域中主服務器的備份服務器,防止主服務器無法訪問或者宕機。輔DNS服務器會定期與主DNS服務器通訊,進而保證它的區域信息文件保持最新。如果不是最新的信息,輔助DNS服務器就會從主DNS服務器上獲取最新的區域數據文件副本。這種將區域文件復制到多臺名稱服務器的過程稱為區域復制。
??
??
環境與架構圖
??
軟件環境
??由於本次試驗要模擬整個DNS的解析流程,因此需要的8臺虛擬機,在其中5臺機器上安裝bind程序提供域名解析服務,2臺虛擬機安裝httpd(web服務)提供網頁訪問服務,剩下的一臺虛擬機模擬客戶端進行DNS查詢。
??1.實驗前要關閉selinux,防火墻並且清空防火墻規則;
??2.由於機器數量較多最好保持時間同步,以免導致實驗無法正常運行;
??3.自建文件包註意權限問題,以防出現無法解析。
實驗整體架構圖與構建思路
??由於僅僅是作為模擬,因此這裏僅在douma.com的域名服務器做了主從備份,這裏僅僅提供正向解析,想了解反向解析的構建的話可以參考之前的文章http://blog.51cto.com/11010461/2105703
??
??
實驗記錄
??
搭建流程
??
基礎配置
??
環境清理
在所有主機上運行
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的dns服務並且配置主從
??
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服務器
??
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域名緩存服務器
??
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
Client端設置
??
客戶端僅需要將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 會循環給出。
模擬構建DNS解析流程