在路由器上安装GoAgent后,自动转发特定网站到代理出口,实现客户端零配置(以访问YouTube为例) & Tomato 路由器部署 GoAgent

2012年5月28日 | 分类: 翻墙相关 | 标签: , , ,
关于自动指定出口有完美方案了!在路由器上跑GoAgent,路由器的防火墙规则能自动把U2B的HTTP请求往GoAgent上劫持转发,这样相当于是和“指定出口”功能差不多功能的智能路由了(不过不是VPN路由,是HTTP代理而已)
以 YouTube 为例:
1. 先DNSMasQ防止域名解析的IP变换或被污染:
address=/c.youtube.com/173.194.5.118 》》这个IP随便写一个永远不会访问的IP(可以用justping来解析正确的IP)
address=/youtube.com/ytimg.com/203.208.46.178 》》这个用Host访问YouTube,不需要代理就能访问(这个不属于本文的内容,不明白请忽略)
2. 然后添加防火墙脚本:
iptables -t nat -I PREROUTING  -i br0 -p tcp -d 173.194.5.118 –dport 80 -j REDIRECT –to-ports 8087
3. 这样配置后,客户端不用做任何配置,访问YouTube的时候,网页内容自动用过host就能直接访问,视频内容被解析到173.194.5.118这个IP地址,然后这个地址的指定端口80被iptables自动劫持到路由器的8087端口,即Go4gent代理。
已测试PC上浏览器和Android上浏览器均可不用做任何设置即可访问并播放YouTube。哈哈
Androide上YouTube客户端似乎不行,可能走的不是80端口HTTP方式。想来iphone客户端和网页版都不行,可能都是没走HTTP方式而是使用专用控件的方式走其他渠道,有待继续分析(只要是HTTP方式,就可以搞定,有可能是其它服务器)。
4. 类似的方法可以用来自动转发其它的网站,只要在Dnsmasq上增加域名即可,太完美了,如:
address=/c.youtube.com/bbc.co.uk/111.111.111.111
(如果还要访问改域名的其它网站,请不要添加DNSMasq的偷懒的方法,而是增加一个防火墙脚本:ptables -t nat -I PREROUTING  -i br0 -p tcp -d 111.111.111.111 –dport 80 -j REDIRECT –to-ports 8087,IP地址换成正确的IP地址,如果IP被污染,则自己用DNSMasq或者8.8.8.8解析一下)
我这个“指定出口”做的精妙吧,真正实现了客户端零配置,哈哈……
上文中所称路由器为 Tomato DualWAN,但对于有iptables命令的 Linux类路由器包括DDWRT/OpenWRT等均有参考意义。
总结一下,终于找到一个比较好的方案了
按优先级如下:
1. 能直接访问的网站——如国内网站;
2. 能通过修改host直接访问的,如youtube、facebook、google(twitter之前行,现在似乎不行了,转到下面这种方法);
3. 不能直接访问的HTTP网站,如bbc中文网,通过DNSMasQ批量劫持转到GoAgent。
4. 最难的是HTTPS网站,这个不能劫持,只能手动设置代理来访问,如访问很慢的amazon.com登录(这里我们假设根本不能访问吧),这种网站 HTTPS较少,所需证书不多,自己整理一下这些证书放到路由器的/opt/etc/goagent/certs下,HTTPS的问题也解决了。
========
Tomato 路由器部署 GoAgent
一、发帖前的说明:
此贴是根据坛里的两篇帖子:http://bbs.dualwan.cn/viewthread.php?tid=219531&from=favorites
http://bbs.dualwan.cn/viewthread.php?tid=229261&from=favorites
以及百度goagent教程详细版:(根据教程做到第二步就行了)http://hi.baidu.com/habbit99/blog/item/9df5a4cc1cd8e40c01e92822.html
后整理出来的,在此感谢:admin和ondh二、准备工作:

1.带usb的刷了ttdw的路由一台(我的是wl-500w)
2.u盘1个,我用的是tf卡+usb适配器
三、基本设置及分区操作:
1.进入路由器管理界面后,点击USB应用->USB设置,然后按照下图来设置,保存后插入U盘

然后刷新USB设置页面,正常情况下应该会在“已连接设备”里显示U盘

2.对U盘进行分区:

telnet或ssh到路由,登陆成功后,输入:
fdisk /dev/sda
然后,输入:
p
会有如下显示:

如果有分区表请按下步骤清空
3.清空分区表:
按d然后输入分区号(sda后面的数字)回车,删除之后按p查看分区,一直到分区表是空为止
4.创建分区表:(这里我们可以创建两个,1个作主分区,1个作swap分区)
5.对U盘进行格式化:
mkfs.ext3 /dev/sda1
将1号分区格式化为ext3文件系统,如果提示/dev/sda1 is mounted !表示分区已经被挂载,要先卸载然后再格式化:输入umount /dev/sda1然后再回车就卸载了
图中是给分区设了卷标,设不设无所谓,我是没设
6.格式化swap分区:
mkswap /dev/sda2
7.重启路由,让u盘sda1分区自动挂载到/tmp/mnt/sda1
8.把u盘sda1分区挂载到路由/opt目录:
telnet或ssh到路由后输入:
mount -O bind /tmp/mnt/sda1 /opt/
9.激活swap分区:
swapon /dev/sda2
四.初始化optware:
1.进入opt目录:
cd /opt
2.下载optware:
wget http://bbs.dualwan.cn/downloads/optware/optware-install.sh -O – | tr -d ‘\r’ >  optware-install.sh
3.安装optware
sh optware-install.sh
4.更新一下optware和安装busybox:
/opt/bin/ipkg update
/opt/bin/ipkg install busybox
5.安装screen、python26和OpenSSL
/opt/bin/ipkg install screen
/opt/bin/ipkg install python26
/opt/bin/ipkg install openssl
/opt/bin/ipkg install py26-openssl
ps:python26安装比较慢,大家耐心等待下
2.上传GoAgent客户端到路由器(我用的是WinSCP)
先创建goagent文件夹
mkdir goagent /opc/etc/
然后打开GoAgent目录下的local文件夹,把CA.crt、CA.key、proxy.py、proxy.ini以及certs整个文件夹上传到/opt/etc/goagent/目录下
打开proxy.ini,修改[listen]里ip = 0.0.0.0,[gae]里的appid改成自己的appid
3.运行goagent测试一下:
python2.6 /opt/etc/goagent/proxy.py
如果见到以下信息,就运行成功了
——————————————————
GoAgent Version : 1.8.4 (python/2.6.7 pyopenssl/0.10)
Listen Address  : 0.0.0.0:8087
GAE Mode        : http
GAE Area        : cn
GAE APPID       : xxx
——————————————————
六、后台挂载u盘,后台运行goagent
由于goagent在ssh中或telnet中前台运行,关闭命令窗口后就停止运行了,所以我们要让他后台运行
在opt根目录新建.autorun文件
vi /opt/.autorun
按i输入以下命令:
#!/bin/sh
mount -o bind tmp/mnt/sda1 /opt
swapon /dev/sda2
screen -d -m python2.6 /opt/etc/goagent/proxy.py
esc键结束输入并shift+冒号键,输入:
wq
后回车!
以上过程完成之后,路由器部分就配置好了。
电脑上的话,如果使用FireFox,可以安装AutoProxy扩展,自己配置好代理地址为“路由器IP:8087”,然后就可以自动爬长城了。

原文:  http://bbs.dualwan.cn/viewthread.php?tid=249731

  1. qwt
    2013年7月2日22:55

    你好。我一直是你的博客的观众,这里有一个问题冒昧的请教一下。我现在的翻墙方案是在一台思科的610N路由器上刷的TOMATO系统,然后在这个系统下部署了GOOGLE Goganet。在这个路由器局域网里面的设备只要把代理地址设置为路由器的192.168.1.2:8087就可以方便的科学上网了。但是我还有一个想法就是任何一台苹果手机,或者笔记本 台式机 接上我的路由器的时候不需要设置代理地址就可以实现无障碍的科学上网。请问这个怎么操作???

    • iGFW
      2014年7月2日09:47

      可以刷刷Tomato bwq518 增强集成版,开启ToW功能里的shadowsocks、SSH或Goganet

  2. 排序
    2012年5月30日15:17

    复杂呀