Openwrt 上的 Dnsmasq IPSET 真是神器

2014-06-21 19:49:16 +08:00
 leavic
我只大概说一下,OpenWRT上从2.66版开始的Dnsmasq已经支持IPSET了,不过需要自己改一下Makefile重新编译.
所以,Dnsmasq.conf里可以把XXX域名的解析结果全部导入一个IPSET,然后通过防火墙规则,可以把IPSET里的所有IP转发到VPN网关上,配合上GFWlist,聪明的你应该懂了.
之前只用过AutoddVPN,IPSET其实都不是太懂,不过折腾了一天已经成功编译好dnsmasq并且在两台路由上跑起来了,真是目前我所知道最好的翻墙方案了,维护难度几乎为0.

参考这三个链接:
https://code.google.com/p/autovpn-for-openwrt/wiki/Dnsmasq_Ipset
http://samsonly.us/?p=85
https://sorz.org/p/openwrt-outwall/
24180 次点击
所在节点    OpenWrt
60 条回复
LazyZhu
2014-06-21 20:09:25 +08:00
利用Dnsmasq的server和ipset吧,关键能否把vpn替换成其他类型的代理,譬如shadowsocks?
ipset -N shadowsocks iphash
iptables -t mangle -A PREROUTING -m set --match-set shadowsocks dst -j MARK --set-mark 1
ip rule add fwmark 1 table 1
然后创建一个只走shadowsocks的路由表
Nin
2014-06-21 20:12:23 +08:00
方法是好,只是略折腾
cj1324
2014-06-21 21:35:57 +08:00
顶 改良一下配合ss不错。
lj0014
2014-06-21 21:42:30 +08:00
@LazyZhu
@cj1324
有折腾出配合ss的方案吗?
cj1324
2014-06-21 21:56:47 +08:00
@lj0014
需要实践来证明。 开始改脚本重新编译刷openwrt 。
leavic
2014-06-21 22:06:21 +08:00
@cj1324 我这里有编译好的适用于ar71xx芯片的2.71版的开了IPSET的dnsmasq文件,不要浪费做重复的工作了:
http://www.lifetyper.com/?wpdmact=process&did=OS5ob3RsaW5r
mortal
2014-06-21 22:11:27 +08:00
顶,希望能有更加简易的方案…
binux
2014-06-21 22:12:48 +08:00
其实没有也可以。。打开 dnsmasq 的日志就可以了。。
http://blog.binux.me/2014/01/add-blocked-ip-to-route/
cj1324
2014-06-21 22:15:47 +08:00
@leavic
你这个只是编译好了dnsmasq吧。
还需要 一系列脚本把这个流程串起来。
达到刷机直接可用的地步。 《工程化!》
leavic
2014-06-21 22:19:43 +08:00
@cj1324 从OpenWRT官方下载image builder,用这个ipk替换掉官方的对应的ipk,然后你把脚本作为files打包进image就可以了,后面不需要编译过程.
脚本总共就三条命令,我折腾一天就是为了编译这个dnsmasq,后面都很快.
cj1324
2014-06-21 22:23:43 +08:00
@leavic 能用 -》 好用 -》 不用 (嘿嘿)
leavic
2014-06-21 22:28:09 +08:00
@binux 嗯,你这个和我之前写过一个给autoddvpn维护route表的脚本思路差不多,不过这种方法的问题也很明显:
一个是你自己都提到的第一次访问时的问题;
还有就是有些网站的IP解析变化速度快得惊人,dropbox和instagram这种放在amazonaws上的就是这样,我试过隔几秒去nslookup一次一个域名,结果连续给我返回了N个不同的IP.
而IPSET则完全没有这个问题,整个过程都是即时生效的,所以即时解析出不同的结果也不影响工作.
leavic
2014-06-21 22:30:44 +08:00
@cj1324 这个方案就是部署起来比autoddvpn门槛略高,所以基本没法普及,要做也只能像你说的针对路由去做打包好的固件,我现在也是在WNDR3800和TL-WR720n上做了打包了全部的脚本和配置文件的固件刷进去,就算重置路由也是直接翻墙.
cj1324
2014-06-21 22:40:21 +08:00
@leavic 为什么没办法普及? 没办法脚本自动化? 到最后不就是转换成iptables 脚本吗? 把ss的package加一些依赖 改进一下启动脚本不就好了?
我之前的改进 https://github.com/cj1324/shadowsocks-libev/tree/master/openwrt
leavic
2014-06-21 22:46:25 +08:00
@cj1324 我指的是编译dnsmasq这块没法普及,不可能要求所有人都去自己编译package然后定制固件,但是对码农来说,这个没有难度,三条命令的脚本都搞不定就该改行了.
cj1324
2014-06-21 22:53:27 +08:00
@leavic 哦 我现在目标只是不在重复自己。 至于普及普通用户最多只能做到提供功能健全的ipk包。但是前提还要有CPU平台一致openwrt系统 ...
LazyZhu
2014-06-22 01:07:39 +08:00
用shadowsocks替代vpn是可行的, 就是不知道效率如何

ss-tunnel 把dns请求转发给shadowsocks
tun2socks + ss-local 把数据请求转发给shadowsocks

dnsmasq(server=/google.com/127.0.0.1#5053) -> ss-tunnel(-b 127.0.0.1 -l 5053 -L 8.8.8.8:53) -> ss-server
dnsmasq(ipset=/google.com/tun2socks) -> tun2socks(--socks-server-addr 127.0.0.1:1080) -> ss-local(-l 1080) -> ss-server
shierji
2014-06-22 23:33:46 +08:00
@cj1324 期待。哈哈
shierji
2014-06-22 23:38:38 +08:00
如果我没理解错的话。貌似整合shadowsocks并不麻烦。。。。
lj0014
2014-06-28 23:10:10 +08:00
好像确实不麻烦,试了下似乎可行
ipset -N letitgo iphash
iptables -t nat -A PREROUTING -p tcp -m set --match-set letitgo dst -j REDIRECT --to-port 1080
#1080端口是ss-redir
@shierji
@LazyZhu

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/118823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX