月下博客

一个由Go语言编写的轻量化 HTTP Tunnel 代理工具 —— GoFlyway

本文最后更新于 2018年11月3日 22:04 可能会因为没有更新而失效。如已失效或需要修正,请留言!

前几天突然看到很多人在讨论这个HTTP代理工具,一开始我以为是单纯的HTTP代理,在 Github 了解后,看起来是针对header关键信息加密(如域名)等等简单的加密方式来骗过GFW的明文嗅探,同时因为HTTP的轻量化也保证了高效的传输数据,虽然现在这个项目才刚刚开始,但是在GFW未注意到之前(根据特征封锁),效果应该不错。

Github 项目地址:https://github.com/coyove/goflyway

服务端一键脚本:『原创』Go语言轻量化 HTTP Tunnel 代理工具 —— GoFlyway 一键安装管理脚本

客户端辅助工具:『原创』更方便的Windows系统 Goflyway 客户端 —— Goflyway Tools

与单纯的HTTP代理不同的是,因为这个工具会对一些内容加密和交换密匙,所以需要特定的客户端。


其他 Goflyway 教程请看:https://doub.io/tag/goflyway/

服务端配置

这里以 Linux系统为例。

注意:GoFlyway 的客户端和服务端都是一个文件,也就是本文章的服务端配置和客户端配置都是可以互相转换的,只是取决于运行GoFlyway的参数有没有 -up=xxx:xxx ,如果有就是客户端模式,如果没有就是服务端模式。

下载安装

点击展开 查看更多

首先建立并进入文件夹(假设你当前目录是 /root ,那么 Goflyway的目录就是 /root/goflyway ):

mkdir goflyway && cd goflyway

然后获取最新的版本号:

goflyway_ver=$(wget --no-check-certificate -qO- -t1 -T3 https://api.github.com/repos/coyove/goflyway/releases| grep "tag_name"| head -n 1| awk -F ":" '{print $2}'| sed 's//"//g;s/,//g;s/ //g') && echo ${goflyway_ver}

执行完后会显示获取的最新版本号,比如 1.3.0a 这样的格式,如果返回是空或者其他错误的内容,那么就代表获取失败。如果获取失败,请去 Github 获取最新的版本号,例如 1.3.0a ,然后执行 goflyway_ver=1.3.0a (自己替换版本号)即可继续下面的步骤。

if [[ $(uname -m) == "x86_64" ]]; then bit='amd64';else bit='386';fi && [[ ! -z ${bit} ]] && wget -N --no-check-certificate "https://github.com/coyove/goflyway/releases/download/${goflyway_ver}/goflyway_linux_${bit}.tar.gz"
# 自动判断系统位数并下载

tar -xzf "goflyway_linux_${bit}.tar.gz" && rm -rf "goflyway_linux_${bit}.tar.gz"
# 解压压缩包并删除无用的压缩包

chmod +x goflyway
# 赋予软件执行权限

服务端使用方法

点击展开 查看更多

启动

注意:每次启动前,都需要进入GoFlyway的目录,以上面的 /root/goflyway 为例,那么就是 cd  /root/goflyway

假设密码为:doubi233,监听端口为:80,日志输出位置为:/tmp/goflyway.log,那么执行:

nohup ./goflyway -k="doubi233" -l=":80" > /tmp/goflyway.log 2>&1 &

如果没有报错说明启动成功,如果不确定可以查看日志。

停止

kill -9 $(ps -ef|grep "goflyway"|grep -v grep|awk '{print $2}')

查看日志

# 实时查看日志
tail -f /tmp/goflyway.log
# 查看完整日志
cat /tmp/goflyway.log

客户端配置

这里以 Windows系统为例。

客户端辅助工具:『原创』更方便的Windows系统 Goflyway 客户端 —— Goflyway Tools

注意:GoFlyway 的客户端和服务端都是一个文件,也就是本文章的服务端配置和客户端配置都是可以互相转换的,只是取决于运行GoFlyway的参数有没有 -up=xxx:xxx ,如果有就是客户端模式,如果没有就是服务端模式。

下载安装

点击展开 查看更多

首先去 Github 下载客户端。

Github中 Windows 32位下载:goflyway_windows_386.zip

Github中 Windows 64位下载:goflyway_windows_amd64.zip

下载并解压后,我们会得到两个文件:goflyway.exe(主程序)、chinalist.txt(国内常见域名,用于跳过国内网站)

注意:这时候并不能直接运行 goflyway.exe 程序,因为这样没有指定任何参数不说,还会识别为服务端模式。

客户端使用方法

制作启动脚本

点击展开 查看更多

假设你的 goflyway.exe 解压后位于 D:/goflyway/goflyway.exe ,那么在 D:/goflyway 目录下我们新建一个文本文件,写入以下内容:

goflyway.exe -up="1.1.1.1:80" -k="doubi233" -l=":8100"
pause>nul
# 将上面两行内容写入到新建文本文件中
# 注意:-k="doubi233"和-up="1.1.1.1:8100" 是你服务端的配置,自己替换,不要傻傻的跟着教程写
# -l=":8100" 指的是客户端监听本地端口 8100,默认就行
# 第二行代码的作用是,当你某个地方/代码配置错误,CMD批处理不会运行后直接关闭,免得看不到报错信息

然后重命名新建的文本文件为:run.bat,并运行BAT脚本(或者以管理员身份运行),提示内容大概如下:

# 下面是运行启动脚本后的内容示例(注意下面的不需要你写入):
D:/goflyway/>goflyway.exe -k="doubi233" -up="1.1.1.1:80" -l=":8100"
[  0914 10:03:59.572] listening on :8100, upstream is 1.1.1.1:80

使用步骤

注意:下面以客户端本地监听端口 8100 为例,如果你设置了其他的,那么自己替换。

要使流量走GoFlyway,只需要在需要的软件中设置 HTTP代理 127.0.0.1 8100即可。

比如,如果浏览器要走GoFlyway代理,那么打开系统代理设置(或者浏览器内相关代理设置),设置代理服务器 地址:127.0.0.1端口:8100,并一路确定即可。


如果你是Chrome浏览器并且使用了 SwitchyOmega (点击查看新手使用教程代理管理扩展,那么进入扩展选项页面:

新建情景模式… -> 情景模式名称:GoFlyway -> 情景模式类型:代理服务器 -> 然后设置 代理协议:HTTP代理服务器:127.0.0.1代理端口:8100,然后点击左下角的 应用选项 按钮即可。

接着打开谷歌试试:https://www.google.com

客户端Web控制面板

客户端运行后可以通过访问 http://127.0.0.1:8100 8100是客户端本地监听端口,就是客户端参数 -l=”:8100″,自己对应的改)来查看和设置一些GoFlyway选项。

右侧的几个选项分别是:

  1. 更改密码: doubi233(doubi233 文字可以点击修改的)
  2. 代理所有流量(包括国内网站)
  3. 在RNG中使用高分辨率计数器(不懂)
  4. 使用 China-list 识别中文网站(就是 chinalist.txt 文件)
  5. 禁用 shoco 压缩算法(不懂)

设置选项下方的两个按钮分别是:更新设置清除DNS缓存

注意:在修改完上面的几个设置选项后(包括密码),都需要点击一下 Update Settings (更新设置)按钮才会生效!

[/toggle]

更多使用姿势请看Github WIKI:https://github.com/coyove/goflyway/wiki/使用教程/

速度对比

我在一台美国小鸡上面 同时安装了 ShadowsocksR 和 GoFlyway ,测试速度如下。

注意:以下测速仅供参考,一些地区可能HTTP代理会限制严格,情况不一而论。

ShadowsocksR

加密方式:aes-128-ctr、协议插件:auth_aes128_md5、混淆插件:tls1.2_ticket_auth

YouTube速度测试(单线程):

注意:因为我这边联通对海外的服务器单线程限速 8Mbps+-,所以YouTube这类单线程都因为很容易跑到QOS上限而看不到什么大概区别。

IDM全速下载(多线程):

速度大概在 5MB/s ~ 7MB/s 之间波动,有时候也会跑到 8、9MB/s,不过基本平均速度在 6+MB/s

GoFlyway

YouTube速度测试(单线程):

注意:因为我这边联通对海外的服务器单线程限速 8Mbps+-,所以YouTube这类单线程都因为很容易跑到QOS上限而看不到什么大概区别。

IDM全速下载(多线程):

测试速度很快就突破到 9MB/s了,多次测试发现基本稳定到 8.5MB/s ~ 9.5MB/s 之间。

从上面的测速对比看,因为我这边被联通单线程限速,所以单线程很容易跑到QOS上限,速度上面没什么差别,而在多线程下载上,因为突破了联通的单线程QOS限速,所以可以明显看出速度差距,GoFlyway因为HTTP轻量化和加密较SSR相比简单很多,并且没有混淆等损耗速度,所以在速度上面占据了优势。

最后总结

在墙没有注意到这个HTTP工具(根据特征封锁)或者运营商真的HTTP协议QOS的前提下,这个软件在速度方面还是很有优势的,不过毕竟还是太年轻,以后会更好。

转载请超链接注明:月下博客 » 一个由Go语言编写的轻量化 HTTP Tunnel 代理工具 —— GoFlyway
责任声明:本站一切资源仅用作交流学习,请勿用作商业或违法行为!如造成任何后果,本站概不负责!