stone2083

DNS代理服务器

背景接上文:http://www.blogjava.net/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 阅读(9381) 评论(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
这个是反向域名解析查询.
不影响正常使用.  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: