1
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的路由表 |
2
Nin 2014-06-21 20:12:23 +08:00 via Android
方法是好,只是略折腾
|
3
cj1324 2014-06-21 21:35:57 +08:00
顶 改良一下配合ss不错。
|
6
leavic OP @cj1324 我这里有编译好的适用于ar71xx芯片的2.71版的开了IPSET的dnsmasq文件,不要浪费做重复的工作了:
http://www.lifetyper.com/?wpdmact=process&did=OS5ob3RsaW5r |
7
mortal 2014-06-21 22:11:27 +08:00
顶,希望能有更加简易的方案…
|
8
binux 2014-06-21 22:12:48 +08:00
其实没有也可以。。打开 dnsmasq 的日志就可以了。。
http://blog.binux.me/2014/01/add-blocked-ip-to-route/ |
10
leavic OP @cj1324 从OpenWRT官方下载image builder,用这个ipk替换掉官方的对应的ipk,然后你把脚本作为files打包进image就可以了,后面不需要编译过程.
脚本总共就三条命令,我折腾一天就是为了编译这个dnsmasq,后面都很快. |
12
leavic OP @binux 嗯,你这个和我之前写过一个给autoddvpn维护route表的脚本思路差不多,不过这种方法的问题也很明显:
一个是你自己都提到的第一次访问时的问题; 还有就是有些网站的IP解析变化速度快得惊人,dropbox和instagram这种放在amazonaws上的就是这样,我试过隔几秒去nslookup一次一个域名,结果连续给我返回了N个不同的IP. 而IPSET则完全没有这个问题,整个过程都是即时生效的,所以即时解析出不同的结果也不影响工作. |
13
leavic OP @cj1324 这个方案就是部署起来比autoddvpn门槛略高,所以基本没法普及,要做也只能像你说的针对路由去做打包好的固件,我现在也是在WNDR3800和TL-WR720n上做了打包了全部的脚本和配置文件的固件刷进去,就算重置路由也是直接翻墙.
|
14
cj1324 2014-06-21 22:40:21 +08:00
@leavic 为什么没办法普及? 没办法脚本自动化? 到最后不就是转换成iptables 脚本吗? 把ss的package加一些依赖 改进一下启动脚本不就好了?
我之前的改进 https://github.com/cj1324/shadowsocks-libev/tree/master/openwrt |
15
leavic OP @cj1324 我指的是编译dnsmasq这块没法普及,不可能要求所有人都去自己编译package然后定制固件,但是对码农来说,这个没有难度,三条命令的脚本都搞不定就该改行了.
|
16
cj1324 2014-06-21 22:53:27 +08:00
@leavic 哦 我现在目标只是不在重复自己。 至于普及普通用户最多只能做到提供功能健全的ipk包。但是前提还要有CPU平台一致openwrt系统 ...
|
17
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 |
19
shierji 2014-06-22 23:38:38 +08:00
如果我没理解错的话。貌似整合shadowsocks并不麻烦。。。。
|
20
lj0014 2014-06-28 23:10:10 +08:00
|
21
diymusic 2014-06-29 19:31:59 +08:00
|
22
cj1324 2014-06-29 20:43:13 +08:00
@shierji
同一原理的实现。 openwrt 的feed https://github.com/cj1324/hc_openwrt_packages 8M 720n的固件包含ipk下载 http://goo.gl/052PT7 固件特点 1. dnsmasq+ipset + ssredir完整的服务启动脚本。 2. 没开80 ,首次通过23端口管理配好后ssh 3. 刷入开机可用~ |
23
shierji 2014-06-30 23:28:45 +08:00
我今天又一次认识到DNS查询是UDP包。。。囧
难道果然需要重新编译 dnsmasq么 |
24
est 2014-07-04 20:31:26 +08:00 via Android
pac实现完全相同功能!
|
25
JoeyChan 2014-07-04 20:55:41 +08:00
好像很复杂的样子,如果根据gfwlist来判断的话还有很多遗漏的域名,我感觉还是用白名单比较舒服,国内走本地,其他走socks5,这样100%不会受到墙的干扰,而且一定程度上可以加速一些国外网站的访问,当然你自己的shadowsocks速度要给力才行。我说说我的做法:
1、shadowsocks,用ss-redir运行,得到一个透明代理。 2、chnroute整理国内ip段出来,通过iptables创建规则,默认流量走ss透明代理,国内ip段则走本地。整理出来大概将近4000条防火墙规则,我用openwrt执行的话大概需要三四分钟,也就是开机加载时间比较久,路由器不重启的话基本没什么影响。 3、dns污染问题,实际上我觉得这个老方法更有效 https://code.google.com/p/openwrt-gfw/wiki/AntiDNSPoisoning 用这个方法你会得到大概十几二十条iptables规则,加上这些规则基本不会受到污染,再配合dnsmasq把一些域名受到严重污染的域名通过8.8.8.8或者其他dns来解析,最重要的一点,不影响一些网站的本地cdn加速而且不受污染。 |
26
szpunk 2014-07-05 12:43:05 +08:00
@JoeyChan AntiDNSPoisoning 的方法,这几十条 iptables 规则会严重影响正常 DNS的查询速度,有点得不偿失。
|
27
leavic OP @szpunk 事实上,FILTER表的过滤效率是高得惊人的,你根本不会察觉到有什么速度上的问题,更谈不上什么严重影响DNS查询速度.
|
28
shierji 2014-07-05 18:42:30 +08:00
等我写个文章吧。这种其实很合适用的网站比较少的。。比如我这样的人。。。很智能的说。也。。。满简单。。。
|
30
cj1324 2014-07-08 10:38:54 +08:00 1
@jmhglvip 可以接受没有LuCI? (web界面管理) 4M 真心有点挤,我可以代为编译,列出你必须的特性。
声明刷机有风险:最好需要会一些uboot修砖。 |
31
jmhglvip 2014-07-08 10:57:05 +08:00
@cj1324 谢谢你的答复!可以接受无luci,平时在外地,上网中继一下,都是手机上网,只需要手机能爬墙就行,ss是自己买的一年账号。然后能否加上3G功能,在户外用3g卡。我的uboot是刷不死的。http://www.right.com.cn/forum/thread-136444-1-1.html720n专用v3板的。
|
33
jmhglvip 2014-07-08 11:02:08 +08:00
@cj1324 要是大哥能编译个47xx的就好了,家里的主路由是asus rtn16的,16mflash,回到家也可以无忧爬墙哦!
|
34
cj1324 2014-07-08 11:34:45 +08:00
@jmhglvip BCM47xx芯片 我并没有设备。我可以带为编译。但是没办法测试固件。所以风险更大。。
我的主路由是 NETGEAR WNDR3700v4 也是ar的芯片。 |
35
jmhglvip 2014-07-08 11:45:35 +08:00
@cj1324 大大先编译吧,n16也是刷不死的,我来测试,没问题!其实我上网的要求很简单,无缝爬墙看youtube就行。偶尔twitter,facebook.家里人看看优酷,电视盒子。再次感谢!
|
39
shierji 2014-07-12 21:34:27 +08:00
我发现。由于有客户端异步DNS等问题。路由器上解析得到存入ipset的地址不一定跟客户端上得到的地址一样。造成的结果就是对某些拥有多个IP的网站来说,首次开启的时候很有可能因为对应的IP没有被路由到服务器而无法访问。我还是用以前的方式好了。
|
40
leavic OP @shierji 这是你Dnamasq配置方式的问题,DNS解析应该完全交给路由器进行,客户端不应该指定任何DNS,设置成自动获取就行.所有的解析结果由路由返回,这也是Dnsmasq中DHCP通告DNS部分的默认设定.
|
41
ShadyK 2014-08-02 13:08:40 +08:00
|
43
jmhglvip 2014-08-03 16:10:01 +08:00
@ShadyK 找到了梅林版用的chinadns:https://www.v2ex.com/t/124550#reply76
|
44
cj1324 2014-08-04 11:14:01 +08:00
@ShadyK 如果你只是需要dnsmasq ipset opkg包 给我你的机器型号或CPU型号。 另外没实际设备测试过,不保证可用。
|
45
ShadyK 2014-08-04 12:58:26 +08:00
@cj1324 我推上问了下merlin作者能不能集成dnsmasq ipset,他说不行,too much denpendcies,它的fw还不行,你看是否能帮我编译一个entware下可用的
ipset-dns http://git.zx2c4.com/ipset-dns/about/ asus ac66u,bcm4706的U 麻烦了,非常感谢 |
47
ShadyK 2014-08-04 19:34:47 +08:00
@cj1324 asuswrt和tomato、dd现在都在用一种叫做entware的套件,比optware里的套件更新快,维护勤,你有兴趣可以看下
https://github.com/Entware/entware |
48
newbie666 2014-08-29 07:45:19 +08:00 1
我有一个新的想法:
先设置好策略路由,对打上标记的数据包走vpn。 再写一个linux的内核模块,然后监听所有到80端口的syn请求,凡是1秒内没有收到syn-ack数据包的都认为是被防火墙block 的连接,针对这个连接,伪造一个syn-ack给客户端,让浏览器以为连接到服务器成功。再伪造一个syn给web服务器,给这个syn包打上标记,让他走vpn出去。 这样就搭了个桥,双方都会认为连接成功了,再把以后后续的数据包都打上标记,全部都走vpn出去。 最后再把这个ip加入列表内,以后凡是这个IP都走vpn。 感觉这个办法应该可行,不再需要考虑什么域名,只要是被block的站全部都可以自动连通。 但缺点第一次连接可能会是速度较慢,因为需要等1秒后再启用这个机制。 |
50
chijiao 2014-09-01 23:22:48 +08:00
感觉还是太复杂了,本人用的白名单,china top 500 的域名做一个白名单,凡是不是白名单内的域名,用第三方的dns服务器解析, top500 内的,用路由器获取的dns。 这样可以保证国内网站的cdn能工作。 然后在iptables 开启geo ip, 对于国外的IP,统统走代理。 这样基本上不用后期什么维护了。
|
51
jielee 2014-09-02 22:02:00 +08:00
我自己编译的固件ipset怎么运行不了?
root@OpenWrt:~# ipset list ipset v6.20.1: Cannot open session to kernel. |
54
buddha 2014-12-02 06:35:29 +08:00
对编译一窍不通, 有没有高手能帮忙给一个能在R6300v2上的DDWRT下能用的包含ipset功能的dnsmasq ?
|
55
xiaofami 2014-12-03 13:56:35 +08:00
@lj0014 你好,我参照您的方法,在路由器上的 /etc/rc.local中,添加
ipset -N Shadowsocks iphash iptables -t nat -A PREROUTING -p tcp -m set --match-set Shadowsocks dst -j REDIRECT --to-port 1081 结合dnsmasq的ipset使用,效果很好。但是遇到一个问题:Shadowsocks服务器关闭后,本地也出现了问题。具体表现在除了dnsmasq.conf中自行解析的域名,其他域名均nslookup失败,打不开网页。我在删除 ipset -N Shadowsocks iphash iptables -t nat -A PREROUTING -p tcp -m set --match-set Shadowsocks dst -j REDIRECT --to-port 1081 后重启路由器,问题解决。但是我不清楚问题出在哪里,有更好的解决办法吗? |
56
iMax 2014-12-21 21:58:24 +08:00
@leavic 有没有最新的刷入即用的固件啊?我的是WNDR3800,对于菜鸟来说折腾起来很费时间,想偷个懒直接用上就好。我没VPS,但是SS和VPN账号都有。谢谢先
|
57
msdindin 2015-01-15 12:18:19 +08:00
都是大神啊,我就想在AC68U上实现SS,但是俺是一个小白,有没有什么适合我的教程呢?
|
58
xmvagrant 2015-02-04 17:44:40 +08:00
@cj1324
@leavic 我的路由器是Buffalo WZR-HP-G300NH2,刷的是Attitude Adjustment 12.09 版本的OpenWrt,Kernel Version是3.3.8,安装dnsmasq-full时使用 http://downloads.openwrt.org/snapshots/trunk/ar71xx/generic/packages/base/dnsmasq-full_2.72-4_ar71xx.ipk 这里的版本,装好后运行/etc/init.d/dnsmasq start无报错,但是dnsmasq进程未能启动,试了 https://github.com/aa65535/openwrt-dnsmasq 这里预编译好的版本也一样情况,是不是我的OpenWrt版本太老了dnsmasq-full不支持,请大神帮我分析下是什么情况,谢谢! |
59
pwcpp 2015-03-08 14:40:42 +08:00
AA 12.09官方源里没有dnsmasq-full这个软件包,只有dnsmasq 2.66,请问该怎么办?
|