前言
此文摘自2011年5月23日郵件分享,為《Hosts綁定新思路之HTTP代理篇》續集
電視有續集,電影也有續集,Hosts綁定思路同樣有續集.
我們先用一句話來回顧下,上集中關于Hosts綁定的思路:
原理:利用Http代理的方式,將分散在各個客戶端的Hosts綁定,集中綁定在Http代理服務器上
優點:集中管理
缺點:一臺Http代理服務器,只能綁定一組Hosts信息
(詳細內容,請見之前的郵件)
在當時描述方案郵件的時候,也意識到了方案存在的不足,所以一直在思考改進方案(詳見之前郵件中最后一節—改進方案思路).
經過一段時間的思考,改進方案有了大概的雛形: 將之前的HTTP代理方案 替換成 DNS代理方案
俗話說得好:有圖有真相.先貼上一張架構圖,之后再用文字慢慢解釋

架構中核心組件是:DNS BackOffice服務器 和DNS代理服務器
DNS BackOffice服務器的作用有:
1. 開發/測試管理員通過BackOffice服務維護各自項目的綁定信息,BackOffice服務將之持久化 (圖中 藍色虛線)
2. 開發/測試人員通過BackOffice服務,告知需要哪個項目的綁定信息,BackOffice服務將之持久化 (圖中 黑色虛線)
DNS代理服務器的作用有:
1. 攔截Domain Name的解析.通過來源IP判斷需要綁定的Hosts信息,通過File/DB得到對應的IP,通過DNS協議返回 (圖中 紅色實線 和 黑色實線)
2. 如果不在綁定之列,則請求上級DNS服務器,返回其Response.
此方案的優勢:
1. 本地Hosts綁定優先.
只要本地Hosts有綁定IP,則不會請求DNS代理服務器.只請求本地Hosts文件.能滿足個性化需求.
2. DNS代理服務器支持多種綁定方式,如通配符,正則等
對于目前旺鋪,完全可以使用通配符,如 *.cn.alibaba.com,簡化配置工作量
3. 操作簡單
只要將DNS服務器設置成DNS代理服務器IP即可 (附錄中有詳細說明)
4. 有效利用現有成果
目前測試同學已經集中維護了Hosts綁定信息,只要部署DNS代理服務器,并做簡單的集成即可
5. DNS代理服務器代碼輕量小巧,易于修改擴展
目前一共只有212行代碼,其中DNS協議部分130行,DNS代理部分82行.
附錄
I. 客戶端如何設置DNS服務器
Windows用戶,見圖:

Linux用戶,見圖:

修改 /etc/resolv.conf文件即可