前言
将goagent安装进路由器,想要实现的效果是,任何连接路由器的客户端,只需要填入路由器上的PAC文件的地址,即可实现透明代理。
总得来说,步骤全部集中在python环境的安装上,因为goagent本身就是一个ini配置文件和py源码而已。其次是一些准备工作,例如安装samba方便上传等等。
安装python环境
环境安装可以参考goagent官方项目主页上关于OpenWrt的wiki页面。GoAgent_OpenWRT
正常情况下需要三个包,python、pyopenssl、python-openssl。其中python包较大,多数路由器的rom空间都不符合标准,所以需要用usb来扩展空间。如果路由器没有usb接口,那么就比较遗憾了。
三个包安装完成后,表示我们的路由器已经具备了python的执行环境。继续下一步,上传源码。上传源码采用的方式是samba共享整个根目录。目的是实现那种硬盘分区间复制粘贴传送文件的效果。
安装samba
安装luci-app-samba包,并按照下图设置。
还没完事,此时samba还没有运行。我们可以在luci的启动项页面将samba设置为启动项并重启。也可以通过shell指令”/etc/init.d/samba enable”将其设置为启动项。
接下来在电脑上的网上邻居就可以看到共享的硬盘分区了,但是继续操作就会发现只有读取和运行权限。因为我们需要上传goagent源码,所以要建立一个文件夹并对其授予权限。”mkdir /goagent””chmod -R 777 /goagent”。
最后,复制goagent的proxy.ini、proxy.py、proxy.pac、CA.crt四个文件到目录即可。“python /goagent/proxy.py”运行goagent。可见下图。
在luci的启动项页面中可以设置启动脚本,脚本中加入”python /goagent/proxy.py >/dev/null 2>&1 &”可以设置开机启动goagent。
goagent崩溃及其解决方法
通常情况下,到上一小节为止,是goagent的标准安装方式。但是由于官方libopenssl对于安全线程的支持问题,某些路由器会出现“Assertion `md_c[1] == md_count[1]’ failed”这样的错误提示并崩溃。
解决方式有两个,第一个是安装libopenssl_1.0.1c-1_ar71xx.ipk,修复bug。另一个是安装gevent,“Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效”,这是百度出来的定义…。论坛上的结论是gevent这个框架能够提升goagent的执行效率,降低系统占用。
经过实测,gevent下goagent的负载确实要低了些。OpenWrt的官方源中没有greenlet和gevent这两个包,需要自己上网搜索。我用的是”python-greenlet_0.4.0-1_ar71xx.ipk”和”gevent_1.0rc2-1_ar71xx.ipk”。
安装完后运行goagent,可在goagent version一行中看到gevent及其版本号,这表明gevent安装成功。见下图。
经过测试,goagent十分稳定。特别设定为http模式时,youtube的缓冲速度飞快,可以招架720P视频了。
另外我们可以建立软链接,将pac文件链接到”/www”目录下,”ln -s /goagent/proxy.pac /www”,这样,只要在浏览器中指定PAC文件地址为”http://路由器地址/proxy.pac”即可实现透明代理。为何要建立软链接而不是直接复制?因为goagent会自动更新PAC文件,软链接会把对源文件的更改映射到任意链接处。
ios设备设置示例
在“http代理”处选择“自动”,输入”http://路由器地址/proxy.pac”即可。(我路由的地址为192.168.44.13)
另外,在“goagent 3.1.4 正式版”中还存在一些bug,例如ios设备上youtube,会默认加载flash播放器,并无法指定html5播放器。这个问题已经在官方项目主页的issue上被人反映了几次,等待官方解决。
可能占用内存及cpu比较大吧,感觉比较影响正常上网速度
前段时间购入了极路由,用来翻墙也是爽歪歪呀!!!
非常个性的博文站哦!