DNS概述
DNS(Domain Name System)是什麼?
DNS —— 域名系統。用來把機器名字轉換成IP地址。 網絡終端都有一個唯一的IP地址用於通信,就好象我們每個人都有住址用來收信。
IPv4長這樣:192.168.1.1,255.255.255.255
IPv6長這樣:2001:0DB8:02de:0000:0000:0000:0000:0e13
機器很喜歡這樣的格式,換成二進制非常容易處理。但是讓你每次上網都要在瀏覽器上輸入這麼一長串東西,不是很抓狂?所以我們需要Domain(域名)也就是機器名字來指代某個主機的IP地址。DNS —— 權威名稱服務器
存儲並提供某區域 ( 整個 DNS 域或 DNS 域的一部分 ) 的實際數據。 權威名稱服務器的類型包括:
Master : 包含原始區域數據。有時稱作 “主要 ”名稱服務器
Slave : 備份服務器 , 通過區域傳送從 Master 服務器獲得的區域數據的副本。有時稱作 “次要 ”名稱服務器 非權威 / 遞歸名稱服務器
客戶端通過其查找來自權威名稱服務器的數據。遞歸名稱服務器的類型包括 僅緩存名稱服務器 : 僅用於查找 , 對於非重要數據之外的任何內容都不具有權威性
DNS 查詢
客戶端上的 Stub 解析器 將查詢發送至 /etc/resolv.conf 中的名稱服務器
如果名稱服務器對於請求的信息具有權威性 , 會將權威答案發送至客戶端否則 , 如果名稱服務器在其緩存中有請求的信息 ,則會將非權威答案發送至客戶端
如果緩存只能該沒有信息 , 名稱服務器將搜索權威名稱服務器以查找信息 , 從根區域開始 , 按照 DNS 層次結構向下搜素 , 直至對於信息具有權威性的名稱服務器 , 以此爲客戶端獲得答案。在此情況中名 ch 稱服務器將信息傳遞至客戶端並在自己的緩存中保留一個副本 , 以備以後查找
具體的dns查詢中間過程:
- 第一步:客戶機提出域名解析請求,並將該請求發送給本地的域名服務器。
- 第二步:當本地的域名服務器收到請求後,就先查詢本地的緩存,如果有該紀錄項,則本地的域名服務器就直接把查詢的結果返回。
- 第三步:如果本地的緩存中沒有該紀錄,則本地域名服務器就直接把請求發給根域名服務器,然後根域名服務器再返回給本地域名服務器一個所查詢域(根的子域)的主域名服務器的地址。
- 第四步:本地服務器再向上一步返回的域名服務器發送請求,然後接受請求的服務器查詢自己的緩存,如果沒有該紀錄,則返回相關的下級的域名服務器的地址。
- 第五步:重複第四步,直到找到正確的紀錄。
- 第六步:本地域名服務器把返回的結果保存到緩存,以備下一次使用,同時還將結果返回給客戶機。
以圖片方式描述整個過程:
緩存 DNS 服務器
BIND 是最廣泛使用的開源名稱服務器 , 在 RHEL 中 , 通過 bind 軟件包提供
防火牆開啓端口是 53/TCP 和 53/UDP
BIND 的主配置文件是 /etc/named.conf /var/named ,目錄包含名稱服務器所使用的其他數據文件
dig解析的各個部分含義
//dig解析域名,dns高速緩存機制會使第一次解析的保存下來後面就會非常快
"; <<>> DIG ... " //取地址時的系統
##每個標題指出關於查詢和答案的信息 , 其中包括響應狀態和設置的任何特殊標記 ( aa 表示權威答案 , 等等 )
QUESTION // 提出實際的 DNS 查詢
ANSWER // 響應 ( 如果有 )
AUTHORITY // 負責域 / 區域的名稱服務器
ADDITIONAL // 提供的其他信息 , 通常是關於名稱服務器底部的註釋指出發送查詢的遞歸名稱服務器以及獲得響應所花費的時間
##DNS 排錯信息: 顯示來自 DNS 查找的詳細信息 , 其中包括爲什麼查詢失敗
status:
NOERROR // 查詢成功
NXDOMAIN // DNS 服務器提示不存在這樣的名稱
SERVFAIL // DNS 服務器停機或 DNSSEC 響應驗證失敗
REFUSED // DNS 服務器拒絕回答 ( 也許是出於訪問控制原因 )
迴環藉口 : lo : 127.0.0.1
//系統內部的神經線,內部服務與服務之間的溝通接口
搭建dns高速緩存
server服務端設置:
yum install bind -y ##安裝軟件包
systemctl start named ##啓動這裏bind軟件下載的叫named服務
這裏第一次開啓named服務會卡,晃動鼠標或敲擊鍵盤生效
因爲涉及到文件/dev/random這裏存放的是鍵盤鼠標軌跡的加密信息
/etc/rndc.key 放的是dns的加密key,也是dns key的有效書寫格式
配置防火牆,使火牆策略添加使用DNS
rpm -qc bind //查看下載的安裝包涉及的文件
//其中named.root(有時也稱爲named.ca,都是指的同一個東西,大家的習慣不同嘛)中包含的是目前全球頂級域名服務器地址信息
man named ,可以發現其中介紹了配置文件/etc/named.conf
首先簡單講解 /etc/named.conf 的語法及配置信息的含義:
語法:
// 或 # 至行末尾是註釋 ;/* 與 */ 之間的文本也是註釋 ( 可以跨越多行 )
指令以分號結束 (;)
許多指令認爲地址匹配列表放在大括號中、以 CIDR 表示法表示的IP 地址或子網列表中 , 或者命名的 ACL 中 ( 例如 any; [ 所有主機 ] 和 none; [ 無主機 ] )
文件以 options 塊開始 , 其中包含控制 named 如何運作的指令
zone 塊控制 named 如何查對於其具有權威性的根名稱服務器和區域指令:
listen-on 控制 named 偵聽的 IPv4 地址
listen-on-v6 控制 named 偵聽的 IPv6 地址
allow-query 控制哪些客戶端可以向 DNS 服務器詢問信息
forwarders 包含 DNS 查詢將轉發至的名稱服務器的列表( 而不是直接聯繫外部名稱服務器 ; 在設有防火 牆的情況中很有用 )
所有這些指令會將打括號中以分號分隔的元素視爲地址匹配列表 .
如:
listen-on { any; }; ##對所有人可偵聽
vim /etc/named.conf 配置服務配置文件
11 listen-on port 53 { any; }; //將所有網絡的53端口打開
17 allow-query { any; }; //允許任何人詢問
18 forwarders {172.25.254.250; }; //轉發器,如果不知道IP,詢問這個IP。這個IP需聯網
//轉發器的格式:
options {
forwarders { 192.168.24.35; 192.168.24.36; }; //多個ip的填寫方式
};
systemctl restart named 重啓服務生效
*tips :
轉發機制:當你設置了轉發器後,所有非本域的和在緩存中無法找到的域名查詢都將轉發到設置的 DNS 轉發器上,由這臺 DNS 來完成解析工作並做緩存,因此這臺轉發器的緩存中記錄了豐富的域名信息。因而對非本域的查詢,很可能轉發器就可以在緩存中找到答案,避免了再次向外部發送查詢,減少了流量。
某些網絡連接不鼓勵向本地以外發送很大的數據流量,這要麼是因爲網絡連接是按流量計費的,或網絡連接本身是帶寬不足。在這樣的情況下,如果想將發往外部的 DNS 流量限制到儘可能的小,就需要使用 BIND 的轉發機制。或者你的網絡中只有一臺機器能連接到 Internet ,而你在這臺機器上運行了 BIND ,那麼你可以將這臺 BIND 作爲內部網絡中的其他 BIND 的轉發器,使得其他 DNS 也能查找 Internet 域名。
注意 ! :
這裏要注意,轉發器本身不用做任何設置,而是對需要轉發器的其他 DNS server 做以上配置。還有,如果該 DNS Server 無法聯繫到轉發器,那麼 BIND 會自己嘗試解析。
client端設置:
vim /etc/resolv.conf
servername 172.25.254.109 //配置DNS,IP爲severIP
dig 域名檢測效果:
//如果是第一次訪問比較慢,後面就非常快了。
NDS正向解析 從域名解析IP —— A記錄
dig -> 端口53 -> 端口對應的ip -> name.conf -> named.rfc1912.zones -> goodday.com.zone
1、vim /etc/named.conf 註釋掉forwarders
2、vim /etc/named.rfc1912.zones
zone "goodday.com" IN { ##goodday.com爲域名,自己寫
type master;
file "goodday.com.zone"; ##goodday.com.zone爲文件名稱,自己寫
allow-update { none; };
};
3、cp -p /var/named/named.localhost /var/named/goodday.com.zone
- 複製named.localhost爲goodday.com.zone,因爲/var/named 這裏面的文件權限不一樣所以-p代權限複製
- 這裏文件的名字要和上面文件的名字一樣了
4、vim /var/named/goodday.com.zone
DNS 區域採用資源記錄的形式存儲信息。每條資源記錄均具有一個類型 , 表明其保留的數據類型
A : 名稱至 IPv4 地址
AAAA : 名稱至 IPv6 地址
CNAME : 名稱至 ”規範名稱 “ ( 包含 A/AAAA 記錄的另一個名稱 )
PTR :IPv4/IPv6 地址至名稱
MX : 用於名稱的郵件交換器 ( 向何處發送其電子郵件 )
NS : 域名的名稱服務器 SOA :” 授權起始 “ , DNS 區域的信息 ( 管理信息 )
$TTL 1D //客戶端緩存最大訪問限額 ,一天(類似記錄時間,時間到了就重新問)'
@ "(相當於goodday.com)" IN SOA 名字 //每串字符後面加.(點不加的話會自動補齊goodday.com然後還是沒有點,所以不行)
dns.goodday.com. "(dns解析)" root.goodday.com."(誰來管)"
NS dns.westos.com."(注意最後的點)"
dns A 172.25.254.100
www A 172.25.254.222 //dns不會檢測這個地址通不通,寫什麼就是什麼
news A 172.25.254.133
news A 172.25.254.233 //和上面的www一起組成成爲"輪叫機制",使主機的壓力可以分攤
5、systemctl restart named
6、dig查看ANSWER SECTION 是不是自己設置的輪叫機制ip
dig news.goodday.com :
第一次:
第二次:
//在goodday.com.zone 中寫入的順序,news出現時ANSWER SECTION 先回答的是交替輪換的,第一次172.25.254.133在上,第二次172.25.254.233在上,這樣交替爲主機分攤壓力
DNS反向解析 從IP解析域名 —— PTR記錄
dig -> 端口53 -> 端口對應的ip -> name.conf -> named.rfc1912.zones -> goodday.com.ptr
1、vim /etc/named.rfc1912.zones
43 zone "254.25.172.in-addr.arpa" IN { ##網段必須反着寫
44 type master;
45 file "goodday.com.ptr"; ##名字可以自己設置
46 allow-update { none; };
2、cp -p /var/named/named.loopback /var/named/goodday.com.ptr
3、vim /var/named/goodday.com.ptr
//dns不變,指向自己 ,IP的反向解析和域名的正向解析是兩種不同的系統,不必要一一對應。
4、systemctl restart named
一定要將兩個文件都填寫完並正確纔可以重啓named成功。
5、dig -x 172.25.254.222
-x 是反向,輸入ip查詢:
雙向解析 即不同的IP詢問同一個域名,解析出不同的IP
實現在172.25.254.9(foundation9)訪問與其他(包括自己dns-server) 訪問到解析的地址不同
man 5 named.conf
在view中發現寫法:
1、vim /etc/named.conf
在/etc/named.conf中添加修改,對172.25.254.9單獨設置一個解析方式,然後額外創建各自的name.rfc1912(3).zones
52 /* zone "." IN { ##註釋掉第52行到59行
53 type hint;
54 file "named.ca";
55 };
56
57 include "/etc/named.rfc1912.zones";
58 include "/etc/named.root.key";
59 */
include "/etc/named.rfc1912.zones"; ##表示在172.25.254.9用戶訪問時看1912這個文件
include "/etc/named.rfc1913.zones"; ##表示在其他用戶訪問時看1913這個文件
2、cp -p /etc/named.rfc1912.zones /etc/named.rfc1913.zones
3、vim /etc/named.rfc1913.zones
//因爲是要讀新的文件,所以要更換文件,這裏就是更換後綴
4、cp -p /var/named/goodday.com.zone /var/named/goodday.com.inter
5、vim /var/named/goodday.com.inter
systemctl restart named 生效,用兩個主機分別測試就好
注意 :
在操作時,一定保證要實驗的客戶端的網關要設置成爲172.25.254.109(服務端)從文件訪問來看:
即爲從同一個端口進入ip,訪問同一個文件/etc/named.conf
然後分頭,不同分類的ip分別進入自己對應的named.rfc….zones 然後讀自己的…文件
同樣原理,可以實現多個網絡都分別分開,即多向解析
搭建簡單DNS集羣
爲了分擔dns的壓力,我們需要再配置一臺服務器,這裏爲209 同樣與開始配置高速緩存dns方法相同
1.下載bind ,開啓服務, 設置火牆策略添加dns, 設置/etc/resolv.conf文件的nameserver
2、編寫基本的/etc/named.conf
11 listen-on port 53 { any; };
17 allow-query { any; };
//也可以將它們直接註釋掉,直接註釋的含義就是全開
3、vim /etc/named.rfc1912.zones
zone "goodday.com" IN {
type slave; //表示輔助
masters{ 172.25.254.109; };
file "slaves/goodday.com.zone";//文件中填寫的名稱隨意,但是創建文件名要相同
allow-update { none; };
};
注意:/var/named相當於dns服務的根目錄,A記錄存放的位置,所以設置file"slaves/..."
ls -l /var/named
4、systemctl restart named
5、dig www.we.com
上述方法如果主DNS的內容改變,那麼副DNS上不會同步,同步需要主服務器做以下操作:
注意: 是主server端rm -fr /var/named/slaves/… , 重啓服務生效
但是,這麼長的代碼時間,將會對網站造成非常大的影響,這是運維絕不能出現的問題,所以要不用重啓的方法,修改文件/etc/named.rfc1912.zones , /var/named/goodday.com.zone
*) vim /etc/named.rfc1913.zones
25 zone "goodday.com" IN {
26 type master;
27 file "goodday.com.zone";
28 allow-update { none; };
29 also-notify {172.25.254.209;}; ##添加這行,開啓同步
30 };
*)vim /var/named/goodday.com.zone
$TTL 1D
@ IN SOA dns.goodday.com. root.goodday.com. (
2017080801 ; serial ##服務編號,同步時在讀是時候查看的信息,前面的數字不同,同步,相同就不同步
1D ; refresh ##刷新的時間
1H ; retry ##若是詢問失敗,再次詢問的時間
1W ; expire ##到期日,這裏是一萬年
3H ) ; minimum ##最短的到期日
"這裏面更改ip,但是還要注意上面的每個參數的含義"