之前在路由端配置好了2条openvpn的线路外加一条pptp的线路,后来长期运行一个维护脚本在其中某条线路抽掉后自动切换其他线路。这样的设置在多数情况其实都是没有问题的。不过还是会有很小的概率,在vpn被断掉或路由刚刚重启完用户登陆上网后导致dns被污染。于是就考虑构建这样的一个dns代理。
于是查了下文档,决定还是用dns via tcp的方式来做。
选用airyai酱的pwx-dns-proxy (嘛,理由是python写的,像偶这种小白出了问题还能简单应付下)
预期如下:
1.平时查询dns完全不走vpn
2.dns_proxy后台出问题后dns查询转走vpn线路(在vpn某条线路抽掉且未切换的这段间隙,用户基本完全上不去网)
3.不用怕污染(至少短期内gfw不会对dns via tcp下手吧)
不过在配置过程中还是发现了一些问题:
1.git clone回来以后直接运行没有任何提示直接退出
2.udp协议不支持UDPServer backend factory
目标实现:
于是简单调试修改了下log类,得知原来失败的原因是dnsmasq占用53端口导致端口冲突。
于是将dns_proxy做了一些简单修改(包括src/log/__init.py,run.sh,src/dnsproxy.py,data/dnsproxy.py这几个文件)。
配合dnsmasq可以完美解决。
安装配置方法如下:
1.为支持usb device或jffs的设备配置openwrt(没搞过的可以参考这篇文章)
2.安装python和twisted
ipkg update ipkg install python26 ipkg install py26-twisted
3.安装好后下载修改过的pwx-dns-proxy,然后将pwx-dns-proxy文件夹放在/opt/目录下即可。如果是用的dualwan固件可以直接开dualwan的ftp服务器,或者用winscp采用scp的方法传入。当然任何你任何习惯的方式都可以。
文件下回来之后可以修改data/dnsproxy.conf下的这2行
add_server("tw","168.95.1.1",53,True)
add_server("isp", "202.99.224.68", 53, False)
我默认采用的dns是中华电信的dns服务器(因为偶的route表里opendns和google dns都会自动走vpn线路,这里可以换成你喜欢的其他非本土dns服务器)
其中第一行的tw的ip可以改成你喜欢的dns服务器的ip
第二行的isp改成你当地isp提供的服务商的isp(实现本土站点cdn加速)
改完后保存传回路由。
在这里偶只给一张dualwan下的ftp配置截图了
4.telnet或ssh进路由(架设路由服务器地址是192.168.0.1)
ssh -l root 192.168.0.1
5.运行
/opt/pwx-dns-proxy/run.sh
之后输入netstat -ln后显示如下则说明安装成功。
root@unknown:/tmp/home/root# netstat -ln|grep 8081 tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:8081 0.0.0.0:*
6.配置dnsmasq.custom
这个根据固件的不同方法也不同,在这里偶也只介绍dualwan的配置方式了。
其中/opt/hosts是用来放自定义hosts文件的位置。
7.自启动配置(注意偶这里的路径是/opt/shareroot/pwx-dns-proxy,如果是把文件夹放在/opt目录下的话需要修改成/opt/pwx-dns-proxy,第二行那个ln -s的可以不输入)
最后再感谢下这个组件的开发者airyai@gmail.com,实在是非常neat~
以上
P.S.:新电子书到了,真的很好用,最近会抽时间写篇评测对比。
P.S.S:Mirasol的商用机被Kyobo第一时间还真在11年第四季度赶出来了,不愧是棒子牌子,把这么好的一个东西做渣了。等Amazon或者Sony乱入了。
P.S.S.S:果然アマガミ是偶的菜wwww,班长腹黑各种美~
P.S.S.S.S:过年更没气氛了,不过这才是真正意义上的过年吧?(年兽神马的求萌化~~~)
P.S.S.S.S.S:Mavvies' back!