DNS
域名系統DNS(Domain Name System)是因特網使用的命名系統,用來把便於人們使用的機器名字轉換成爲IP地址。域名系統其實就是名字系統。爲什麼不叫“名字”而叫“域名”呢?這是因爲在這種因特網的命名系統中使用了許多的“域(domain)”,因此就出現了“域名”這個名詞。“域名系統”明確地指明這種系統是應用在因特網中。
DNS介紹
DNS的概念
DNS(Domain Name System)是互聯網上的一項服務,它作爲將域名和IP地址相互映射的一個分佈式數據庫,能夠使人更方便的訪問互聯網。tcp和upd的53端口,先使用upd查,再tcp查找。##支持tcp和udp
因特網中的域名結構:分層樹狀結構
- 國家頂級域名:採用ISO3166的規定。如:cn代表中國,us代表美國,uk代表英國,等等。國家域名又常記爲ccTLD(country code top-level domains,cc表示國家代碼contry-code)。
- 通用頂級域名:最常見的通用頂級域名有7個,即:com(公司企業),net(網絡服務機構),org(非營利組織),int(國際組織),gov(美國的政府部門),mil(美國的軍事部門)。
- 基礎結構域名(infrastructure domain):這種頂級域名只有一個,即arpa,用於反向域名解析,因此稱爲反向域名。
-
IANA the internet Assigned Numbers Authority 互聯網數字分配機構
ICANN the internet Corporation for Assignednames and Nunbers 互聯網名稱與數字地址分配機構
- 根服務器主要用來管理互聯網的主目錄,在與現有IPv4根服務器體系架構充分兼容基礎上,“雪人計劃”於2016年在全球16個國家完成25臺IPv6根服務器架設,事實上形成了13臺原有根加25臺IPv6根的新格局,爲建立多邊、民主、透明的國際互聯網治理體系打下堅實基礎。中國部署了其中的4臺,由1臺主根服務器和3臺輔根服務器組成,打破了中國過去沒有根服務器的困境。
- 根域名服務器是架構因特網所必須的基礎設施。在國外,許多計算機科學家將根域名服務器稱作“真理”(TRUTH),足見其重要性。換句話說——攻擊整個因特網最有力、最直接,也是最致命的方法恐怕就是攻擊根域名服務器了。
- 全世界只有13臺IPv4根域名服務器。1個爲主根服務器在美國。其餘12個均爲輔根服務器,其中9臺在美國,歐洲2個,位於英國和瑞典,亞洲1個位於日本。,中國只有根域名服務器的鏡像,國家富強大家還努力學習呀!!
DNS域名解析的過程
你不可能記住全世界的ip地址,ip地址記憶很麻煩,但是你訪問某服務器的時候,確是需要去訪問服務器的IP地址的,怎麼辦,dns域名解析服務就是負責將域名給你轉換爲ip地址,讓你出去尋找的。
就像我去訪問baidu首頁一樣:我通過域名去訪問
和通過百度服務器的ip地址去訪問時一樣的。
dns存在就是幫忙解析域名的。
發展
Hosts文件 ---------------需要不停地添加域名
週期性任務 ---------------在指定時間自動的去寫(自動化)
server ---------------東西太多(性能)
分佈式數據庫 -------------全球各地分放
解析過程
查找方式:
遞歸 ------計算機只發送一次請求
迭代 -----多次
實際解析分爲兩段,一段遞歸一段迭代
比如解析www.qq.com的過程。
- 在瀏覽器中輸入www . qq .com 域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成域名解析。
- 如果hosts裏沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,如果有,直接返回,完成域名解析。
- 如果hosts與本地DNS解析器緩存都沒有相應的網址映射關係,首先會找TCP/IP參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。
- 如果要查詢的域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。
- 如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息後,將會聯繫負責.com域的這臺服務器。這臺負責.com域的服務器收到請求後,如果自己無法解析,它就會找一個管理qq.com的DNS服務器地址給本地DNS服務器。當本地DNS服務器收到這個地址後,就會找qq.com域服務器,重複上面的動作,進行查詢,直至找到www . qq .com主機。
- 如果用的是轉發模式,本地DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把請求轉至上上級,以此循環。找到最後把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。
注:從客戶端到本地DNS服務器是屬於遞歸查詢,而DNS服務器之間使用的交互查詢就是迭代查詢。
114.114.114.114是國內移動、電信和聯通通用的DNS,手機和電腦端都可以使用,乾淨無廣告,解析成功率相對來說更高,國內用戶使用的比較多,而且速度相對快、穩定,是國內用戶上網常用的DNS。
8.8.8.8是GOOGLE公司提供的DNS,該地址是全球通用的,相對來說,更適合國外以及訪問國外網站的用戶使用。
DNS域名解析的方式
正向解析:將FQDN----->IP
反向解析:將IP----->FQDN
DNS解析答案的可信度
-
當DNS客戶端向DNS服務器發出解析請求時,不管是否能夠查詢到想要的結果,都會返回一個解析答案。根據是否能夠查詢到想要的結果,可分爲肯定答案和否定答案;根據解析答案是否由直接負責的DNS服務器返回,可分爲權威答案和非權威答案。
根據是否能夠查詢到想要的結果:
①肯定答案:存在查詢的鍵(key),並且存在與其查詢鍵對應的值(value)。
②否定答案:不存在查詢的鍵(key),因此,自然不存在與其查詢鍵(value)對應的值。 -
根據解析答案是否由直接負責的DNS服務器返回:
①權威答案:由直接負責的DNS服務器返回的答案。
②非權威答案:不是由直接負責的DNS服務器返回的答案。這種情況下一般是由其他DNS服務器直接返回緩存的解析結果。
DNS服務類型
主DNS服務器:數據修改(接受用戶請求返回數據) master
輔助dns服務器:定期請求數據同步 slave
緩存dns服務器: 只緩存dns數據 hint
轉發器:緩存服務器去掉緩存功能 forward
DNS配置
DNS協議的一種開源實現–bind
提供dns服務的套件叫bind,但執行服務名稱的是named。
- 我們說DNS是一種協議,而對於每一種協議的實現都需要程序員開發出遵循這種協議規範的軟件程序來實現,這裏要介紹的BIND就是DNS協議的一種開源實現。
- 據統計,使用bind作爲DNS服務器軟件的DNS服務器大約佔所有DNS服務器的九成。BIND全稱爲Berkeley Internet Name Domain(伯克利互連網域名),因爲當今互聯網上的通信幾乎都必須藉助於DNS服務器來解析主機名,得到通信對方的IP地址,而在DNS服務器上最常用的軟件就是bind,所以,bind這款軟件幾乎可以說是當今互聯網上常用的軟件了。目前bind由ISC.org(Internet Systems Consortium,互聯網系統協會)負責開發與維護。
學習bind需掌握基本概念:
1 dns:協議 53 tcp udp 正向解析 ------- 域名--ip
2 bind:dns協議的一種開源實現
3 named:bind程序運行起來後的進程名
bind相關的程序包
bind不僅提供了主包,還提供了各種bind的支包,它們用於實現不同的功能。而在衆多bind支包中,最常用到的有:bind-utils, bind-libs, bind-chroot等。
bind相關的程序包如下:
1 bind:提供dns server程序,以及幾個常用的測試工具。
2 bind-utils:bind客戶端程序集,例如提供dig, nslookup等工具。
3 bind-libs:提供bind和bind-utils包中的程序共同用到的庫文件。
4 bind-chroot:選裝,讓bind程序(named進程)運行於jail進程之下。
yum install bind -y 安裝bind
rpm -ql bind 查看
bind的相關配置文件
/etc/named.conf 主配置文件
/etc/rndc.conf: 相關配置文件
區域數據文件,需要手動創建
/var/named/zidingyi.zone
配置檢查腳本工具
/usr/sbin/named-checkconf
區域配置檢查工具
/usr/sbin/named-checkzone
#全球十三個根服務器的相關信息;
bind配置的要點
(1)一臺DNS服務器可同時爲多個區域提供解析。
(2)DNS服務器必須要有根區域解析庫文件:named.ca.
(3)DNS服務器還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫,這兩個文件分別如下:
①正向解析庫文件:/var/named/named.localhost
②反向解析庫文件:/var/named/named.loopback
/var/named/named.ca 區域文件dns數據庫
解析庫文件:存放於/var/named/目錄下,一般名字爲ZONE_NAME.zone
- DNS在53端口上監聽請求並提供響應的服務。出於性能的考慮,DNS查詢請求用UDP協議交互並且每個請求的大小小於512字節,但是如果返回的請求大小大於512字節,交互雙方會協商使用TCP協議。
rndc的全稱是Remote Name Domain Controller(遠程名稱域控制器 ),它可以幫助用戶更方便地管理DNS服務器,包括可以檢查DNS服務器的狀態與統計信息、重載配置文件及zone或單獨重載某個區域而不需要重新啓動整個DNS服務,還有查看已存在DNS緩存當中的資料等。
rndc服務默認監聽在tcp的953端口,且默認監聽於127.0.0.1地址,因此默認僅允許本地使用。
rndc的常見用法:
rndc reload:在不重新啓動DNS服務的情況下,重新加載配置文件及zone.
rndc reload zone:重新加載指定的zone. rndc status:查看當前DNS服務器的狀態。
rndc stats:將當前系統的DNS統計數據記錄下來,默認會將數據存儲爲一個文件:/var/named/data/named_stats.txt.
rndc dumpdb:將當前DNS高速緩存中的數據記錄下來,與stats類似,默認會將數據存儲爲一個文件:/var/named/data/cache_dump.db.、
rndc flush:清空當前DNS服務器上的所有緩存。
資源記錄名稱:(數據庫中的每一個條目)
SOA(起始授權記錄) 記錄提供有關dns區域工作方式的信息 -----具體負責哪個區域的解析
這代表着master/salve相關的認證,授權資料。不論有沒有設定master/salve的架構都需要設定好。
NS 將自己的域名映射到DNS 將域名最終映射到哪一臺主機(標記 dns服務器)
A (ipv4地址記錄) 資源記錄將主機名映射到ipv4地址。
CNAME (規範名稱)記錄域別名
MX 郵件交換記錄
PTR指針記錄 將IPV4 IPV6地址映射到主機名 (用於反向DNS)
AAAA (IPV6 地址記錄) 資源記錄(四A記錄)將主機名映射到ipv6地址。
資源記錄包含的元素:
owner-name TTL class type date
主機名 資源記錄生存時間 INTERNET A 記錄存儲數據(主機ip)
TTL值(當外部DNS服務器對你的DNS這個域進行查詢時,這個記錄會放置在對方的DNS服務器幾秒鐘)
五種定義的信息
serial number: 序列號 定義當前使用的數據序列號 sn遵循“年+月+日+編號” ·主和從的更新依據
refresh: 定義檢查間隔時間 (上次和這次變化的時間)
retry: 重試時間 < 檢查時間>
expire: 過期時間 緩存放多久過期
negative answer ttl: 否定答案的緩存時長 (沒有指定生存期的數據可以保存在數據中的時間及TTL值)
時間單位:M(分鐘)、H(小時)、D(天)、W(周),默認單位是秒
配置文件:
[root@localhost ~]# vim /etc/named.conf
options {
定義監聽端口,如果所有地址都監聽,則只寫端口
listen-on port 53 { 127.0.0.1; };
listen-on-v6 port 53 { ::1; };
定義數據文件目錄
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";統計檔案、文件
memstatistics-file "/var/named/data/named_mem_stats.txt";分配統計目錄
allow-query { localhost; };只允許本地主機進行查詢
recursion yes;允許遞歸
logging {
指定日誌記錄分類和他們的目標位置
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN { 定義區域
type hint;
file "named.ca";
};
包含其他的配置文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
DNS配置實例
正向解析
文件RR:
配置文件內容示意:
如圖所示
配置文件如下:可copy,修改ip地址即可。
編輯配置文件:
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 192.168.168.157; }; ##dns服務器
directory "/var/named"; ##所在的目錄。
};
zone "baidu.com" IN { ##域的名字
type master; ##類別
file "named.baidu.com"; ##文件名字
};
[root@localhost ~]# cat /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.admin.com.(
2020042601
1D
1H
1H
1W )
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
ns IN A 192.168.168.157
mail IN A 192.168.168.157
www IN A 192.168.168.157
ftp IN CNAME 192.168.168.157
修改dns首選服務器進行測試。
重啓服務進行測試
systemcil restart named
測試方式:
dig方式
[root@localhost ~]# dig -t NS baidu.com
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -t NS baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 38720
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;baidu.com. IN NS
;; ANSWER SECTION:
baidu.com. 86400 IN NS ns.baidu.com.
;; ADDITIONAL SECTION:
ns.baidu.com. 86400 IN A 192.168.168.157
;; Query time: 0 msec
;; SERVER: 192.168.168.157#53(192.168.168.157)
;; WHEN: Sun Apr 26 16:33:02 CST 2020
;; MSG SIZE rcvd: 71
nslookup方式:推薦,windows可用
[root@localhost ~]# nslookup www.baidu.com
Server: 192.168.168.157
Address: 192.168.168.157#53
Name: www.baidu.com
Address: 192.168.168.157
windows下請求如下:二者的解析結果不同主要在於指定的首選dns服務器不同。
也可以根據網站進行測試:這裏將www.baidu.com解析爲本機搭建的web服務。
反向解析
在配置文件內添加內容:vim /etc/named.conf
zone "168.168.192.in-addr.arpa" IN { ##將ip地址倒過來寫192.168.168-》168.168.192
type master;
file "named.192.168.168";
};
創建方向解析文件
[root@localhost ~]# cat /var/named/named.192.168.168
$TTL 1D
@ IN SOA @ admin.baidu.com.(
2020042601
1D
1H
1H
1W )
IN NS ns.baidu.com.
157 IN PTR ns.baidu.com.
157 IN PTR mail.baidu.com.
157 IN PTR www.baidu.com.
157 IN PTR ftp.baidu.com.
重啓服務進行測試:
[root@localhost ~]# dig -x 192.168.168.157
; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> -x 192.168.168.157
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44437
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;157.168.168.192.in-addr.arpa. IN PTR
;; ANSWER SECTION:
157.168.168.192.in-addr.arpa. 86400 IN PTR mail.baidu.com.
157.168.168.192.in-addr.arpa. 86400 IN PTR www.baidu.com.
157.168.168.192.in-addr.arpa. 86400 IN PTR ftp.baidu.com.
157.168.168.192.in-addr.arpa. 86400 IN PTR ns.baidu.com.
;; AUTHORITY SECTION:
168.168.192.in-addr.arpa. 86400 IN NS ns.baidu.com.
;; ADDITIONAL SECTION:
ns.baidu.com. 86400 IN A 192.168.168.157
;; Query time: 0 msec
;; SERVER: 192.168.168.157#53(192.168.168.157)
;; WHEN: Sun Apr 26 17:01:12 CST 2020
;; MSG SIZE rcvd: 168
#########################
[root@localhost ~]# nslookup 192.168.168.157
Server: 192.168.168.157
Address: 192.168.168.157#53
157.168.168.192.in-addr.arpa name = www.baidu.com.
157.168.168.192.in-addr.arpa name = mail.baidu.com.
157.168.168.192.in-addr.arpa name = ns.baidu.com.
157.168.168.192.in-addr.arpa name = ftp.baidu.com.
區域傳送
- 將一個區域文件複製到多個服務器上的過程叫做區域傳送。將主服務器上的信息複製到輔助服務器上來實現。
兩種區文件複製方式:
完全區域傳送:axfr,all transfer,全部區域文件複製,複製整個區域文件
增量區域傳送:ixfr,incremental transfer,僅複製區域裏變化的文件
#定義全局,在options選項內定義
allow-transfer { 192.168.75.130; };
IXFR: 增量區域傳送
查詢上次序列號改變後的信息
dig -t ixfr=1 baidu.com @192.168.75.129
配置:
[root@localhost ~]# cat /etc/named.conf 在主dns服務器上的配置文件中加入傳送區域的IP地址
options {
listen-on port 53 { 192.168.168.157; };
directory "/var/named";
allow-transfer {192.168.168.158;}; ####副dns區域的ip地址
};
##在剛纔的158主機上,安裝bind包
配置文件如下,區域作爲被傳送區域
[root@localhost ~]# cat /etc/named.conf
options {
listen-on port 53 { 192.168.168.158; };
directory "/var/named";
};
zone "baidu.com" IN {
type slave; ##類型
file "slaves/named.baidu.com"; ##文件
masters { 192.168.168.157; };##主區域
};
zone "168.168.192.in-addr.arpa" IN {
type slave;
file " slaves/named.192.168.168";
masters { 192.168.168.157; };
};
測試:前面查看沒有文件,配置好後重啓,可以看到將named.baidu.com文件傳送過來了。
批量解析
正向格式:
$GENERATE 10-20
[root@localhost ~]# cat /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.admin.com.(
2020042602
1D
1H
1H
1W )
IN NS ns.baidu.com.
IN MX 10 mail.baidu.com.
slave IN A 192.168.168.158
ns IN A 192.168.168.157
mail IN A 192.168.168.157
www IN A 192.168.168.157
ftp IN CNAME www
$GENERATE 10-20 $.baidu.com. IN A 192.168.168.$ ##新添加
$GENERATE 10-20 xixi$.baidu.com. IN A 192.168.168.$ ##添加
測試:
反向格式:
$GENERATE 10-20 $ IN PTR $.baidu.com
[root@localhost ~]# cat /var/named/named.192.168.168
$TTL 1D
@ IN SOA @ admin.baidu.com.(
2020042601
1D
1H
1H
1W )
IN NS ns.baidu.com.
157 IN PTR ns.baidu.com.
157 IN PTR mail.baidu.com.
157 IN PTR www.baidu.com.
157 IN PTR ftp.baidu.com.
$GENERATE 10-20 $ IN PTR $.baidu.com #新添加
測試:
唐代僧人寒山問拾得:“世間有人謗我、欺我、辱我、笑我、輕我、賤我、惡我、騙我,如何處置乎?” 拾得說:“只需忍他、讓他、由他、避他、耐他、敬他、不要理他,再過幾年,你且看他。”
喜歡這篇文章的小夥伴點個贊吧!