1. 程式人生 > >馬哥學習----李洋個人筆記----DNS學習心得

馬哥學習----李洋個人筆記----DNS學習心得

完整 client dom 回復 can 保存 lib 外網 更新

DNS服務

DNS:Domain Name Service 是應用層協議

基於C/S(客戶端/服務端來實現),共有2個端口分別是 53/udp以及 53/tcp

BIND:Bekerley Internat Name Domain(目前互聯網市場上最火爆的DNS軟件)

ISC (www.isc.org)

平時上網在瀏覽器裏輸入 www.magedu.com ,這中格式叫做FQDN,加上協議一同構成域名,而DNS的主要作用是將域名解析為IP地址。這樣才能訪問這個網站的服務器.

DNS名稱解析配置文件linux的位於/etc/hosts, WINDOW的位於/system32/drivers/etc/hosts

其格式為:

122.10.117.2 www.magedu.com

93.46.8.89 www.google.com

配置好後,在瀏覽器輸入配置好的域名之後,直接將地址轉化為指定IP,不再經過DNS。這種情況可以避免DNS服務器出問題後,導致網址無法訪問(比如有時候QQ能上,但是網頁打不開,原因就在於此,因為QQ是直接訪問IP,不經過DNS)

如果想平時使用DNS,當DNS出錯時候再讀取host當中配置的IP。可以編輯/etc/nsswitch.conf中的內容,當其中的files 和 dns位置掉過來即可.

技術分享圖片

本地配置的/etc/hosts文件,多用於企業內部集群當中.

每臺機器上都配置/etc/hosts文件,叫做分散式解析域名(每一臺主機上都有IP與域名的對應表),30—50臺計算機規模

所有主機的IP及域名,放在一臺主機上,叫做NS(集中式解析域名)(其他主機解析域名時,都通過這臺主機上的hosts表來進行) 300-500臺計算機規模

分散式和集中式都無法解決全球互聯網的域名解析問題,所以出現了DNS域名,綜合了集中式和分散式的特點.

DNS域名的結構:分為

根域

? 一級域名:Top Level Domain: tld

com, edu, mil, gov, net, org, int,arpa

三類:組織域、國家域(.cn, .ca, .hk, .tw)、反向域

? 二級域名

? 三級域名

? 最多127級域名

? ICANN(The Internet Corporation for Assigned Names and Numbers)

互聯網名稱與數字地址分配機構,負責在全球範圍內對互聯網通用頂級域名

(gTLD)以及國家和地區頂級域名(ccTLD)系統的管理、以及根服務器系統的管理

FQDN命名規則,分為2部分,www.magedu.com 中,www是第一部分,其後是第二部分.第一部分叫做主機名或別名. magedu.com是第二部分,叫做域名. 其實第二 部分尾部是有個.的。這個.就相當於根域,而com則是根域下面的子域,同理,magedu.com中的magedu也是com中的子域,具體結構如下圖:

技術分享圖片

網上鄰居的名字解析方式,是基於廣播來實現的。所以只能在局域網(企業內部網)來使用。

完整的根域及子域效果圖

技術分享圖片

####################################################################

簡述將域名www.yangyang.com.cn轉換為IP的過程

將輸入的域名從右向左解析,首先由本地的DNS訪問根域,然後依次匹配匹配對應的國家域cn,組織域com,從子域中不停向下層層展開,直至出現匹配的IP地址。此外,本地DNS還會將訪問過的地址緩存起來,提高本地其他用戶的訪問速度.PS:域名轉換為IP是DNS來負責,IP最終轉換為網卡的MAC地址則是ARP協議來負責。

####################################################################

在每個域中,都有自己單獨的DNS服務器,但是根域的服務器只有13個,因為網絡的數據報文格式.限定了只能綁定13個.

DNS查詢類型:

遞歸查詢(第一臺DNS服務器去根域哪一層一層查找,直至找到或報錯)

叠代查詢(第一臺DNS服務器去根域哪查找,雖然沒直接給出ip,但推薦了可能有ip的的位置,也就是子域的DNS地址)

名稱服務器:域內負責解析本域內的名稱的主機

? 解析類型:

FQDN --> IP 正向解析(名字到IP)

IP --> FQDN 反向解析(IP到名字,比如郵件服務,需要反向解析+正向分析一塊,來判斷服務器是否是合法的郵件服務器)

註意:正反向解析是兩個不同的名稱空間,是兩棵不同的解析樹

DNS解析之 一次完整的查詢請求經過的流程:

# Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(叠代) --> 根--> 頂級域名DNS--> 二級域名DNS…

# 客戶機—--先去找hosts文件中有無匹配的-----再去看DNS的緩存中有無匹配只有windows的客戶機有緩存,linux中沒有緩存,使用linux去測試DNS的ping服務,ping通的地址會不斷變化—然後去服務器(遞歸)-----服務器緩存---服務器(叠代)----根DNS---頂級域名(.com結尾之類的)----二級域名DNS

解析答案:DNS沒有一個檢查結果的行為,所以返回的答案可能存在如下情況:

肯定答案:windows會保存肯定答案,linux不會保存

否定答案:請求的條目不存在等原因導致無法返回結果 或者是禁止上網的時候,故意返回一個錯誤答案,比如國內上不了facebook,google等網站.

權威答案:給出的地址是本身就擁有的。

非權威答案:當給出的IP地址不同是本身擁有,是問別的DNS服務器才得到的,會提示非權威答案。

要想實現DNS企業內部服務,需要安裝DNS的服務端bind

BIND的安裝配置:

程序名:named,unbound

程序包:yum list all bind*

服務器 bind 如果要將主機設置為轉發器,必須安裝服務器

相關庫 bind-libs

數據庫 /var/named 記錄IP與域名對應的 數據解析庫

客戶端 bind-utils 一般網絡服務都自帶,不用特意安裝

bind-chroot: /var/named/chroot/

安裝後,檢查下selinux是否關閉 /etc/selinux/config 將SELINUX後的值改為disabled即可.然後查看下防火墻裏面有無策略 # iptables –vnL(有的話會顯示很多信息,沒有則很少)如果防火墻提示iptables v1.4.21: unknown option "-vnl" 可能是centos7默認了使用firewalld防火墻的緣故,按下面步驟來解決:

1、停止並屏蔽firewalld服務

停止 systemctl stop firewalld

屏蔽 systemctl mask firewalld

2 安裝iptables-service軟件包

# yum install iptables-services

3、在引導時啟用iptables服務

# systemctl enable iptables

4、啟動iptables服務

# systemctl start iptables

5、保存防火墻規則

# service iptables save

DNS服務器的端口號有兩個:分別是 53/udp以及 53/tcp,安裝完bind後啟動下改服務即可查看:

技術分享圖片

很明顯,作為一個對外提供服務的DNS服務器,其端口不能綁定在回環地址上,所以,編輯 vim /etc/named.conf文件

技術分享圖片

如上圖所示,這樣將配置文件修改完畢.其他配置信息如下圖:

技術分享圖片

DNS選項,除了解析數據庫外,其余無關緊要DNS服務配置三大項之一

技術分享圖片

日誌文件,DNS服務配置三大項之二

技術分享圖片

區域文件, DNS服務配置三大項之三.區域文件可以存在多個,每個文件用來對應不同的區域.比如 file1 對應著 magedu.com的域,而file2 對應著 wang.com的域.這樣DNS服務器在對外提供服務時,凡是遇到訪問magedu.com的需求一律從file1當中尋找,凡是遇到訪問wang.com的需求一律從file2當中尋找.

配置好後,使配置文件生效

# rndc reload 或者 systemctl reload named

這樣設置好後的DNS服務器,屬於緩存DNS服務器(轉發器),其結構圖如下

技術分享圖片

由此圖可以看出,轉發器只是幫主機,去跟域上查詢索要訪問的域名,在安裝bind軟件的時候,根域的IP地址就寫入到了文件中(/var/named/named.ca)

DNS服務器的類型:

1 主DNS服務器:管理和維護所負責解析的域內解析庫的服務器

2 從DNS服務器:從主服務器或從服務器“復制”(區域傳輸)解析庫副本

3 緩存DNS服務器(轉發器)

序列號:解析庫版本號,主服務器解析庫變化時,其序列遞增

刷新時間間隔: 從服務器從主服務器請求同步解析的時間間隔

重試時間間隔:從服務器請求同步失敗時,再次嘗試時間間隔

過期時長:從服務器聯系不到主服務器時,多久後停止服務

“通知”機制:主服務器解析庫發生變化時,會主動通知從服務器

####################################################################

搭建DNS轉發器:

1 選擇一臺主機當DNS轉發器,安裝bind

2 將其配置文件/etc/named.conf,修改其中的兩項為:

技術分享圖片

3 將客戶機的DNS服務器,指向做轉發器的主機IP地址。

4 編輯/etc/resolv.conf文件,只保留轉發器器的的主機IP地址,其余刪除

技術分享圖片

5 完成(想上外網的話,只要客戶機上有能連通外網的網卡,那麽就可以通過這個DNS轉發器來實現)

####################################################################

使用dig命令可以檢測,為訪問的域名提供解析服務的,是那個DNS服務器.

技術分享圖片

若想指定用哪個DNS服務器來測試 ,可以用@+要測試的DNS服務器地址

# dig www.baidu.com @192.168.227.7

nslookup ,host,dig 指定用那個DNS服務器來解析指定的域名.如下圖:

技術分享圖片

Windows也支持這個命令.而host和dig只能在linux上使用.

# host + 域名+指定DNS的IP地址

# host www.baidu.com 192.168.227.7(使用227.7來解析百度的IP地址)

# dig+域名+@指定DNS的IP地址.

# dig www.baidu.com @192.168.227.7(使用227.7來解析百度的IP地址)

####################################################################

查看權威答案的IP地址(即是那一臺DNS服務器來解析要訪問的域名)

使用dig -t 可以查看指定的域名,是由那臺DNS服務器來維護的.

技術分享圖片

ANSWER SECTION那一項就是說明是由哪些DNS服務器維護的

技術分享圖片

可以看出是dns9和dns10來進行維護,那麽用dig查看下IP地址

# dig dns10.hichina.com 得到很多IP地址

技術分享圖片

用得到的IP地址去解析magedu.com,就會提示是權威答案了

# dig magedu.com @106.11.141.126

因為這個IP它本身就負責這magedu.com域名的解析服務.

技術分享圖片

####################################################################

####################################################################

實現配置正向解析的主DNS服務器(名字—IP為正向)

分析: 要想實現解析不同的域,需要配置數據庫文件.比如 文件1專門解析.com結尾的,文件2解析.gov結尾的...,配置文件默認在 /etc/named.conf中

1 ×××配置文件,準備補充域的信息

技術分享圖片

2 打開/etc/named.rfc1912.zones文件,在當中添加如下內容:

技術分享圖片

至此,區域信息建立起來了.接下來建立區域信息表

3 建立IP與域名的對應文件(存放在/var/named)

將/var/named/named.localhost復制一份當做模板文件來修改。PS

直接# cp /var/named/named.localhost /var/named/magedu.com.cone

# 這樣是錯誤的,因為named文件夾下的所屬人不是root用戶,而是named.

技術分享圖片

# cp –a /var/named/named.localhost /var/named/magedu.com.cone

技術分享圖片

復制過來的名字,必須與區域信息中設定的名字一致

4打開資源解析庫 /var/named/magedu.com.cone文件的內容,如下圖:

技術分享圖片

將其修改為下圖:

技術分享圖片

修改完畢後,使用如下命令來檢查配置文件,和zone文件有無錯誤

檢查配置文件的命令 : # named-checkconf 如果有錯誤會給出提示:

技術分享圖片

檢查zone資源解析庫的命令 named-checkconf +要檢查的域名 +庫文件的路徑

# named-checkzone magedu.com /var/named/magedu.com.cone

# magedu.com是要檢查的域名,magedu.com.cone是剛配置的解析庫的名字。

必須寫上絕對路徑,否則報錯。

技術分享圖片

註意再查看下客戶端的DNS配置

# cat /etc/ resolv.conf ,確保裏面只有DNS服務器的IP

技術分享圖片

5 配置成功了,重啟服務 # systemctl restart named後,

來做下實驗 .執行 # dig www.magedu.com

按照資源解析庫的配置,應該出來1.1.1.1或1.1.1.2兩個地址的一個

技術分享圖片

####################################################################

配置區域解析庫

區域解析庫由眾多RR(即資源記錄)組成:

記錄類型分為:A, AAAA, PTR, SOA, NS, CNAME, MX

最重要的三條記錄類型: A SOA NS 這三個必須存在

? SOA: 起始授權記錄;一個區域解析庫有且僅能有一個SOA記錄, 必須位於解析庫的第一條記錄

? A: IP4地址,用於FQDN --> IP4

? AAAA: IP6地址, FQDN --> IPv6

? PTR: 反向解析 ,IP --> FQDN

? NS: 專用於標明當前區域的DNS服務器

? CNAME別名記錄

? MX: 郵件交換器

資源記錄定義的格式:(每一種類型的格式都是這5條)

語法:name [TTL] IN rr_type value

1 Name 資源解析庫的名字,與區域信息中,設定的名字必須一致。

2 TTL可從全局繼承,這一項是設置它的緩存時間,默認以秒為範圍,假設設置為一天的話,那麽就是86400(這個是默認值)可以省略不寫.

3 IN internet記錄,多個IN記錄重復的時候,從第二個開始IN可以不寫.

4 rr_type 資源類型的分類,包括了A, AAAA, PTR, SOA, NS, CNAME, MX

這幾種.

5 value (各種各樣的)值,根據類型的不同,值的數量也不同。

舉例:資源類型A/AAAA的格式:

域名 ttl IN RR(A/AAAA) IP4(6)地址(地址就相當於A/AAAA值)

1 域名:不用全寫,比如www.baidu.com 只寫baidu即可,www是主機或別名,不是域名,而.com因為這個資源解析庫就是為.com來準備的,所以會自動補上.com.(PS,如果一定要寫.com的話,那麽應寫為baidu .com. 沒有最後面的.的話,會認為後面還有,系統會繼續追加 結果變為了 baidu.com.com.)

2 TTL不寫即為默認值,也就是86400秒(一天)

3 IN 為網絡信息,多個IN時候,從第二個開始,就可以忽略不寫

4 RR(A/AAAA) 設置類型為A/AAAA

5 IP4(6)的地址

PS:

@可用於引用當前區域的名字,所以填寫SOA值的時候,郵箱信息中的@只能寫為. 比如郵箱 [email protected] 只能寫為 mage.magedu.com

同一個名字可以通過多條記錄定義多個不同的值;此時DNS服務器會以輪詢方式響應(實現負載均衡),如下圖

技術分享圖片

同一個值也可能有多個不同的定義名字;通過多個不同的名字指向同一個值進行定義;此僅表示通過多個不同的名字可以找到同一個主機

RR類型當中,最重要的是 SOA和NS記錄.

對一個區域來說,SOA記錄必須要有,必須先放在文件的第一行,第二行寫NS記錄,接下來才是A記錄.

SOA記錄了當前域的一些必要信息, 比如當前域的名字為magedu.com,包括誰是magedu.com域的管理員,管理員的郵箱,提供magedu.com域的服務器(至少一個,可多個,如存在多個,需要指明那個是主服務器 master,那些是從服務器 slave)

主從服務器之間,更新數據的方式有兩種: push(推)和pull(拉).

push是主服務器通知從屬服務器更新數據,通過版本號來實現.設版本號為1,當數據庫裏的內容發生改變時,需要手動將版本號加1,這樣從屬服務器就會通過對比數據庫的版本號來確定,是否需要更新數據庫.(更新數據庫後,不修改版本號,從屬服務器不會更新數據庫)

pull是從屬服務器按時間,主動問詢主服務器,實現更新數據庫的方式.

比如間隔多長時間同步一次,如果同步失敗了,間隔多久再試一次.以及多久沒同步的時候.來清理一次從服務器上的過期信息.

此外,當一直被詢問錯誤的域名時候,會將否定答案緩存在對方的客戶端上,如果再訪問就直接用客戶端的緩存會來回復客戶機,不再經過服務器.這些否定答案的緩存時間,即不存在的,否定答案的緩存時長

SOA記錄示例:

magedu.com.(名字) 86400(TTL) IN(網絡信息) SOA ns.magedu.com.(類型), nsadmin.magedu.com. (郵箱) value(值),包括下面的(序列號, 刷新時間, 重試時間, 過期時間, 否定答案的TTL值)

2015042201 ;序列號------也就是版本號

2H ;刷新時間-----------從服務器去主動詢問主服務器數據庫的時間間隔

10M ;重試時間-----------如果主動詢問失敗,間隔多久再嘗試

1W ;過期時間-----------如果從服務器遲遲不能和主服務器進行同步更新,那麽多久從服務器上的數據庫信息過期。

1D ;否定答案的TTL值---否定答案的緩存時長.

資源記錄定義的格式:(每一種類型的格式都是這5條)

語法:name [TTL] IN rr_type value

SOA例子:

magedu.com 86400 IN SOA 管理員郵箱 master dns (1 7D 1h 2w 1d)

名字為 magedu.com

TTL為 86400 (可省略)

IN 網絡信息(第一個必須寫,多余的可以省略)

rr_type 為SOA

value值為 管理員郵箱 master dns (1 7D 1h 2w 1d)

NS記錄

? name: 當前區域的名字

? value: 當前區域的某DNS服務器的名字,例如ns.magedu.com.

? 註意:一個區域可以有多個NS記錄例如:

magedu.com. IN NS ns1.magedu.com.

magedu.com. IN NS ns2.magedu.com.

? 註意:

(1) 相鄰的兩個資源記錄的name相同時,後續的可省略

(2) 對NS記錄而言,任何一個ns記錄後面的服務器名字,都應該在後續有一個A記錄,

例子:NS name server(裏面有幾個服務器,那個是主,那個是從)

Magedu.com 86400 IN NS 誰提供了mage域的服務器,如 DNS1.DNS2...

如果有多個服務器,還要按照A記錄的形式,將具體的IP地址書寫出來,如:

DNS1 magedu.com 86400 IN A IP地址(1.1.1.1)

DNS2 A IP地址(1.1.1.2)

MX記錄

? name: 當前區域的名字

? value: 當前區域的某郵件服務器(smtp服務器)的主機名

? 一個區域內,MX記錄可有多個;但每個記錄的value之前應該有一個數字(0- 99),表示此服務器的優先級;數字越小優先級越高

技術分享圖片

一個記錄的5個信息:name,ttl,IN,type,值,分別為

@代表本域 ttl不指明為默認值(1天) IN從上面繼承 type為MX

其中的值為 優先級(10,20),具體負責的服務器名稱

A記錄

? name: 某主機的FQDN,例如www.magedu.com.

? value: 主機名對應主機的IP4地址

? 例如:

www.magedu.com. IN A 1.1.1.1 常規寫法

mx1.magedu.com. IN A3.3.3.3 在magedu.com域內,有一個mx1的主機.

$GENERATE 1-254 HOST$ A 1.2.3.$,一種書寫格式

代表了從 GENERATE 1主機,IP地址為 1.2.3.1開始

到GENERATE 254主機,IP地址為 1.2.3.254結束,共計255臺電腦的名字及IP

創建名為web_nginx01—0100的主機,IP地址為1.1.1.1—1.1.1.100的資源解析庫

# $GENERATE 1-100 web-nginx0$ A 1.1.1.$

*.magedu.com. IN A 5.5.5.5 所有在magedu.com域內的主機名字

magedu.com. IN A 6.6.6.6 省略www,需要加入新行 @ A 6.6.6.6 避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址

其它記錄############################################################

? AAAA:

name: 某主機的FQDN, 例如www.magedu.com.

value: 主機名對應主機的IP4地址

PTR:反向解析的寫法(從IP解析為域名)

name: IP,有特定格式,把IP地址反過來寫,比如1.2.3.4,要寫作4.3.2.1;

而且有特定後綴:in-addr.arpa.,所以完整寫法為:4.3.2.1.in-addr.arpa.

value: FQDN

? 例如:

4.3.2.1.in-addr.arpa. IN PTR www.magedu.com. 如1.2.3.為網絡地址,可簡寫成:4 IN PTR www.magedu.com.

? PS:網絡地址及後綴可省略;但是主機地址依然需要反著寫

從域名解析為IP叫正向解析,反向解析就是從IP解析為域名,

反向解析是從IP開始的,那麽先確定好網段(不可能全部網段都解析)

反向解析示意圖(和根域比較類似)

技術分享圖片

####################################################################

實現反向解析:

編輯/etc/named.rfc1912.zones文件,在倒數第二行裏加入如下內容:

技術分享圖片

然後再/var/named目錄裏編輯,192.158.227.zone文件

# vim /var/named/192.168.227.zone,添加如下內容:

技術分享圖片

重置服務 # rndc reload ,註意權限問題:

技術分享圖片

驗證下結果:

# dig -x 192.168.227.100

技術分享圖片

# dig –x 192.168.227.7

技術分享圖片

####################################################################

別名記錄

? CNAME:

name: 別名的FQDN

value: 真正名字的FQDN

? 例如:

www.magedu.com. IN CNAME websrv.magedu.com.

# 這裏的www就是websrv的別名。

小技巧:

技術分享圖片

1 *代表所有的域名,也叫泛域名解析。

通常是商業網站用這種方式來提高訪問量,輸錯的域名由此服務器解析為商業網站想要的內容。比如 輸入 wwww.jd.com的時候,還會是跳轉到京東的頁面上,但是無具體內容,只有京東的廣告~。

2 訪問互聯網時,很多人會懶的敲www,直接輸入域名,為了保證域名能解析成功,需要在DNS的配置文件/var/named/magedu.com.zone中,加入一行

@ A 本域的DNS地址,如下圖:

技術分享圖片 這也是商業網站避免客戶流失的方式.

禁止DNS服務器,在解析不了自己庫裏的IP後,跑到根域上去尋找IP的方法:

編輯配置文件:/etc/named.conf

技術分享圖片

避免自動補域名,將search改為localdomain即可

技術分享圖片

修改前,ping www.wang自動補為 www.wang.magedu.com

技術分享圖片

修改後,在ping www.wang

技術分享圖片

不再補域名了,且因為關閉了遞歸查詢,因為資源解析庫裏並沒有www.wang的地址,故直接報錯.

允許動態更新(遠程就可以更新數據庫 /var/named/magedu.com.zone),而不用每次都要跑到服務端手動跟新.

進行如下操作:

1 在配置文件/etc/named.rfc1912.zones中, 找到指定的zone語句塊,

將Allow-update { none; };更改為Allow-update { any; }

2 chmod 770 /var/named

3 nsupdate------------------ 使用這個命令可以更新

server 127.0.0.1-------- 指定更新的服務器

zone magedu.com ---------指定要更新的域

update add ftp.magedu.com 88888 IN A 8.8.8.8

添加一條記錄(名字為 ftp.magedu.com,TTL為88888,IN.A記錄,IP4地址為8.8.8.8)

Send---------------------發送至服務器.

也可以刪除指定的記錄

nsupdate------------------ 使用這個命令可以更新

server 127.0.0.1-------- 指定更新的服務器

zone magedu.com ---------指定要更新的域

update delete www.magedu.com A----刪除www.magedu.com 的A記錄.

刪除一條記錄(名字為 ftp.magedu.com,TTL為88888,IN.A記錄,IP4地址為8.8.8.8)

Send---------------------發送至服務器.

使用此命令添加的A記錄,會單獨生成一個magedu.com.zone.jnl文件.

不能使用cat等文本文件打開.使用named-journalprint +jnl文件名才能查看.

技術分享圖片

使用這條命令添加的記錄,數據庫序列號會自動變更,無需再手動更改了.

技術分享圖片

馬哥學習----李洋個人筆記----DNS學習心得