網絡出現的早期是使用IP地址通信的,那時就幾臺主機通信。可是隨着接入網絡主機的增多,這種數字標識的地址很是不便於記憶,UNIX上就出現了創建一個叫作hosts的文件(Linux和Windows也繼承保留了這個文件)。這個文件中記錄着主機名稱和IP地址的對應表。這樣只要輸入主機名稱,系統就會去加載hosts文件並查找對應關係,找到對應的IP,就能夠訪問這個IP的主機了。css
可是後來主機太多了,沒法保證全部人都能拿到統一的最新的hosts文件,就出現了在文件服務器上集中存放hosts文件,以供下載使用。互聯網規模進一步擴大,這種方式也不堪重負,並且把全部地址解析記錄造成的文件都同步到全部的客戶機彷佛也不是一個好辦法。這時DNS系統出現了,隨着解析規模的繼續擴大,DNS系統也在不斷的演化,直到現今的多層架構體系。html
首先,客戶端先在本地緩存查找有沒有域名緩存,若是沒有,客戶端發出DNS請求翻譯IP地址或主機名。DNS服務器在收到客戶機的請求後:數據庫
(1)檢查DNS服務器的緩存,若查到請求的地址或名字,即向客戶機發出應答信息;vim
(2)若沒有查到,則在數據庫中查找,若查到請求的地址或名字,即向客戶機發出應答信息;centos
(3)若沒有查到,則將請求發給根域DNS服務器,並依序從根域查找頂級域,由頂級查找二級域,二級域查找三級,直至找到要解析的地址或名字,即向客戶機 所在網絡的DNS服務器發出應答信息,DNS服務器收到應答後如今緩存中存儲,而後,將解析結果發給客戶機。瀏覽器
(4)若沒有找到,則返回錯誤信息。緩存
第一步:客戶端用戶從瀏覽器輸入www.baidu.com網站網址後回車,系統會查詢本地hosts文件及DNS緩存信息,查找是否存在網址對應的IP解析記錄。若是有就直接獲取到IP地址,而後訪問網站,通常第一次請求時,DNS緩存是沒有解析記錄的;服務器
第二步:若是客戶端沒有DNS緩存或hosts沒有對應www.baidu.com網站網址的域名解析記錄,那麼,系統會把瀏覽器的解析請求,交給客戶端本地設置的DNS服務器地址解析(此DNS爲LDNS,即Local DNS),若是LDNS服務器的本地緩存有對應的解析記錄,就會直接返回IP地址;若是沒有,LDNS會負責繼續請求其它的DNS服務器;網絡
第三步:LDNS會從DNS系統的「.」根開始請求www.baidu.com域名的解析,通過一系列的查找各個層次DNS服務器,最終會查找到www.baidu.com域名對應的受權DNS服務器,而這個受權DNS服務器,正是該企業購買域名時用於管理域名解析的服務器。這個服務器有www.baidu.com對應的IP解析記錄,若是此時都沒有,就表示企業的運維人員麼有給www.baidu.com域名作解析;架構
第四步:baidu.com域名對應的受權DNS服務器會把www.baidu.com對應的最終IP解析記錄發給LDNS;
第五步:LDNS把收到來自受權DNS服務器關於www.baidu.com對應的IP解析記錄發給客戶端瀏覽器,而且在LDNS本地把域名和IP的對應解析緩存起來,以便下一次更快的返回相同的解析請求的記錄;
第六步:客戶端瀏覽器獲取到了www.baidu.com的對應IP地址,接下來瀏覽器會請求得到的IP地址對應的Web服務器,Web服務器接收到客戶的請求並響應處理,將客戶請求的內容返回給客戶端瀏覽器;
至此,一次訪問瀏覽網頁的完整過程就完成了
主DNS服務器:就是一臺存儲着原始資料的DNS服務器。
從DNS服務器:使用自動更新方式從主DNS服務器同步數據的DNS服務器。也稱輔助DNS服務器。
緩存服務器:不負責本地解析,採用遞歸方式轉發客戶機查詢請求,並返回結果給客戶機的DNS服務器。同時緩存查詢回來的結果,也叫遞歸服務器。
轉發器:這臺DNS發現非本機負責的查詢請求時,再也不向根域發起請求,而是直接轉發給指定的一臺或者多臺服務器。自身並不緩存查詢結果。
[root@xinlibao xlb1.com]# dig -t A baidu.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A baidu.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 37773 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 6 ;; QUESTION SECTION: #查詢的內容 ;baidu.com. IN A ;; ANSWER SECTION: #相應的內容,通常會獲得至少一條A 記錄,不然就尚未定義。 baidu.com. 347 IN A 111.13.101.208 ;; AUTHORITY SECTION: #受權信息 baidu.com. 22823 IN NS ns7.baidu.com. baidu.com. 22823 IN NS ns4.baidu.com. baidu.com. 22823 IN NS ns3.baidu.com. baidu.com. 22823 IN NS ns2.baidu.com. baidu.com. 22823 IN NS dns.baidu.com. ;; ADDITIONAL SECTION: #每一個受權服務器的IP dns.baidu.com. 22823 IN A 202.108.22.220 ns2.baidu.com. 22823 IN A 61.135.165.235 ns3.baidu.com. 22823 IN A 220.181.37.10 ns4.baidu.com. 22823 IN A 220.181.38.10 ns7.baidu.com. 22823 IN A 119.75.219.82 caishikou.redirect. 3600 IN A 127.0.0.1 ;; Query time: 35 msec ;; SERVER: 114.114.114.114#53(114.114.114.114) #查詢的dns服務器 ;; WHEN: Sun Nov 26 21:23:41 2017 ;; MSG SIZE rcvd: 247
DNS智能解析簡單的來講就是根據DNS服務器根據客戶端請求IP的不一樣來給客戶端返回不一樣的服務器地址,好比說電信用戶訪問www.baidu.com的時候DNS服務器會返回給用戶電信服務器,網通用戶訪問www.baidu.com的時候DNS服務器會返回給用戶網通服務器,這樣就解決了南北用戶訪問過慢或電信用戶訪問網通服務器過慢的問題,國內著名的DNSpod實現的也是這樣的一個功能,而BIND9自帶的VIEW視圖功能就能夠徹底實現這個功能。VIEW視圖能夠說是BIND9一個最強大的功能之一,他能夠徹底按照你要求來實現DNS服務器對不一樣IP、不一樣網段的智能解析工做。
Bind是一款開放源碼的DNS服務器軟件,Bind由美國加州大學Berkeley分校開發和維護的,全名爲Berkeley Internet Name Domain它是目前世界上使用最爲普遍的DNS.
配置yum源。
我用的系統是centos6.8,使用centos6.8自帶的yum源便可,同時確保機器能夠解析外網域名,並能鏈接公網。
Yum安裝bind yum install bind-utils bind bind-devel bind-chroot -y 檢查: [root@dns ~]# rpm -qa|grep bind bind-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-chroot-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-devel-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-libs-9.8.2-0.62.rc1.el6_9.4.x86_64 bind-utils-9.8.2-0.62.rc1.el6_9.4.x86_64 編輯主配置文件以前copy一份cp /etc/named.conf{,.bak} 編輯主配置文件vi /etc/named.conf(配置文件,定義bind進程的工做屬性,區域的定義。) options { version "1.1.1"; listen-on port 53 {any;}; #表示監放任何ip對53端口的請求 directory "/var/named/chroot/etc/"; pid-file "/var/named/chroot/var/run/named/named.pid"; allow-query { any; }; #表示接收任何來源查詢dns 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";
編輯/etc/rndc.key(實現讓遠程工做的密鑰文件)
key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; };
編輯/etc/rndc.conf(rndc的配置文件)
key "rndc-key" { algorithm hmac-md5; secret "Eqw4hClGExUWeDkKBX/pBg=="; }; options { default-key "rndc-key"; default-server 127.0.0.1; default-port 953; };
編輯/var/named/chroot/etc/view.conf
view "View" { zone "xlb.com" { type master; file "xlb.com.zone"; allow-transfer { 10.255.253.211; }; notify yes; also-notify { 10.255.253.211; }; }; };
編輯/var/named/chroot/etc/xlb.com.zone
$ORIGIN . $TTL 3600 ; 1 hour xlb.com IN SOA op.xlb.com. dns.xlb.com. ( 2000 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.xlb.com. $ORIGIN xlb.com. shanks A 1.2.3.4 op A 1.2.3.4
修改權限
[root@dns ~]# cd /var && chown -R named.named named/ [root@dns var]# /etc/init.d/named start Starting named: [ OK ]
域名解析驗證
[root@dns var]# dig @127.0.0.1 shanks.xlb.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @127.0.0.1 shanks.xlb.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18531 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 1.2.3.4 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 1.2.3.4 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Thu Nov 23 17:34:15 2017 ;; MSG SIZE rcvd: 81
[root@dns ~]# dig @172.16.1.128 shanks.xlb.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> @172.16.1.128 shanks.xlb.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 39717 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 1.2.3.4 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 1.2.3.40 ;; Query time: 0 msec ;; SERVER: 172.16.1.128#53(172.16.1.128) ;; WHEN: Thu Nov 23 18:04:51 2017 ;; MSG SIZE rcvd: 81
編輯主配置文件vim /etc/named.conf ##直接複製粘貼便可
options { listen-on port 53 {any;}; allow-recursion {"none";}; recursion yes; allow-query {any;}; max-cache-ttl 900; directory "/var/named"; pid-file "/var/named/named.pid"; dump-file "/var/named/named_dump.db"; statistics-file "/var/named/named.status"; }; include "/var/named/view/test1_view/ip"; include "/var/named/view/test1_view/view.conf";
編輯配置文件/var/named/view/test1_view/ip
##文件test1_view是沒有的須要手動建立
mkdir /var/named/view/test1_view/ -p ##編輯配置文件ip acl test1_view{ 192.168.1.110; }; acl test2_view{ 172.16.1.50; }; ##編輯view.conf文件 view "test1" { match-clients { test1_view;}; zone "xlb.com" in { type master; file "/var/named/xlb.com/zone.xlb.com"; allow-update{none;}; }; }; view "test2" { match-clients { test2_view;}; zone "xlb.com" in { type master; file "/var/named/xlb.com/zone.xlb1.com"; allow-update{none;}; }; };
編輯/var/named/xlb.com/zone.xlb.com
##建立目錄: mkdir /var/named/xlb.com/ -p ##編輯 /var/named/xlb.com/zone.xlb.com $ORIGIN . $TTL 3600 ; 1 hour xlb.com IN SOA op.xlb.com. dns.xlb.com. ( 2000 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.xlb.com. $ORIGIN xlb.com. shanks A 1.2.3.5 op A 1.2.3.6
##編輯 /var/named/xlb.com/zone.xlb1.com
$ORIGIN . $TTL 3600 ; 1 hour xlb.com IN SOA op.xlb.com. dns.xlb.com. ( 2005 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.xlb.com. $ORIGIN xlb.com. op A 192.168.122.2 shanks A 192.168.122.2
編輯master節點vim /var/named/chroot/etc/group2.viewlnh.com.zone
$ORIGIN . $TTL 3600 ; 1 hour viewlnh.com IN SOA op.viewlnh.com. dns.viewlnh.com. ( 2005 ; serial 900 ; refresh (15 minutes) 600 ; retry (10 minutes) 86400 ; expire (1 day) 3600 ; minimum (1 hour) ) NS op.viewlnh.com. $ORIGIN viewlnh.com. op A 192.168.122.2 view A 192.168.122.2
配置完成後能夠檢查語法
named-checkconf
修改文件所屬,加載配置。
chown named.named /var/named/* rndc reload
驗證IP地址192.168.1.110
驗證 IP地址192.168.1.110 [root@xinlibao xlb.com]# dig -t A op.xlb.com @192.168.1.110 #這是我本機ip就是dns服務器ip ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A op.xlb.com @192.168.1.110 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 418 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;op.xlb.com. IN A ;; ANSWER SECTION: op.xlb.com. 3600 IN A 1.2.3.6 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; Query time: 0 msec ;; SERVER: 192.168.1.110#53(192.168.1.110) ;; WHEN: Mon Nov 27 09:54:38 2017 ;; MSG SIZE rcvd: 58 [root@xinlibao xlb.com]# dig -t A shanks.xlb.com @192.168.1.110 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A shanks.xlb.com @192.168.1.110 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12427 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 1.2.3.5 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 1.2.3.6 ;; Query time: 0 msec ;; SERVER: 192.168.1.110#53(192.168.1.110) ;; WHEN: Mon Nov 27 09:56:14 2017 ;; MSG SIZE rcvd: 81
驗證ip地址172.16.1.50
[root@xinlibao xlb.com]# dig -t A shanks.xlb.com @172.16.1.50 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A shanks.xlb.com @172.16.1.50 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 20873 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;shanks.xlb.com. IN A ;; ANSWER SECTION: shanks.xlb.com. 3600 IN A 192.168.122.2 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; ADDITIONAL SECTION: op.xlb.com. 3600 IN A 192.168.122.2 ;; Query time: 0 msec ;; SERVER: 172.16.1.50#53(172.16.1.50) ;; WHEN: Mon Nov 27 09:58:20 2017 ;; MSG SIZE rcvd: 81 [root@xinlibao xlb.com]# dig -t A op.xlb.com @172.16.1.50 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.4 <<>> -t A op.xlb.com @172.16.1.50 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23688 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;op.xlb.com. IN A ;; ANSWER SECTION: op.xlb.com. 3600 IN A 192.168.122.1 ;; AUTHORITY SECTION: xlb.com. 3600 IN NS op.xlb.com. ;; Query time: 0 msec ;; SERVER: 172.16.1.50#53(172.16.1.50) ;; WHEN: Mon Nov 27 10:00:06 2017 ;; MSG SIZE rcvd: 58