天天看點

基于BIND實作智能DNS解析

    智能DNS又稱為解析切割,是對請求DNS解析的IP位址進行判斷,将域名解析成不同的位址

    一般智能DNS應用常見的場景就是CDN,中國特色社會主義的網絡導緻了電信和聯通這2個特色的營運商,而這2個營運商通過在北京某機房的100G帶寬相連,這就導緻了電信使用者通路聯通的網絡就會非常慢。玩遊戲的童鞋就知道用遊戲加速器來解決問題,但一般的使用者通路在不同營運商網絡的伺服器時,變得非常慢。于是苦逼的服務提供商為了更好的使用者體驗就不得不去花費一筆錢去買CDN服務了。。。。

    CDN的原理就是在智能DNS基礎上進行web的反向代理緩存實作的。通過不同地域的請求解析到對應地域的緩存伺服器上,然後緩存伺服器對主伺服器進行資料請求,最終傳回給客戶。這對于靜态頁面的網站有着很好的加速。

    這裡就不得不提一下著名的提供智能DNS解析服務的DNSpod(目前已被騰訊收購,軟體源代碼已經開源,宣稱非BIND可以比拟,有興趣的童鞋可以去研究研究)。還有比較著名的CDN服務提供商有帝盟等。。。

    還會一種會使用到智能DNS的場景:在公司内部NS伺服器上區分内部和外部的請求,将内部請求解析到内網位址上,外網請求解析到外網位址上,此篇博文針對此應用展開

    BIND實作智能DNS的原理是通過view的方式,首先判斷客戶請求的來源,然後傳回不同的IP

    規劃:為lustlost.com域進行智能解析

分2個網段,192.168.92.0/24網段的請求解析到192.168.92.102主機上, 其它網段解析到172.19.19.102主機

這裡172.19.19.102模拟外網。

這和一般公司的模式很接近,為公司内部提供内部私網位址的解析,避免路由器性能浪費。為外部提供公網位址的解析。

ns伺服器的IP位址為192.168.92.102和172.19.19.102

[root@lustlost ~]# yum install bind caching-nameserver –y #安裝bind和caching-nameserver,這裡的caching-nameserver已經給我們在相應目錄下提供了配置檔案,根區域和本地區域的資料檔案,而且它的主配置是預設以view方式配置的

[root@lustlost etc]# cp /etc/named.caching-nameserver.conf named.conf #用cp備份原配置檔案,建立要使用的配置檔案,然後進行修改

[root@lustlost etc]# vim /etc/named.conf

#首先定義控制清單,這裡定義了内網的網段 

acl innet {  

        127.0.0.0/8;  

        192.168.92.0/24;  

}; 

#全局配置,精簡一點,隻配置資料檔案目錄位置 

options {  

        directory       "/var/named";  

#建立内網使用者的view 

view in {  

        match-clients      { innet; };            #定義使用者為控制清單中所定義的  

        recursion yes;  #允許内網使用者進行遞歸查詢 

#下面是定義根區域和本地區域的正反解析 

        zone "." IN {                

                type hint;  

                file "named.ca";  

        };       

        zone "localhost" IN {  

                type master;  

                file "localhost.zone";  

        }; 

        zone "0.0.127.in-addr.arpa" IN {  

                file "named.local";  

#定義内部網絡使用者解析 

        zone "lustlost.com" IN {  

                file "lustlost.com.in";  

                allow-transfer { none; }; #不允許區域傳送  

                allow-update { none; }; #不允許更新  

        };  

#定義外部網絡使用者解析 

view out {  

        match-clients      { any; }; #允許所有使用者(這裡之是以允許所有使用者,

是因為bind對配置檔案是從上往下讀取解析的,

比對不到上面view所定義的acl,

才會到這個view中來)  

        recursion no;  #不允許外部網絡使用者進行遞歸查詢(我們不是免費的公共dns) 

                file "lustlost.com.out";  

                allow-transfer { none; };  

                allow-update { none; };  

[root@lustlost etc]# named-checkconf  #配置完成後注意檢查配置檔案的文法錯誤

至此就配置好了主配置檔案,接下來建立區域資料檔案

[root@lustlost etc]# cd /var/named/

[root@lustlost named]# vim lustlost.com.in #建立内部網絡客戶解析區域檔案

#這裡就随便建立幾個記錄了 

$TTL 600  

$ORIGIN lustlost.com  

@       IN      SOA     ns.lustlost.com.        admin.lustlost.com. (  

                        2012070801  

                        1H  

                        10M  

                        1W  

                        1D  

)  

        IN      NS      ns  

        IN      MX 10   mail  

ns      IN      A       192.168.92.102  

mail    IN      A       192.168.92.100  

www     IN      A       192.168.92.101 

[root@lustlost named]# cp lustlost.com.in lustlost.com.out #建立外部網絡客戶解析區域檔案

ns      IN      A       172.19.19.102  

mail    IN      A       172.19.19.100  

www     IN      A       172.19.19.101 

至此所有配置都已經完成

檢查下配置有無出錯

<a href="http://lustlost.blog.51cto.com/attachment/201207/8/2600869_1341748828Lk7W.jpg"></a>

檢查無錯誤後啟動服務

<a href="http://lustlost.blog.51cto.com/attachment/201207/8/2600869_1341748828Z4Op.jpg"></a>

檢視下目前網絡配置(為了友善,在網卡上配置了2個不同的位址,下面客戶機也一樣)

<a href="http://lustlost.blog.51cto.com/attachment/201207/8/2600869_1341748829bm9Y.jpg"></a>

檢視下客戶機的網絡配置

<a href="http://lustlost.blog.51cto.com/attachment/201207/8/2600869_1341748829YOFL.jpg"></a>

于是用這台客戶機用不同位址去請求解析DNS

使用192.168.92.0/24網段去解析的結果

<a href="http://lustlost.blog.51cto.com/attachment/201207/8/2600869_1341748831dnMd.jpg"></a>

使用172.19.19.0/24網段去解析的結果

<a href="http://lustlost.blog.51cto.com/attachment/201207/8/2600869_1341748834ZesN.jpg"></a>

可以看到,使用不同網段成功的解析到了不同的位址。

這就是基于BIND的智能DNS解析,使用了BIND的view功能,至于dnspod,在智能DNS解析方面應該有更加強大的功能,有興趣可以去官網下載下傳源代碼安裝研究

本文轉自lustlost 51CTO部落格,原文連結:http://blog.51cto.com/lustlost/924229,如需轉載請自行聯系原作者

繼續閱讀