Linux學習之CentOS(三十三)--DNS基礎及域名系統架構


您可以通過點擊 右下角 的按鈕 來對文章內容作出評價, 也可以通過左下方的 關注按鈕 來關注我的博客的最新動態。 

如果文章內容對您有幫助, 不要忘記點擊右下角的 推薦按鈕 來支持一下哦   

如果您對文章內容有任何疑問, 可以通過評論或發郵件的方式聯系我: 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服務器。。。

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM