馬哥學習----李洋個人筆記----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學習心得