智能DNS又稱爲解析切割,是對請求DNS解析的IP地址進行判斷,將域名解析成不一樣的地址web
通常智能DNS應用常見的場景就是CDN,中國特點社會主義的網絡致使了電信和聯通這2個特點的運營商,而這2個運營商經過在北京某機房的100G帶寬相連,這就致使了電信用戶訪問聯通的網絡就會很是慢。玩遊戲的童鞋就知道用遊戲加速器來解決問題,但通常的用戶訪問在不一樣運營商網絡的服務器時,變得很是慢。因而苦逼的服務提供商爲了更好的用戶體驗就不得不去花費一筆錢去買CDN服務了。。。。vim
CDN的原理就是在智能DNS基礎上進行web的反向代理緩存實現的。經過不一樣地域的請求解析到對應地域的緩存服務器上,而後緩存服務器對主服務器進行數據請求,最終返回給客戶。這對於靜態頁面的網站有着很好的加速。緩存
這裏就不得不提一下著名的提供智能DNS解析服務的DNSpod(目前已被騰訊收購,軟件源代碼已經開源,宣稱非BIND能夠比擬,有興趣的童鞋能夠去研究研究)。還有比較著名的CDN服務提供商有帝盟等。。。服務器
還會一種會使用到智能DNS的場景:在公司內部NS服務器上區份內部和外部的請求,將內部請求解析到內網地址上,外網請求解析到外網地址上,此篇博文針對此應用展開網絡
BIND實現智能DNS的原理是經過view的方式,首先判斷客戶請求的來源,而後返回不一樣的IPide
規劃:爲lustlost.com域進行智能解析性能
分2個網段,192.168.92.0/24網段的請求解析到192.168.92.102主機上, 其它網段解析到172.19.19.102主機網站
這裏172.19.19.102模擬外網。spa
這和通常公司的模式很接近,爲公司內部提供內部私網地址的解析,避免路由器性能浪費。爲外部提供公網地址的解析。3d
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 {
- type master;
- file "named.local";
- };
- #定義內部網絡用戶解析
- zone "lustlost.com" IN {
- type master;
- file "lustlost.com.in";
- allow-transfer { none; }; #不容許區域傳送
- allow-update { none; }; #不容許更新
- };
- };
- #定義外部網絡用戶解析
- view out {
- match-clients { any; }; #容許全部用戶(這裏之因此容許全部用戶,
- 是由於bind對配置文件是從上往下讀取解析的,
- 匹配不到上面view所定義的acl,
- 纔會到這個view中來)
- recursion no; #不容許外部網絡用戶進行遞歸查詢(咱們不是免費的公共dns)
- zone "lustlost.com" IN {
- type master;
- 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 #建立外部網絡客戶解析區域文件
- $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 172.19.19.102
- mail IN A 172.19.19.100
- www IN A 172.19.19.101
至此全部配置都已經完成
檢查下配置有無出錯
檢查無錯誤後啓動服務
查看下當前網絡配置(爲了方便,在網卡上配置了2個不一樣的地址,下面客戶機也同樣)
查看下客戶機的網絡配置
因而用這臺客戶機用不一樣地址去請求解析DNS
使用192.168.92.0/24網段去解析的結果
使用172.19.19.0/24網段去解析的結果
能夠看到,使用不一樣網段成功的解析到了不一樣的地址。
這就是基於BIND的智能DNS解析,使用了BIND的view功能,至於dnspod,在智能DNS解析方面應該有更增強大的功能,有興趣能夠去官網下載源代碼安裝研究