您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的博客的最新動態。
如果文章內容對您有幫助, 不要忘記點擊右下角的 推薦按鈕 來支持一下哦
如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯系我: 501395377@qq.com / lzp501395377@gmail.com
如果需要轉載,請注明出處,謝謝!!
本篇隨筆將主要講解DNS的一些基礎知識以及域名的系統架構,當然這篇隨筆是為后面的配置自己的DNS服務器來奠定基礎的...
一、域名
在講解DNS之前,首先粗略的說一下域名這個東西
比如說我們在用瀏覽器訪問網址的時候,我們輸入的網站的地址就是一個域名,例如 www.google.com,但其實我們知道我們標志互聯網中的每一個機器都是有一個IP地址的,我們若需要訪問一個網站的服務器,實際上是需要輸入該網站的IP地址來進行訪問的,但是IP地址往往難以記憶,IPv4尚且難記,IPv6就更不用說了,所以我們就通過使用域名來對其進行管理,但是在訪問的時候,系統底層還是通過ip地址來進行訪問的,域名和IP地址直接的轉換就是通過DNS服務器來完成的。首先我們先來看看域名的一些知識,就拿 www.google.com 這個域名來說。
通常對於一個域名來說,其主要分為3個部分
www.google.com
主機名 域名 類型
①類型 標志着該域名的類型(com、cn、edu、org等)
②域名 域的名稱,如上面的 google
③主機名 域里面一台主機的名字,如www這台主機
其實嚴格的來說,域名后面還有一個 ".",所以完整的域名應該是 www.google.com.
對於域名來說,其大小寫是不敏感的,在瀏覽器里面我們輸入大小寫都指向的同一個ip地址
二、DNS
從上面可以知道,每一個域名都對應了一個IP地址,我們訪問一個域名時,其實底層的操作系統進行通信時還是通過IP地址來進行通信,所以我們就需要有一個服務能將域名轉換成對應的IP地址,或者反向的將IP地址轉換成域名,這個服務就是DNS(Domain Name System)。
DNS提供的服務就是在IP和域名之間進行轉換,DNS服務是由DNS服務器來提供的,一般提供DNS服務的都有一個單獨的DNS服務器,這個DNS服務器的作用就是用來保存我們的域名到其IP地址之間的解析,例如我們在訪問 www.google.com 這個域名的時候,我們的主機首先會向一個DNS服務器發起一個DNS的請求,請求DNS服務器告訴我www.google.com這個域名的IP地址,此時DNS服務器就會給我們返回該域名的IP地址,這個時候我們再根據這個IP地址訪問www.google.com這台服務器
DNS服務就是將我們的域名解析成其對應的IP地址,我們日常使用的支持網絡的計算機一般是做為DNS客戶端來使用的,應用程序、服務、進程等等通過操作系統底層的功能發起對DNS服務器的查詢,來對指定的域名進行解析
在Linux系統當中,一般是使用系統底層提供的gethostbyname()這個函數來進行域名解析的
在Linux系統當中,解析域名通常可以基於以下三種方式:
①文件 (/etc/hosts、/etc/networks)
hosts是主機文件,里面存放的是域名到IP地址的一個對應,在windows下也有這樣一個文件,通常linux下通過文件來解析域名都是通過 /etc/hosts 這個文件
[root@xiaoluo ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
因為hosts文件里面保存的就是域名到IP地址直接的對應關系,我們也可以手動的去將我們的域名指定為其它的IP,例如我們將 www.google.com 的 ip 修改為 192.168.1.1
[root@xiaoluo ~]# ping www.google.com PING www.google.com (173.194.72.103) 56(84) bytes of data. [root@xiaoluo ~]# vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.1.1 www.google.com [root@xiaoluo ~]# ping www.google.com PING www.google.com (192.168.1.1) 56(84) bytes of data.
我們看到,我們在 /etc/hosts 文件里加上 192.168.1.1 www.google.com 這條映射關系以后,此時在ping www.google.com時,其ip地址變成了我們自己設定的 192.168.1.1了,但是我們知道其IP地址肯定不是這個。為此,我們可以在操作系統上將一些域名的IP地址直接寫到 hosts 文件里面,這樣在進行解析時可以直接去訪問我們指定的IP地址
②DNS 這個就是通過我們指定的DNS服務器來對我們的域名進行解析了
③NIS 這個用的非常少
我們可以通過查看 /etc/nsswitch.conf 這個文件來查看DNS解析的順序
[root@xiaoluo ~]# cat /etc/nsswitch.conf # # /etc/nsswitch.conf # # An example Name Service Switch config file. This file should be # sorted with the most-used services at the beginning. # # The entry '[NOTFOUND=return]' means that the search for an # entry should stop if the search in the previous entry turned # up nothing. Note that if the search failed due to some other reason # (like no NIS server responding) then the search continues with the # next entry. # # Valid entries include: # # nisplus Use NIS+ (NIS version 3) # nis Use NIS (NIS version 2), also called YP # dns Use DNS (Domain Name Service) # files Use the local files # db Use the local database (.db) files # compat Use NIS on compat mode # hesiod Use Hesiod for user lookups # [NOTFOUND=return] Stop searching if not found so far # # To use db, put the "db" in front of "files" for entries you want to be # looked up first in the databases # # Example: #passwd: db files nisplus nis #shadow: db files nisplus nis #group: db files nisplus nis passwd: files shadow: files group: files #hosts: db files nisplus nis dns hosts: files dns # Example - obey only what nisplus tells us... #services: nisplus [NOTFOUND=return] files #networks: nisplus [NOTFOUND=return] files #protocols: nisplus [NOTFOUND=return] files #rpc: nisplus [NOTFOUND=return] files #ethers: nisplus [NOTFOUND=return] files #netmasks: nisplus [NOTFOUND=return] files bootparams: nisplus [NOTFOUND=return] files ethers: files netmasks: files networks: files protocols: files rpc: files services: files netgroup: nisplus publickey: nisplus automount: files nisplus aliases: files nisplus
我們看到我們 hosts 解析的順序先是通過 file 文件來進行解析,再是通過DNS進行解析,我們可以直接修改該文件來控制我們的查詢順序
三、DNS查詢
我們可以通過 host 或者 dig 命令來查詢我們域名對應的IP地址
①host(顯示內容較少)
[root@xiaoluo ~]# host www.google.com www.google.com has address 74.125.31.104 www.google.com has address 74.125.31.147 www.google.com has address 74.125.31.106 www.google.com has address 74.125.31.99 www.google.com has address 74.125.31.103 www.google.com has address 74.125.31.105 www.google.com has IPv6 address 2404:6800:4008:c01::6a
②dig (顯示內容詳細)
[root@xiaoluo ~]# dig www.google.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> www.google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 65143 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 5 IN A 74.125.31.104 www.google.com. 5 IN A 74.125.31.147 www.google.com. 5 IN A 74.125.31.106 www.google.com. 5 IN A 74.125.31.99 www.google.com. 5 IN A 74.125.31.103 www.google.com. 5 IN A 74.125.31.105 ;; Query time: 2012 msec ;; SERVER: 192.168.198.2#53(192.168.198.2) ;; WHEN: Mon Jun 3 19:49:55 2013 ;; MSG SIZE rcvd: 128
我們看到dig命令查詢出來的內容非常多,對於里面的每一行語句的含義,將在后續隨筆中詳細講解
對於DNS查詢來說,其實DNS是一個樹狀的結構,查詢的時候是根據域名從右到左來進行查詢,域名每一級由獨立的一個或者多個DNS服務器來進行查詢
我們看到,當我們在對 www.google.com 這個域名進行查詢時,首先是通過 . 這個根DNS服務器去查詢 com 這個類型的 DNS 服務器地址,然后再通過 com 對應的多台DNS服務器(每一層都有多個DNS服務器)去查詢 google 這個域名的DNS服務器,最后再通過 google的DNS服務器去查詢主機名為 www 的這台主機的資源記錄,從而得到 www.google.com 的IP地址。我們可以通過 dig +trace www.google.com 這個命令來追蹤整個DNS查詢的過程
[root@xiaoluo ~]# dig +trace www.google.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> +trace www.google.com ;; global options: +cmd . 5 IN NS f.root-servers.net. . 5 IN NS g.root-servers.net. . 5 IN NS h.root-servers.net. . 5 IN NS i.root-servers.net. . 5 IN NS j.root-servers.net. . 5 IN NS k.root-servers.net. . 5 IN NS l.root-servers.net. . 5 IN NS m.root-servers.net. . 5 IN NS a.root-servers.net. . 5 IN NS b.root-servers.net. . 5 IN NS c.root-servers.net. . 5 IN NS d.root-servers.net. . 5 IN NS e.root-servers.net. ;; Received 508 bytes from 192.168.198.2#53(192.168.198.2) in 28138 ms com. 172800 IN NS a.gtld-servers.net. com. 172800 IN NS b.gtld-servers.net. com. 172800 IN NS c.gtld-servers.net. com. 172800 IN NS d.gtld-servers.net. com. 172800 IN NS e.gtld-servers.net. com. 172800 IN NS f.gtld-servers.net. com. 172800 IN NS g.gtld-servers.net. com. 172800 IN NS h.gtld-servers.net. com. 172800 IN NS i.gtld-servers.net. com. 172800 IN NS j.gtld-servers.net. com. 172800 IN NS k.gtld-servers.net. com. 172800 IN NS l.gtld-servers.net. com. 172800 IN NS m.gtld-servers.net. ;; Received 492 bytes from 193.0.14.129#53(193.0.14.129) in 26867 ms google.com. 172800 IN NS ns2.google.com. google.com. 172800 IN NS ns1.google.com. google.com. 172800 IN NS ns3.google.com. google.com. 172800 IN NS ns4.google.com. ;; Received 168 bytes from 192.54.112.30#53(192.54.112.30) in 8681 ms www.google.com. 300 IN A 173.194.72.103 www.google.com. 300 IN A 173.194.72.99 www.google.com. 300 IN A 173.194.72.106 www.google.com. 300 IN A 173.194.72.104 www.google.com. 300 IN A 173.194.72.147 www.google.com. 300 IN A 173.194.72.105 ;; Received 128 bytes from 216.239.38.10#53(216.239.38.10) in 82 ms
我們看到整個DNS查詢過程就是上述的根據域名從右到左來一步步查詢, . root DNS -> com DNS -> google DNS -> www
DNS查詢類型一共有兩種,一種是 迭代查詢 (Iterative Query),另一種是 遞歸查詢 (Recursive Query)我們通過下面兩個示意圖就可以知道這兩種查詢的區別了
①迭代查詢 (Iterative Query)
②遞歸查詢 (Recursive Query)
我們看到迭代查詢時本地DNS Server會首先向 . DNS Server發出請求,此時 . DNS Server會返回給本地DNS Server com的 DNS Server,這樣依次類推下去,最后將 www.google.com的ip地址返回,而遞歸查詢,則只是本地DNS Server向 . DNS Server發出一個請求,然后解析IP是交給了其下屬的DNS Server來完成,最后將IP地址返回,由於遞歸查詢在每個DNS Server上會有緩存信息,所以一般我們都是使用兩種查詢方式相結合的方式來進行DNS查詢的
四、資源記錄
在DNS服務器上,DNS的信息都是通過一個叫做資源記錄(RR Resource Record)的格式來進行保存的,RR不僅能夠保存域名到IP地址的信息,還能保持其他很多的信息
資源記錄常用的屬性有:
- NAME (主機名)
- CLASS (類別,通常是IN)
- TYPE (類型,資源記錄的類型)
- RDATA (信息)
如:
www IN A 192.168.1.1
mail IN A 192.168.1.2
server1 IN CNAME www
IN MX 10 mail.gmail.com.(對於MX記錄,后面的域名一定要寫完整,即最后的 . 也要加上)
NAME CLASS TYPE RDATA
上面都是我們的資源記錄。DNS的資源記錄可以記錄許多類型的資源,而不僅僅是IP地址,常見的資源記錄類型如下:
資源記錄類型(TYPE) | 表示內容 |
A | IPv4地址 |
AAAA | IPv6地址 |
MX | 郵件記錄 |
CNAME | 別名 |
PTR | 指針(逆向解析) |
SRV | 服務資源 |
我們可以使用DNS的高級查詢命令來查看這些資源記錄的信息
①dig -t a www.google.com 查看域名的IPv4地址
[root@xiaoluo ~]# dig -t a www.google.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t a www.google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52161 ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.google.com. IN A ;; ANSWER SECTION: www.google.com. 5 IN A 74.125.31.103 www.google.com. 5 IN A 74.125.31.99 www.google.com. 5 IN A 74.125.31.147 www.google.com. 5 IN A 74.125.31.104 www.google.com. 5 IN A 74.125.31.106 www.google.com. 5 IN A 74.125.31.105 // 這些都是 www.google.com 的IPv4地址 ;; Query time: 2010 msec ;; SERVER: 192.168.198.2#53(192.168.198.2) ;; WHEN: Mon Jun 3 20:45:30 2013 ;; MSG SIZE rcvd: 128
②dig -t mx gmail.com 查看gmail.com這個域名的郵件記錄
[root@xiaoluo ~]# dig -t mx gmail.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -t mx gmail.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44633 ;; flags: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 4 ;; QUESTION SECTION: ;gmail.com. IN MX ;; ANSWER SECTION: gmail.com. 5 IN MX 40 alt4.gmail-smtp-in.l.google.com. gmail.com. 5 IN MX 30 alt3.gmail-smtp-in.l.google.com. gmail.com. 5 IN MX 10 alt1.gmail-smtp-in.l.google.com. gmail.com. 5 IN MX 5 gmail-smtp-in.l.google.com. gmail.com. 5 IN MX 20 alt2.gmail-smtp-in.l.google.com. // gmail.com的郵件服務器 ;; ADDITIONAL SECTION: alt3.gmail-smtp-in.l.google.com. 5 IN AAAA 2607:f8b0:400d:c02::1a alt1.gmail-smtp-in.l.google.com. 5 IN AAAA 2a00:1450:4010:c03::1b gmail-smtp-in.l.google.com. 5 IN AAAA 2607:f8b0:400e:c01::1a alt4.gmail-smtp-in.l.google.com. 5 IN AAAA 2607:f8b0:400c:c01::1a // gmail.com郵件服務器對應的IP地址 ;; Query time: 2003 msec ;; SERVER: 192.168.198.2#53(192.168.198.2) ;; WHEN: Mon Jun 3 20:47:32 2013 ;; MSG SIZE rcvd: 262
③dig -x 42.121.135.98 逆向解析 42.121.135.98 這個IP地址得到其域名 (博客園的IP)
[root@xiaoluo ~]# host www.cnblogs.com www.cnblogs.com has address 42.121.135.98 [root@xiaoluo ~]# dig -x 42.121.135.98 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6 <<>> -x 42.121.135.98 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 22590 ;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION: ;98.135.121.42.in-addr.arpa. IN PTR ;; AUTHORITY SECTION: 121.42.in-addr.arpa. 5 IN SOA hidden-master.aliyun.com. hostmaster.aliyun-inc.com. 2013060300 7200 900 2592000 600 ;; Query time: 2004 msec ;; SERVER: 192.168.198.2#53(192.168.198.2) ;; WHEN: Mon Jun 3 20:51:27 2013 ;; MSG SIZE rcvd: 126
以上這些都是對DNS以及域名進行一些簡單的知識介紹、總結(自己感覺總結的有點繁瑣哈。。。),在下一篇隨筆里面將詳細講解Linux下如何配置我們自己的DNS服務器。。。