简化穿墙的HTTP代理服务器COW
时间:2016-11-02 来源:github 作者:cyfdecyf 条评论
支持MAC 能自动检测被墙网站 简化穿墙的 HTTP 代理服务器COW (Climb Over the Wall) proxy 介绍
功能
- 作为 HTTP 代理,可提供给移动设备使用;若部署在国内服务器上,可作为 APN 代理
- 支持 HTTP, SOCKS5, shadowsocks 和 cow 自身作为二级代理
- 可使用多个二级代理,支持简单的负载均衡
- 自动检测网站是否被墙,仅对被墙网站使用二级代理
- 自动生成包含直连网站的 PAC,访问这些网站时可绕过 COW
- 内置常见可直连网站,如国内社交、视频、银行、电商等网站(可手工添加)
快速开始
-
OS X, Linux (x86, ARM): 执行以下命令(也可用于更新)
curl -L git.io/cow | bash- 环境变量
COW_INSTALLDIR可以指定安装的路径,若该环境变量不是目录则询问用户 - 所有 binary 在 OS X 上编译获得,若 ARM 版本可能无法工作,请下载 Go ARM 后从源码安装
- 环境变量
- Windows: 从 release 页面下载
- 熟悉 Go 的用户可用
go get github.com/cyfdecyf/cow从源码安装
~/.cow/rc (Linux) 或 rc.txt (Windows),简单的配置例子如下:#开头的行是注释,会被忽略 # 本地 HTTP 代理地址 # 配置 HTTP 和 HTTPS 代理时请填入该地址 # 若配置代理时有对所有协议使用该代理的选项,且你不清楚此选项的含义,请勾选 # 或者在自动代理配置中填入 http://127.0.0.1:7777/pac listen = http://127.0.0.1:7777 # SOCKS5 二级代理 proxy = socks5://127.0.0.1:1080 # HTTP 二级代理 proxy = http://127.0.0.1:8080 proxy = http://user:password@127.0.0.1:8080 # shadowsocks 二级代理 proxy = ss://aes-128-cfb:password@1.2.3.4:8388 # cow 二级代理 proxy = cow://aes-128-cfb:password@1.2.3.4:8388
listen = cow://aes-128-cfb:password@0.0.0.0:8388
详细使用说明
- Unix 系统在命令行上执行
cow &(若 COW 不在PATH所在目录,请执行./cow &)- Linux 启动脚本,如何使用请参考注释(Debian 测试通过,其他 Linux 发行版应该也可使用)
- Windows
- 双击
cow-taskbar.exe,隐藏到托盘执行 - 双击
cow-hide.exe,隐藏为后台程序执行 - 以上两者都会启动
cow.exe
- 双击
http://<listen address>/pac,也可将浏览器的 HTTP/HTTPS 代理设置为 listen address 使所有网站都通过 COW 访问。cow -h 来获取更多信息。手动指定被墙和直连网站
blocked 和 direct 可指定被墙和直连网站(direct 中的 host 会添加到 PAC)。 Windows 下文件名为 blocked.txt 和 direct.txt。- 每行一个域名或者主机名(COW 会先检查主机名是否在列表中,再检查域名)
- 二级域名如
google.com相当于*.google.com com.hk,edu.cn等二级域名下的三级域名,作为二级域名处理。如google.com.hk相当于*.google.com.hk- 其他三级及以上域名/主机名做精确匹配,例如
plus.google.com
- 二级域名如
技术细节
访问网站记录
stat json 文件中记录经常访问网站被墙和直连访问的次数。- 对未知网站,先尝试直接连接,失败后使用二级代理重试请求,2 分钟后再尝试直接
- 内置常见被墙网站,减少检测被墙所需时间(可手工添加)
- 直连访问成功一定次数后相应的 host 会添加到 PAC
- host 被墙一定次数后会直接用二级代理访问
- 为避免误判,会以一定概率再次尝试直连访问
- host 若一段时间没有访问会自动被删除(避免
stat文件无限增长) - 内置网站列表和用户指定的网站不会出现在统计文件中
COW 如何检测被墙网站
- 服务器连接被重置 (connection reset)
- 创建连接超时
- 服务器读操作超时
限制
- 不提供 cache
- 不支持 HTTP pipeline(Chrome, Firefox 默认都没开启 pipeline,支持这个功能容易增加问题而好处并不明显)
