網絡出現的早期是使用IP地址通信的,那是就幾臺主機通信。可是隨着接入網絡主機的增多,這種數字標識的地址很是不便於記憶,UNIX上就出現了創建一個叫作hosts的文件(Linux和Windows也繼承保留了這個文件)。這個文件中記錄着主機名稱和IP地址的對應表,這樣只要輸入主機名稱,系統就會加載hosts文件並查找對應關係,找到對應的IP,就能夠訪問這個IP的主機了。 可是後來主機太多了,沒法保證全部人都能拿到統一的最新的hosts文件,就出現了在文件服務器上集中存放hosts文件,以供下載使用。互聯網規模進一步擴大,這種方式也不堪重負,並且把全部地址解析記錄造成的文件都同步到全部的客戶機彷佛也不是一個好辦法。這時DNS系統出現了,隨着解析規模的繼續擴大,DNS系統也在不斷的煙花,直到現今的多層架構體系。php
DNS(Domain Name System,域名系統),因特網上做爲域名和IP地址相互映射的一個分佈式數據庫,可以使用戶方便的訪問互聯網,而不用去記住可以被機器讀取的IP數串。經過主機名,最終獲得該主機名對應的IP地址的過程叫作域名解析(或主機名解析),DNS協議運行在UDP協議之上,使用端口號53 DNS的分佈式數據庫是以域名爲索引的,每一個域名實際上就是一顆很大的逆向數中路徑,這棵逆向樹成爲域名空間(domain name space) 樹的最大深度不超過127層,樹種每一個節點都有一個能夠長達63個字符的文本符號。linux
首先,客戶端如今本地緩存查找有沒有域名緩存,若是沒有,客戶端發送DNS請求翻譯IP地址或主機名,DNS服務器在收到客戶機的請求後:
(1)檢查Local DNS服務器的緩存,若查到請求的地址或名字,即向客戶機發出應答信息
(2)若沒有查到,則在數據庫中查找,若查到請求的地址或名字,即向客戶端發出應答信息。
(3)若沒有查到,則將請求發給根域DNS服務器,並依序從根域查找頂級域,由頂級域查找二級域,二級域查找三級,直至找到要解析的地址或名字,即向客戶機所在的網絡的DNS服務器發出應答信息,DNS服務器收到應該後先在緩存中存儲,並解析結果發給客戶及
(4)若沒有找到,返回錯誤信息 docker
主DNS服務器:就是一臺存儲着原始資料的DNS服務器 。
從DNS服務器:使用自動更新方式從主DNS服務器同步數據的DNS服務器,也稱輔助DNS服務器 。
緩存服務器:不負責本地解析,採用遞歸方式轉發客戶機查詢請求,並返回結果給客戶機的DNS服務器,同時緩存查詢回來的結果,也叫遞歸服務器。
轉發器:這臺DNS發現非本機負責的請求後,再也不向根發起請求,而是直接轉發給指定的一臺或多臺服務器,自身並不保存查詢結果。數據庫
SOA: 能夠理解爲一段本身dns作備註說明的文本,通常與ns一致 vim
實例:centos
a.shifen.com . 579 IN SOA dns.baidu.com. sa.baidu.com. ( 1408010001 ; serial number 5 ; refresh 5s 5; retry 5s 86400 ; expire 1d 3600 ;min TTL 1h )
相關解釋:
一、Serial:只是一個序號,但這個序號可被用來做爲slave
與master
更新的依據。舉例來講,master序號爲100但slave序號爲90時,那麼這個zone file的資料就會被傳送到slave來更新了。因爲這個序號表明新舊資料,一般咱們創建你能夠利用日期來設定!
舉例來講,若是資料是在2018/03/21所修改的第一次,因此用2018032101做爲序號表明!(yyymmddnn,nn表明這一天是第幾回修改)
二、Refresh:除了根據Serial來判斷新舊以外,咱們能夠利用這個refresh(更新)命令slave多久進行一次主動
更新;
三、Retry:若是到了Refresh的時間,可是slave卻沒法鏈接到master時,那麼在多久以後,slave會再次的主動嘗試與主機連線;
四、Expire:若是slave一直沒法與master鏈接上,那麼通過多久的時間以後,則命令slave不要再鏈接master了!也就是說,此時咱們假設master DNS可能遇到重大問題而沒法上線,則等待系統管理員處理完畢後,再從新來到slave DNS從新啓動bind吧!
五、Minimun:這個就有點像是TTL緩存
NS 域的受權名稱服務器服務器
NSDName:DNS的FQDN a.shifen.com. 611 IN NS ns4.a.shifen.com. a.shifen.com. 611 IN NS ns3.a.shifen.com. a.shifen.com. 611 IN NS ns2.a.shifen.com. a.shifen.com. 611 IN NS ns1.a.shifen.com. a.shifen.com. 611 IN NS ns5.a.shifen.com.
MX 域的郵件交換器,要跟這一個優先級值,越小越高網絡
baidu.com. 7200 IN MX 20 jpmx.baidu.com. baidu.com. 7200 IN MX 20 mx50.baidu.com. baidu.com. 7200 IN MX 10 mx.n.shifen.com. baidu.com. 7200 IN MX 20 mx1.baidu.com.
A記錄: 將域名指向一個IPv4地址(例如:10.10.10.10),須要增長A記錄
CNAME記錄:若是將域名指向一個域名,實現與被指向域名相同的訪問效果,須要增長CNAME記錄
MX記錄: 創建電子郵箱服務,將指向郵件服務器地址,須要設置MX記錄
NS記錄: 域名解析服務器記錄,若是要將子域名指定某個域名服務器來解析,須要設置NS記錄
TXT記錄: 可任意填寫(可爲空),一般用作SPF記錄(反垃圾郵件)使用
AAAA記錄: 將主機名(或域名)指向一個IPv6地址(例如:ff03:0:0:0:0:0:0:c1),須要添加AAAA記錄
SRV記錄: 記錄了哪臺計算機提供了哪一個服務。格式爲:服務的名字.協議的類型(例如:_example-server._tcp)
顯性URL:將域名指向一個http(s)協議地址,訪問域名時,自動跳轉至目標地址(例如:將www.net.cn顯性轉發到www.hichina.com後,訪問www.net.cn時,地址欄顯示的地址爲:www.hichina.com)。
隱性URL: 與顯性URL相似,但隱性轉發會隱藏真實的目標地址(例如:將www.net.cn隱性轉發到www.hichina.com後,訪問www.net.cn時,地址欄顯示的地址仍然爲:www.net.cn)。架構
一、26個英文字母
二、「0.1.2.3.4.5.6.7.8.9」十個數字
三、「-」(英文中的連詞號)
四、最多63字節長度
host
命令是大多數系統
、軟件庫
調用的解析命令,好比php中
[root@www ~]# host baidu.com baidu.com has address 220.181.57.217 baidu.com has address 111.13.101.208 baidu.com has address 123.125.114.144 baidu.com has address 180.149.132.47 baidu.com mail is handled by 20 mx50.baidu.com. baidu.com mail is handled by 20 jpmx.baidu.com. baidu.com mail is handled by 10 mx.n.shifen.com. baidu.com mail is handled by 20 mx1.baidu.com.
Nslookup
可以反映出是那個dns server
返回的結果
[root@www ~]# nslookup baidu.com Server: 100.100.2.136 Address: 100.100.2.136#53 Non-authoritative answer: Name: baidu.com Address: 180.149.132.47 Name: baidu.com Address: 123.125.114.144 Name: baidu.com Address: 111.13.101.208 Name: baidu.com Address: 220.181.57.217
dig
返回整個解析過程的詳細描述,相似traceroute
[root@localhost ~]# dig abcdocker.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> abcdocker.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 46079 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 16 ;; QUESTION SECTION: ;abcdocker.com. IN A ;; ANSWER SECTION: abcdocker.com. 5 IN A 59.110.69.51 ;; AUTHORITY SECTION: abcdocker.com. 5 IN NS dns10.hichina.com. abcdocker.com. 5 IN NS dns9.hichina.com. ;; ADDITIONAL SECTION: dns9.hichina.com. 5 IN A 140.205.81.25 dns9.hichina.com. 5 IN A 106.11.141.115 dns9.hichina.com. 5 IN A 106.11.141.125 dns9.hichina.com. 5 IN A 106.11.211.55 dns9.hichina.com. 5 IN A 106.11.211.65 dns9.hichina.com. 5 IN A 140.205.41.15 dns9.hichina.com. 5 IN A 140.205.41.25 dns9.hichina.com. 5 IN A 140.205.81.15 dns10.hichina.com. 5 IN A 140.205.41.26 dns10.hichina.com. 5 IN A 140.205.81.16 dns10.hichina.com. 5 IN A 140.205.81.26 dns10.hichina.com. 5 IN A 106.11.141.116 dns10.hichina.com. 5 IN A 106.11.141.126 dns10.hichina.com. 5 IN A 106.11.211.56 dns10.hichina.com. 5 IN A 106.11.211.66 dns10.hichina.com. 5 IN A 140.205.41.16 ;; Query time: 336 msec ;; SERVER: 192.168.222.2#53(192.168.222.2) ;; WHEN: Wed Mar 21 10:41:13 2018 ;; MSG SIZE rcvd: 350
2、單臺DNS服務器部署
一、環境準備
centos6.7
yum源配置:https://opsx.alibaba.com/mirror
yum install bind-utils bind bind-devel bind-chroot -y
二、vim /etc/named.conf 主配置文件
[root@hermes ~]# >/etc/named.conf [root@hermes ~]# vim /etc/named.conf DNS首先加載的文件 更多ban9管理員 options { version "1.1.1"; listen-on port 53 {any;}; directory "/var/named/chroot/etc/"; pid-file "/var/named/chroot/var/run/named/named.pid"; allow-query { any; }; Dump-file "/var/named/chroot/var/log/binddump.db"; Statistics-file "/var/named/chroot/var/log/named_stats"; zone-statistics yes; memstatistics-file "log/mem_stats"; empty-zones-enable no; forwarders {202.106.196.115;8.8.8.8; }; }; key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; logging { channel warning { file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m; severity warning; print-category yes; print-severity yes; print-time yes; }; channel general_dns { file "/var/named/chroot/var/log/dns_log" versions 10 size 100m; severity info; print-category yes; print-severity yes; print-time yes; }; category default { warning; }; category queries { general_dns; }; }; include "/var/named/chroot/etc/view.conf";
相關注釋:
options { version "1.1.1"; listen-on port 53 {any;}; #監控端口 directory "/var/named/chroot/etc/"; #A記錄等配置文件所在的目錄 pid-file "/var/named/chroot/var/run/named/named.pid"; 服務器來的進程號 allow-query { any; }; #容許誰訪問{}能夠寫IP Dump-file "/var/named/chroot/var/log/binddump.db"; Statistics-file "/var/named/chroot/var/log/named_stats"; #能夠看到DNS解析記錄的數量,成功率有多少域(能夠作監控)DNS狀態等 zone-statistics yes; #配成yes以後上面纔會寫入 memstatistics-file "log/mem_stats"; #內存狀態 empty-zones-enable no; forwarders {202.106.196.115;8.8.8.8; }; 轉發(若是我這沒有域名就轉發) }; key "rndc-key" { 認證的密鑰 algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; controls { inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; }; }; logging { 日誌 警告路徑 (日誌分2種) channel warning { 日誌的相關信息 file "/var/named/chroot/var/log/dns_warning" versions 10 size 10m; severity warning; print-category yes; print-severity yes; print-time yes; }; channel general_dns { 訪問日誌相關信息 file "/var/named/chroot/var/log/dns_log" versions 10 size 100m; severity info; print-category yes; print-severity yes; print-time yes; }; category default { #默認日誌警告級別 warning; }; category queries { #訪問日誌級別 general_dns; }; }; include "/var/named/chroot/etc/view.conf"; 其餘域的配置文件目錄(view.conf能夠實現簡單的只能DNS的功能,爲之後的只能DNS作準備)
編輯認證
vim /etc/rndc.key key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; };
編輯/etc/rndc.conf
key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; };
vim /var/named/chroot/etc/view.conf
view "View" { #「View 說明 之後能夠修改成電信 聯通」 zone "lnh.com" { #zone配置 type master; #此處爲master 還有一個slave file "lnh.com.zone"; #經過這個view進行來找file 找哪個 allow-transfer { #容許誰來找我要數據(在named.conf(allow-quey)配置) 容許誰來向我發送請求 10.255.253.211; }; notify yes; #當個人master文件發生變動了,去通知下面的IP,如 also-notify { 10.255.253.211; }; }; }; 若是有多個須要一zone"lnh.com開頭"以};結尾
view "View" { zone "lnh.com" { type master; file "lnh.com.zone"; allow-transfer { 10.255.253.211; }; notify yes; also-notify { 10.255.253.211; }; }; };
編輯vim /var/named/chroot/etc/lnh.com.zone
$ORIGIN . $TTL 3600 ; 1 hour lnh.com IN SOA op.lnh.com. dns.lnh.com. ( 2000 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.lnh.com. $ORIGIN lnh.com. shanks A 1.2.3.4 op A 1.2.3.4
註釋:
$ORIGIN . #zone文件生效的域 $TTL 3600 ; 1 hour #域名生存週期(內網能夠調節端,外網長) lnh.com 對外說明我是那個zone IN SOA op.lnh.com. dns.lnh.com. ( 對 2000 ; serial #若是新同步數據須要調節此處的大小 900 ; refresh (15 minutes) #當我slave向我同步數據,同步失敗多久響應 600 ; retry (10 minutes) #10分鐘以後我在發出請求 86400 ; expire (1 day) 1年沒有響應我就認爲他宕機了 3600 ; minimum (1 hour) ) NS op.lnh.com. 此處A記錄的相關信息 $ORIGIN lnh.com. #上面NS配置的域名在下面必定要有一個A記錄 shanks A 1.2.3.4 op A 1.2.3.4
修改目錄權限,並啓動服務
cd /var && chown -R named.named named/ /etc/init.d/named start chkconfig named on
測試解析結果
dig @127.0.0.1 a.lnh.com
若是不指定DNS要看本次的dns server服務器
[root@localhost ~]# cat /etc/resolv.conf ; generated by /sbin/dhclient-script search localdomain nameserver 192.168.222.2