概念
域名系統DNS(Domain Name System)是因特網使用的命名系統,域名(domain name)。這裏,“域”(domain)是名字空間中一個可被管理的劃分。DNS作用很簡單,就是對ip通過域名進行訪問
因特網的域名結構
域名只是邏輯概念,並不代表計算機所在的物理地點。分爲三大類:
- 國家頂級域名
- 通用頂級域名
- 基礎結構域名——arpa用於反向域名解析
因特網在命名時採用層次樹狀結構命名
服務器主要用來管理互聯網的主目錄,全世界只有13臺,這13臺根服務器可以指揮Firefox或互聯網 Explorer這樣的Web瀏覽器和電子郵件程序控制互聯網通信。換句話說——攻擊整個因特網最有力、最直接,也是最致命的方法恐怕就是攻擊根域名服務器了。
根服務器的作用:負責全球互聯網域名的體系和Ip地址的管理,根域記錄所有頂級(一級)域名服務器的信息。
DNS的發展
1、hosts文件——需要不停的添加域名(手工添加)
2、週期性任務——在指定時間自動去寫(自動添加)
3、server——東西太多(性能hold不住)
4、分佈式數據庫——全球各地分放
域名解析的方式
DNS服務器解析域名的兩種方式:
遞歸——計算機只發起一次請求
迭代——計算機發起多次請求
DNS域名解析的過程
解析方式:客戶端發出的查詢都是遞歸查詢,DNS服務器向外發出的一般都是迭代查詢
- 在瀏覽器中輸入www. google .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域的服務器收到請求後,如果自己無法解析,它就會找一個管理google .com的DNS服務器地址給本地DNS服務器。
當本地DNS服務器收到這個地址後,就會找google.com域服務器,重複上面的動作,進行查詢,直至找到www. google.com主機。 - 如果用的是轉發模式,本地DNS服務 器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把請求轉至上上級,以此循環。找到最後把結果返回給本地DNS服務器,由此DNS服務器再
返回給客戶機。
過程比較繁瑣,但邏輯性強,容易理解,DNS解析過程也是HR經常會問到的問題!
上文提到的權威和非權威是根據解析答案是否由直接負責的DNS服務器返回:
①權威答案:由直接負責的DNS服務器返回的答案。
②非權威答案:不是由直接負責的DNS服務器返回的答案。這種情況下一般是由其他DNS服務器直接返回緩存的解析結果。
DNS 服務器類型
主DNS服務器:數據修改 (接受用戶請求返回數據) master
輔助dns服務器: 定期請求數據同步 slave
緩存dns服務器: 只緩存dns數據 hint
轉發器:緩存服務器去掉緩存功能 forward
bind
DNS協議的一種開源實現——bind,當今互聯網上的通信幾乎都必須藉助於DNS服務器來解析主機名,得到通信對方的IP地址,而在DNS服務器上最常用的軟件就是bind,提供dns服務的套件叫bind但執行服務名稱的是named。
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 區域配置檢查工具
/var/named/named.ca 全球十三個根服務器的相關信息
注意:
1)一臺DNS服務器可同時爲多個區域提供解析。
2)DNS服務器必須要有根區域解析庫文件:named.ca.
3)DNS服務器還應該有兩個區域解析庫文件:localhost和127.0.0.1的正反向解析庫,這兩個文件分別如下:
①正向解析庫文件:/var/named/named.localhost
②反向解析庫文件:/var/named/named.loopback
4)DNS在53端口上監聽請求並提供響應的服務。出於性能的考慮,DNS查詢請求用UDP協議交互並且每個請求的大小小於512字節,但是如果返回的請求大小大於512字節,交互雙方會協商使用TCP協議。
配置文件詳解
查看主配置文件/var/named.conf
[root@www ~]# vim /var/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; #允許遞歸
#allow-recursion { 192.168.0.0/16; } ;指定可以遞歸的範圍
logging { //指定日誌記錄分類和他們的目標位置
};
Zone{ 定義區域,一個zone定義一個區域
type hint;
};
type區域類型,有以下下幾種:
- 主區域:主DNS,master
- 從區域:從DNS,slave
- 緩存區域:hint,在找不到相關信息的時候去從根查找,標識根的地址
- 轉發區域:forward,轉發到指定區域,而不是指向根
查看named.localhost文件
[root@www ~]# cat /var/named/named.localhost
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial 序列號
1D ; refresh 檢查時間
1H ; retry 重試時間
1W ; expire 緩存時長
3H ) ; minimum 過期時間
NS @
@ A 127.0.0.1 關鍵就是這一條記錄
每一條資源記錄默認向上一條資源記錄去匹配參數
解釋:
資源記錄包含的元素:
owner-name TTL class type date
主機名 資源記錄生存時間 INTERNET A 記錄存儲數據(主機ip)
TTL值:當外部DNS服務器對你的DNS這個域進行查詢時,這個記錄會放置在對方的DNS服務器幾秒鐘
@:對SOA所解析的區域可以用@符號來代替
類型:
- SOA(起始授權記錄) 記錄提供有關dns區域工作方式的信息——具體負責哪個區域的解析
- NS 將自己的域名映射到DNS 將域名最終映射到哪一臺主機(標記 dns服務器)
- A (ipv4地址記錄) 資源記錄將主機名映射到ipv4地址。
- CNAME (規範名稱)記錄域別名
- MX 郵件交換記錄
- PTR指針記錄 將IPV4 IPV6地址映射到主機名 (用於反向DNS)
- AAAA (IPV6 地址記錄) 將主機名映射到ipv6地址。
五種定義的信息
serial number: 序列號 定義當前使用的數據序列號,遵循“年+月+日+編號” ·,主和從的更新依據
refresh: 定義檢查間隔時間 (上次和這次變化的時間)
retry: 重試時間 < 檢查時間>
expire: 過期時間 緩存放多久過期
negative answer ttl: 否定答案的緩存時長 (沒有指定生存期的數據可以保存在數據中的時間及TTL值)
時間單位:M(分鐘)、H(小時)、D(天)、W(周),默認單位是秒