1. 程式人生 > >Linux入門基礎 #13:DNS基礎及域名系統架構

Linux入門基礎 #13:DNS基礎及域名系統架構

---------------------------------------------------------------------------------


域名

IP地址往往難以記憶,所以我們一般使用域名進行管理 www.google.com 域名分為三個部分,用“.”(點)分割。嚴格的域名最後還有一個".",但一般省略不寫。 -型別 標識此域名的型別(com/net/org/edu/gov等) -域名 域名稱 -主機名 該域中的某臺主機名稱 www: 主機名 google:域名 com: 型別

DNS

  • 每個域名代表一IP,而DNS就是用來在IP與域名之間進行轉換的服務
www.google.com <---> 74.125.128.105
  • DNS(Domain Name System)服務由DNS伺服器提供


DNS客戶端

  • 我們日常使用的支援網路的計算機一般都是作為一個DNS客戶端使用,應用程式、服務、程序等等通過作業系統底層的功能發起對dns伺服器的查詢,對特定域名進行解析
  • Linux中一般使用系統底層提供的gethostbyname()功能進行域名解析
  • 解析可以基於以下幾種方式進行:

1) 檔案(/etc/hosts、/etc/networks)

下面是/etc/hosts,可以看到這個檔案把localhost解析為127.0.0.1以及其它的一些解析


在查DNS之前都會先查這個檔案,所以黑客可能會通過修改這個檔案,讓使用者進入一些釣魚網站。 下面是/etc/networks檔案

2)DNS

幾乎所有的域名都是通過DNS域名伺服器來解析的。DNS配置檔案是在/etc/resolv.conf檔案下,裡面配置DNS伺服器

3) NIS

這個用得比較少,基本被淘汰掉了

  • 可以通過配置檔案 /etc/nsswitch.conf控制查詢順序

其中的host:files dns .... 這一行是控制順序的

DNS專用查詢命令

  • 命令host可用於進行dns查詢:

$ host www.google.com

  • 命令dig也可進行dns查詢,輸出較為詳細的資訊:

$ dig www.google.com

  • 命令host、dig都不會使用/etc/nsswitch.conf的配置,只有會通過/etc/resolv.conf進行dns查詢。即會繞過前面那個檔案配置。

DNS查詢

DNS是一個樹狀結構,查詢的時候根據域名從右到左查詢,域名每一級有獨立的一個或多個伺服器。 例如,www.linuxcast.net.

最上面的"."是根域名伺服器(root DNS Server),用來儲存下一級的com/net...的地址,全球共有13臺根域名伺服器。這13臺根域名伺服器中名字分別為“A”至“M”,其中10臺設定在美國,另外各有一臺設置於英國、瑞典和日本。 第二級是頂級域名伺服器(Top Level Server),每個頂級域名伺服器都是由一臺或多臺伺服器控制的,每個一分別儲存相應的以/com/net/org/....為字尾的域名的管理。 第三級是授權伺服器(Authoritative Server),只負責linuxcast以下的資訊。這裡可以查詢到www, mail, 和ftp主機。
  • $ dig +trace www.linuxcast.net
這個命令可以追蹤整個域名的查詢過程
可以發現查詢順序是: . ——》net. ——》linuxcast.net. ——》www.linuxcast.net.

DNS的查詢型別

1. 迭代查詢(Iterative Query) 例如客戶端用迭代查詢的方式訪問www.linuxcast.net:
1. 首先客戶端傳送請求到本地DNS伺服器(Local DNS Server,即客戶端配置的DNS伺服器) 2. 如果本地DNS不知道這個域名的話,就會去查詢根域名伺服器 3. 根伺服器返回.net伺服器的地址 4. 然後本地DNS在去查詢net伺服器 5. net伺服器返回linuxcast.net的地址 6. 本地DNS再向Linuxcast.net傳送請求 7. linuxcast.net返回www主機給本地DNS 8. 本地DNS返回www.linuxcast.net的地址給客戶端。 2. 遞迴查詢(Recursive Query) 例如客戶端用遞迴查詢的方式訪問www.linuxcast.net:
1. 首先客戶端傳送請求到本地DNS 2. 如果本地DNS不知道這個地址的話,那麼就會向根DNS伺服器查詢。 3. 然後根DNS伺服器不會像迭代查詢一樣返回net地址,而是它會代替本地dns向net伺服器傳送請求查詢 4. 然後net伺服器也不會像迭代查詢一樣返回linuxcast.net的地址,而是代根DNS伺服器向linuxcast.net查詢
5. 最後linuxcast.net伺服器返回www主機的地址給net 6. net伺服器返回www.linucast.net的地址給根DNS伺服器 7. 根DNS伺服器這時再返回www.linucast.net的地址給本地DNS
8. 最後本地DNS返回目標地址給客戶端 這種查詢方式的缺點:在每一級的伺服器上,都會快取大量的資訊,因為它要等待查詢返回,可能會佔用大量的記憶體。 所以實際應用中,會結合這兩種方式使用,即在客戶端向本地DNS伺服器查詢是使用遞迴查詢,而本地DNS伺服器和其他級伺服器使用的是迭代查詢!

資源記錄

在DNS伺服器上,DNS的資訊通過一個叫做資源記錄(RR,Resource Record)的格式進行儲存,RR不僅能夠儲存域名到IP地址的對應資訊,還能夠儲存很多其它資訊。 資源記錄(RR,Resource Record)常用的屬性: - NAME(名稱) - CLASS(類別) - TYPE(型別) - RDATA(資料) 如,
NAME CLASS TYPE RDATA
www IN(Internet) A 192.168.1.1
mail IN A 192.168.1.2
server1 IN CNAME www
IN MX 10 mail.linuxcast.net

資源記錄型別

DNS的資源記錄可以記錄很多型別資源,而不僅僅是IP地址,常見的資源記錄型別:
型別 表示內容
A IPv4地址
AAAA IPv6地址
MX 郵件記錄
CNAME 別名
PTR 指標(逆向解析)
SRV 服務資源

DNS伺服器型別

  • 主DNS伺服器(Primary DNS Server ,Master)
一個域的主伺服器儲存該域的zone配置檔案,該域所有的配置、更改都在該伺服器上進行
  • 從伺服器(Second DNS Server,Slave)
從伺服器一般作為冗餘負載使用,一個域的從伺服器從該域的主伺服器上抓取zone配置檔案,從伺服器不進行資訊修改,所有的修改與主伺服器同步
  • 快取伺服器(Caching only Server)
DNS快取伺服器不存在任何zone檔案,僅僅依靠快取作為客戶端提供服務,通常用於負載均衡及加速訪問使用

ZONE

在DNS伺服器中,一般一個域通過一個ZONE檔案儲存該域的相關資訊,zone檔案的格式是標準化的,一個典型的zone配置檔案內容如下: 有標準模板 STTL ID @ IN SOA @rname.invalid. ( 0 : serial (序列號,DNS伺服器修改過一次序列號加1,從伺服器發現序列號和自己不一樣就會自動更新) 1D : refresh (重新整理時間,1D=1天) 1H : retry (重試, 1H=1小時) 1W : expire 3H); minimum (上面一般直接使用預設的就可以) NS @ MX 10 mail.linuxcast.net www IN A 192.168.1.100 mail IN A 192.168.1.200 (上面是資料)

高階查詢

  • 預設dig命令只能查詢我們通過dig命令查詢其他型別的資源記錄:
$ dig -t mx linuxcast.net $ dig -x www.linuxcast.net 進行逆向解析 $ dig -t soa linuxcast.net