搜索
查看: 7532|回复: 4

COW:简化穿墙的 HTTP 代理

[复制链接]
  • TA的每日心情
    奋斗
    2017-6-9 15:29
  • 签到天数: 74 天

    [LV.6]常住居民II

    454

    主题

    1812

    帖子

    2万

    积分

    管理员

    Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28Rank: 28

    积分
    23488
    发表于 2014-1-7 13:03 | 显示全部楼层 |阅读模式
    功能

    COW 的设计目标是自动化,理想情况下用户无需关心哪些网站无法访问,可直连网站也不会因为使用二级代理而降低访问速度。

    • 作为 HTTP 代理,可提供给移动设备使用;若部署在国内服务器上,可作为 APN 代理
    • 支持 HTTP, SOCKS5, shadowsocks 和 cow 自身作为二级代理
      • 可使用多个二级代理,支持简单的负载均衡
    • 自动检测网站是否被墙,仅对被墙网站使用二级代理
    • 自动生成包含直连网站的 PAC,访问这些网站时可绕过 COW


    快速开始

    安装

    • OS X, Linux (x86, ARM): 执行以下命令(也可用于更新)
      curl -L git.io/cow | bash
    • Windows: 点此下载
    • 熟悉 Go 的用户可用 go get github.com/cyfdecyf/cow 从源码安装

    编辑 ~/.cow/rc (Linux) 或 rc.txt (Windows),简单的配置例子如下:

    #开头的行是注释,会被忽略# 本地 HTTP 代理地址# 配置 HTTP 和 HTTPS 代理时请填入该地址# 或者在自动代理配置中填入 http://127.0.0.1:7777/paclisten = http://127.0.0.1:7777# SOCKS5 二级代理proxy = socks5://127.0.0.1:1080# HTTP 二级代理proxy = http://127.0.0.1:8080proxy = 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

    使用 cow 协议的二级代理需要在国外服务器上安装 COW,并使用如下配置:

    listen = cow://aes-128-cfb:password@0.0.0.0:8388

    完成配置后启动 COW 并配置好代理即可使用。



    详细使用说明

    配置文件在 Unix 系统上为 ~/.cow/rc,Windows 上为 COW 所在目录的 rc.txt 文件。 样例配置 包含了所有选项以及详细的说明,建议下载然后修改。

    启动 COW:

    • Unix 系统在命令行上执行 cow &
      • Linux 启动脚本,如何使用请参考注释(Debian 测试通过,其他 Linux 发行版应该也可使用)
    • Windows
      • 双击 cow-taskbar.exe,隐藏到托盘执行
      • 双击 cow-hide.exe,隐藏为后台程序执行
      • 以上两者都会启动 cow.exe

    PAC url 为 http://<listen address>/pac,也可将浏览器的 HTTP/HTTPS 代理设置为 listen address 使所有网站都通过 COW 访问。

    使用 PAC 可获得更好的性能,但若 PAC 中某网站从直连变成被封,浏览器会依然尝试直连。遇到这种情况可以暂时不使用 PAC 而总是走 HTTP 代理,让 COW 学习到新的被封网站。

    命令行选项可以覆盖部分配置文件中的选项、打开 debug/request/reply 日志,执行 cow -h 来获取更多信息。





    手动指定被墙和直连网站

    一般情况下无需手工指定被墙和直连网站,该功能只是是为了处理特殊情况和性能优化。

    ~/.cow/blocked 和 ~/.cow/direct 可指定被墙和直连网站(direct 中的 host 会添加到 PAC):

    • 每行一个域名或者主机名(COW 会先检查主机名是否在列表中,再检查域名)
      • 二级域名如 google.com 相当于 *.google.com
      • com.hk, edu.cn 等二级域名下的三级域名,作为二级域名处理。如 google.com.hk 相当于*.google.com.hk
      • 其他三级及以上域名/主机名做精确匹配,例如 plus.google.com

    注意:对私有 IPv4 地址及 simple host name,COW 总是直接连接,生成的 PAC 也让浏览器直接访问。(因此访问 localhost 和局域网内机器会绕过 COW。)



    技术细节
    访问网站记录

    COW 在 ~/.cow/stat json 文件中记录经常访问网站被墙和直连访问的次数。

    • 对未知网站,先尝试直接连接,失败后使用二级代理重试请求,2 分钟后再尝试直接
    • 直连访问成功一定次数后相应的 host 会添加到 PAC
    • host 被墙一定次数后会直接用二级代理访问
      • 为避免误判,会以一定概率再次尝试直连访问
    • host 若一段时间没有访问会自动被删除(避免 stat 文件无限增长)
    • 内置网站列表和用户指定的网站不会出现在统计文件中


    COW 如何检测被墙网站

    COW 将以下错误认为是墙在作怪:

    • 服务器连接被重置 (connection reset)
    • 创建连接超时
    • 服务器读操作超时

    无论是普通的 HTTP GET 等请求还是 CONNECT 请求,失败后 COW 都会自动重试请求。(如果已经有内容发送回 client 则不会重试而是直接断开连接。)

    用连接被重置来判断被墙通常来说比较可靠,超时则不可靠。COW 每隔半分钟会尝试估算合适的超时间隔,避免在网络连接差的情况下把直连网站由于超时也当成被墙。 COW 默认配置下检测到被墙后,过两分钟再次尝试直连也是为了避免误判。

    如果超时自动重试给你造成了问题,请参考样例配置高级选项中的 readTimeout, dialTimeout 选项。



    限制
    • 不提供 cache
    • 不支持 HTTP pipeline(Chrome, Firefox 默认都没开启 pipeline,支持这个功能容易增加问题而好处并不明显)




    致谢

    贡献代码:

    • @tevino: http parent proxy basic authentication
    • @xupefei: 提供 cow-hide.exe 以在 windows 上在后台执行 cow.exe
    • @sunteya: 改进启动和安装脚本

    Bug reporter:

    • GitHub users: glacjay, trawor, Blaskyy, lucifer9, zellux, xream, hieixu, fantasticfears, perrywky, JayXon, graminc, WingGao, polong, dallascao
    • Twitter users: 特别感谢 @shao222 多次帮助测试新版并报告了不少 bug, @xixitalk

    @glacjay 对 0.3 版本的 COW 提出了让它更加自动化的建议,使我重新考虑 COW 的设计目标并且改进成 0.5 版本之后的工作方式。


    https://github.com/cyfdecyf/cow
    推荐DO注册:
    https://www.digitalocean.com/?refcode=de66f5a659fc
    优惠码SHIPITFAST。(免费获得10刀!)

    (目前本论坛就在这Digitalcean里,(*^__^*) 嘻嘻……!
    104302

    该用户从未签到

    2

    主题

    26

    帖子

    120

    积分

    注册会员

    Rank: 2

    积分
    120
    发表于 2014-4-28 21:48 | 显示全部楼层
    FQ花样真多~~mark一下,以后慢慢学,现在还搞不定SS。。。

    该用户从未签到

    2

    主题

    26

    帖子

    303

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    303
    发表于 2014-8-6 22:37 | 显示全部楼层
    老实说还是看不太懂   能再简单的讲一下  如何把自己的ss填进去么

    该用户从未签到

    8

    主题

    70

    帖子

    296

    积分

    中级会员

    Rank: 3Rank: 3

    积分
    296
    发表于 2014-12-10 13:25 | 显示全部楼层
    楼主真是技术流
  • TA的每日心情
    开心
    2015-8-4 23:52
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    9

    帖子

    117

    积分

    注册会员

    Rank: 2

    积分
    117
    发表于 2015-8-4 23:52 | 显示全部楼层
    mark一下,请教楼主Meow和COW那个比较好用?
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    手机版|Archiver|GoAgent论坛  

    GMT+8, 2019-7-19 12:00 , Processed in 0.087134 second(s), 30 queries .

    快速回复 返回顶部 返回列表