stone2083

          DNS代理服務器

          背景接上文:http://www.aygfsteel.com/stone2083/archive/2011/05/23/350875.html
          隨筆摘自6月13日郵件分享
          目前此軟件在公司測試環境上運行良好,故分享給大家。

          以下為分享內容:

          好處

          1.       一個項目、小需求,需要綁定的Hosts,只需要一份Hosts信息即可。不必每個用戶自行管理各自電腦的Hosts。達到一人配置,多人使用的目的

          2.       綁定的Hosts,支持通配符。方便類似旺鋪域名的需求,只需要配置一個帶通配符的域名即可

          3.       要在不同項目,小需求切換不同的Hosts時,只需要輕輕一點,方便

          4.       要想使用代理服務器,只需要本地DNS設置一下即可,方便

          5.       本機Hosts配置優先

           

          如何使用:(以10.20.131.207環境介紹)備注:公司內部環境,外部無法訪問,如果需要,請自行搭建

          1.       登陸DNS后臺管理頁面URLhttp://10.20.131.207:8000/,點擊Add


          2.       添加一個項目的Hosts信息,點擊添加


          3.       Hosts信息頁面,點擊assign,綁定自己電腦IP和某個Hosts的關聯


          4.       IP List頁面上,顯示了不同IPHosts關聯的信息


          5.       將本機電腦的DNS服務器設置成DNS代理服務器即可(10.20.131.207-- 只需要一次操作即可,以后一直能用

          左圖為windows配置,右圖為linux配置

           

          此時,你訪問域名,如果在2011tp hosts中,則直接返回Hosts中的IP;反之,則返回真實IP。


          如何啟動服務
          1. 啟動DNS代理服務器服務
          1.1 cd dns/dns
          1.2 vi settings.py 修改配置信息
          1.3 python -u main.py

          2. 啟動DNS BackOffice服務
          2.1 cd dns/config
          2.2 vi settings.py 修改配置信息
          2.3 python -u manage.py runserver


          軟件下載:DNS Proxy Server

          ============================================================================================
          為了滿足“邪惡”的人們能更方便的使用這個軟件(貌似邪惡的人特別看重這個軟件通配符的功能,具體邪惡在哪里,我不具體描述了,給個鏈接),我特意寫了一個standalone的版本:
          1. 去除無用的backoffice功能
          2. 去除通過事件機制reload hosts文件的功能
          3. 去除復雜的settings配置文件,改用簡單的命令行方式
          4. 特意為windows用戶制作了一個exe文件,可以直接使用

          linux用戶使用方案:
          python standalone.py -s xxx.xxx.xxx.xxx (上級dns地址)
          python standalone.py -s xxx.xxx.xxx.xxx -f /etc/hosts2 (指定hosts文件,默認是/etc/hosts)

          windows用戶使用方案,進入dist(exe發布目錄)
          dns.exe -s xxx.xxx.xxx.xxx (上級dns地址)
          dns.exe -s xxx.xxx.xxx.xxx -f d:/hosts (指定hosts文件,默認是c:/windows/system32/drivers/etc/hosts)

          對于不放心使用exe的客戶來說,可以進入dns目錄,通過py2exe工具自行發布成exe軟件,方法如下
          python setup.py py2exe

          standalone版本下載

          posted on 2011-07-04 20:39 stone2083 閱讀(9435) 評論(23)  編輯  收藏 所屬分類: python

          Feedback

          # re: DNS代理服務器 2011-07-07 10:11 mj

          增加使用memcache代替讀取配置文件的功能

          vim proxy_dns.py

          import memcache

          mc = self.server.mc

          ip = mc.get(domain)
          #ip = hosts.get_ip(self.client_address[0], domain)


          self.mc = memcache.Client(['127.0.0.1:11211'], debug=0)

          #qq 56185089  回復  更多評論   

          # re: DNS代理服務器 2011-07-07 10:18 Dahai

          因為對程序不是很了解,能否說一下在Windows下具體怎樣安裝使用這個dns服務器  回復  更多評論   

          # re: DNS代理服務器 2011-07-07 11:27 stone2083

          @mj
          挺好的想法。
          目前我們公司并行開發項目量不大,所以理論上特殊化的hosts并不會多得離譜。
          所以在DNS代理服務器端,完全使用了內存cache(Hosts文件內容一次性load到內存中)
          DNS BackOffice為了實現簡單,暫時通過文件的方式保存hosts信息。

          如果要完善這個產品,確實需要考慮一些中間件。相比于memcache,我可能會選擇TT Server(即有底端存儲,又兼容mc協議)  回復  更多評論   

          # re: DNS代理服務器 2011-07-07 11:38 stone2083

          @Dahai
          確實,我還真沒有在windows下做過測試 :(
          理論上,python是跨平臺的,需要做的事情,也差不多
          1. 安裝python
          2. 安裝Django框架
          3. 下載附件,解壓
          4. 進入dns/dns,修改settings.py配置文件,主要是配置hosts存儲路徑和代理服務器ip等信息
          5. 命令提示符下,python main.py
          6.進入dns/config,修改settings .py配置文件,主要是配置hosts存儲路徑和代理服務器通訊地址(一旦修改hosts信息,需要通知給dns代理服務器)
          7.命令提示符下,python manager.py runserver 0.0.0.0:8000

          貌似有工具可以將python程序制作成exe文件。我可以嘗試下。
          你這邊也有類似的需求嗎?  回復  更多評論   

          # re: DNS代理服務器 2011-07-07 20:14 Dahai

          我原以為是非常實用的小軟件,沒想到光配置問題我就解決不了,看來這確實不適合我啊@stone2083
            回復  更多評論   

          # re: DNS代理服務器 2011-07-08 22:08 geyee

          does it support ipv6 通配符 ?  回復  更多評論   

          # re: DNS代理服務器 2011-07-09 19:49 stone2083

          @geyee
          支持通配符,但是沒支持ipv6--目前還沒有這個需求。  回復  更多評論   

          # re: DNS代理服務器 2011-07-15 16:13 Diky

          這個程序很有用,我借助它解決了很多單靠hosts不好解決的「國情」問題(感覺我用在歪道上了…)
          要不要考慮作為開源程序把代碼托管到google code呢?  回復  更多評論   

          # re: DNS代理服務器 2011-07-16 23:03 stone2083

          @Diky
          ^_^,貌似看中通配符功能用于干其他用途的客戶還不少嘛。我特意寫來一個standalone版本的,可以更方便的使用。具體說明我已經補充在正文下方了。
          這個代碼,我本來就是放在googlecode上,地址為:https://stonelab.googlecode.com/svn/trunk/dns。
          只是這個東東只是我用業余時間搞出來的實驗版本,還算不上真正的產品,所以還是低調點。  回復  更多評論   

          # re: DNS代理服務器 2011-09-15 15:20 zhouzm

          請問,能不能支持域名排除
          比如 *.abc.com我要指向一個IP,但 yyy.abc.com 和 zzz.abc.com還是交給DNS解析  回復  更多評論   

          # re: DNS代理服務器 2011-09-15 16:01 stone2083

          @zhouzm
          可以做,不過需要自定義Hosts語法,然后修改hosts.py get_ip方法。
          當然最簡單的方式,就是加一份filter列表,filter中的host,直接交給上級DNS。
          可以嘗試自己修改下。

          這個需求雖然合理,但是有違系統Hosts語法,Hosts理念都是正向的,
          1. 系統Hosts語法, equals(host) (相等匹配)
          2. 我擴展了一下,wildcard_match(host) (通配符匹配)
          3. 甚至可以利用正則擴展,pattern_match(host) (正則匹配)  回復  更多評論   

          # re: DNS代理服務器 2011-09-15 16:21 zhouzm

          感謝回復!

          我是個python盲啊,不會改

          既然要保持Hosts的語法,我建議不如把擴展部分獨立出來,使用另外的配置文件保存,這樣在擴展的時候就更靈活,我看了一下類似的DNS緩存軟件,例如Acrylic就是這么做的
            回復  更多評論   

          # re: DNS代理服務器 2011-09-15 20:16 stone2083

          @zhouzm
          如果僅僅是上面描述的需求,那么擴展filter邏輯,也是方便的一個事情。
          只是設計擴展點,本身不是一件輕松的事情。需要對需求進行相對全面的分析。
          就拿你這個需求來說,哪怕獨立了擴展點,保持了Hosts的語法,但是卻改變了Hosts的語意:你需要對Hosts信息做exclude操作。

          所以,如果不歸納需求,那么擴展點非常難設計。甚至于到最后,需要非常復雜的DSL語言來描述。

          python不難,花個2-3個小時,就差不多掌握語法了。如果要簡單實現你的需求。
          1. 配置filter列表
          2. hosts.py 中,加入self.filter_list,get_ip的時候,優先判斷filter_list.
            回復  更多評論   

          # re: DNS代理服務器 2012-02-22 15:37 Jackie

          要是能做成Windows后臺程序開機自動運行就好了……  回復  更多評論   

          # re: DNS代理服務器 2012-02-22 16:41 stone2083

          @Jackie
          用一個bat腳本封裝,放入自啟動目錄下,就能滿足你的需求了。  回復  更多評論   

          # re: DNS代理服務器[未登錄] 2012-07-12 18:28 Lee

          博主!您好!
          您的程序可以改造成這樣子嗎:
          如果匹配則返回相應IP,否則再交給操作系統處理。
          主要是不想指定額外的DNS。
          因為平時網卡的設置都是讓DNS自動獲取的,在不同地方辦公自動獲取到的DNS也可能會不同,指定某些DNS可能在某些地方反而更慢,如果讓這個程序不需要指定上級dns地址會方便好多。
            回復  更多評論   

          # re: DNS代理服務器 2012-07-12 19:47 stone2083

          @Lee
          理論上應該是可行的--就是程序中設法獲取默認的DNS。
          我周末有空的時候去研究下,可以的話,就修改下。  回復  更多評論   

          # re: DNS代理服務器 2012-07-16 10:40 stone2083

          @Lee
          可行性還是用的,就是利用dhcp client獲取默認DNS信息。
          不過開發的成本比較大,寫一份dhcp協議的解析,客戶端;還要測試多網卡下的場景,PPPOE下的測試,等等。
          不知道你的需求緊迫嗎?

          或者可以使用稍微麻煩的辦法:
          1. windows下,使用ipconfig /all
          2. linux下, cat /etc/resolv.conf
          可以查看默認的DNS,之后再修改成我的DNS Proxy地址。  回復  更多評論   

          # re: DNS代理服務器 2012-08-22 17:35 Brilliance

          沒用
          plus.google.com  回復  更多評論   

          # re: DNS代理服務器 2015-04-20 22:57 麥田

          發現了這個幾年前寫的小程序,非常棒,不知道這樣的腳本能不能在安卓上運行,可能想多了……,電腦fq簡單安卓fq太麻煩了,要考慮省電穩定問題,不fq谷歌服務更耗電  回復  更多評論   

          # re: DNS代理服務器 2015-04-22 21:08 stone2083

          @麥田
          比較困難
          如果是為了FQ考慮,可能需要想其他方案.  回復  更多評論   

          # re: DNS代理服務器[未登錄] 2015-08-31 17:42 yang

          127.0.0.1 -- [Mon Aug 31 17:38:50 2015] 129.52.208.203.in-addr.arpa Not Found
          127.0.0.1 -- [Mon Aug 31 17:39:04 2015] 210.93.79.117.in-addr.arpa Not Found
          127.0.0.1 -- [Mon Aug 31 17:39:04 2015] 210.93.79.117.in-addr.arpa Not Found
          127.0.0.1 -- [Mon Aug 31 17:39:13 2015] 210.174.201.101.in-addr.arpa Not Found
          127.0.0.1 -- [Mon Aug 31 17:39:22 2015] 124.213.9.121.in-addr.arpa Not Found
          127.0.0.1 -- [Mon Aug 31 17:39:31 2015] 221.93.79.117.in-addr.arpa Not Found
          127.0.0.1 -- [Mon Aug 31 17:39:40 2015] 194.73.112.114.in-addr.arpa Not Found


          最近不知道怎么了,全都是這樣的,但是又沒什么影響。百度過說是什么反代理,具體也不明白什么意思。  回復  更多評論   

          # re: DNS代理服務器 2015-09-01 12:42 stone2083

          @yang
          這個是反向域名解析查詢.
          不影響正常使用.  回復  更多評論   

          主站蜘蛛池模板: 嘉峪关市| 南靖县| 电白县| 建宁县| 光山县| 华安县| 合水县| 象山县| 乌鲁木齐县| 安吉县| 锦屏县| 晋城| 丽水市| 武定县| 嘉兴市| 大丰市| 靖远县| 育儿| 闸北区| 枣强县| 绩溪县| 大连市| 南宫市| 西青区| 始兴县| 平果县| 桃源县| 绍兴市| 泸州市| 浏阳市| 介休市| 大竹县| 天台县| 保靖县| 新巴尔虎右旗| 西盟| 肥乡县| 当涂县| 岳阳市| 夏邑县| 格尔木市|