-
Notifications
You must be signed in to change notification settings - Fork 655
使用教程
goflyway的客户端与服务端均为同一个文件,下载对应系统版本即可运行。以下内容对应v1.0.11b
版本,并假设服务端IP为1.2.3.4,监听在8100端口上。
goflyway基于golang,所以请首先安装go环境并正确配置$GOPATH
和$GOROOT
路径(参考)。然后:
go get -u github.com/coyove/goflyway/cmd/goflyway
完成后goflyway会被编译到$GOPATH/bin
目录下,您也可以将$GOPATH/bin
这个路径加入到$PATH
中以直接调用goflyway。
对于客户端,请将$GOPATH/src/github.com/coyove/goflyway/chinalist.txt
这个文件拷贝至goflyway的同目录下,但是这一步不是必须的:在缺乏chinalist.txt文件的情况下,goflyway只会通过IP判断国内外流量,而chinalist可以更快的匹配(无匹配时才会查询IP)。
在服务器上执行./goflyway -k=KEY
即可启动服务端,KEY
为自定义密码,默认监听8100。本地执行
./goflyway -k=KEY -up="1.2.3.4:8100"
启动客户端连接。
客户端启动后,请设置本地代理为127.0.0.1:8100
(协议为HTTP或SOCKS5代理)。8100端口为默认值,可以使用-l="ip:port"
或-p="ip:port"
命令修改。
对于服务端,-l
同样用于修改其监听地址,请不要忘了同时修改客户端-up
命令中的端口号。
在服务端和客户端使用-a username:password
启用用户认证(username
和password
请自行设定,不要忘了中间的冒号),开启后您需要用户名和密码才能够连接客户端的HTTP或SOCKS5代理。
客户端使用-b=MODE
设置代理模式,MODE可为:
- none(关闭代理)
- iplist(绕过中国IP,默认值)
- iplist_l(基于本地DNS判断绕过中国IP)
- global(全局代理)
服务端可以使用-partial
开启半加密模式,这样HTTPS传输的数据只有前18kb会被加密以降低CPU占用。需要注意的是客户端同样需要加上-partial
,且HTTP流量不受该命令影响。如果使用SOCKS5代理,请不要使用该命令。
因为goflyway的服务端本质上是一个具有代理功能的HTTP服务器,所以您可以使用-proxy-pass http://IP:PORT
的方式打开goflyway的反向代理功能。设置goflyway监听在80端口上,这样客户端发出的代理请求会被正常处理,除此之外的其他请求会forward到IP:PORT
。
请将ca.pem
添加至系统的信任证书列表中,然后使用命令:
-up="http://1.2.3.4:8100"
打开中间人模式,注意该模式只有在使用HTTP代理时有效,不支持HTTP2,Websocket等协议,不支持文件的下载进度显示(使用了Transfer-Encoding: chunked
)。中间人模式下HTTPS和HTTP均会通过HTTP请求发出,但是body和一些关键的HTTP头会被加密。
中间人模式下您可以使用公共的HTTP代理服务器作为前置,以达到加速或隐藏IP的目的。这里我们假设域名example.com已经指向1.2.3.4,代理服务器10.20.30.40:80。客户端使用以下命令连接:
-up="http://[username:password@]10.20.30.40:80/example.com:8100"
(代理仅支持Basic验证,不支持NTLM等方法)
cmd\mitm-relay
是一个特殊的HTTP代理服务器脚本,其可以部署在BAE、SAE之类的Cloud App Engine上,依靠托管在国内服务器上的优势,达到加速客户端连接服务端速度的目的。以BAE为例,假定域名为example.duapp.com
,客户端使用以下命令连接:
-up="fwd://example.duapp.com:80/1.2.3.4:8100"
如果example.com使用了cloudflare加速,服务端需运行在80/8080等指定端口上,客户端使用以下命令连接(请不要遗漏:80
端口):
-up="cf://example.com:80"
若需要通过WebSocket协议与服务端通信,客户端使用以下命令连接:
-up="ws://1.2.3.4:8100"
若连接至cloudflare,则默认已经使用了websocket模式。WebSocket中继可以使用该脚本。
goflyway可以使用支持CONNECT
命令的HTTPS代理服务器作为前置来连接服务端,HTTP
和SOCKS5
均支持此方法。假设代理服务器10.20.30.40:80,客户端使用以下命令连接:
-up="https://[username:password@]10.20.30.40:80/1.2.3.4:8100"
在客户端和服务端同时加上-udp port
打开UDP relay功能,注意端口号必须相同。目前relay只在Discord、Chrome(QUIC)之类的软件中测试过(使用SocksCap64和SSTap),且不会区分国内外流量(默认全局)。
goflyway使用的是UDP over TCP的传输方式,-udp-tcp N
可以指定使用N个TCP连接来承载1个UDP连接(默认N=1),您可以适当调整该值优化传输速度。
默认TCP连接空闲20秒后就会被关闭,该值可以使用-close-after N
设定。不及时关闭连接可能导致too many open files
错误,但实际上Windows和Linux的文件(句柄)数上限足够大,所以保持默认20秒一般就够了(在早期goflyway甚至不会主动关闭连接而是等待目标网站断开)。
但在macOS上,max open files只有256,所以即便设置为10秒也有可能出现errno 24错误(比如一次性打开几十个标签页)。如果您经常遇到这个错误且不想费力设置ulimit -n
的话,可以尝试打开客户端命令-200
,这样在遇到该错误时goflyway会关闭较为空闲的连接控制其总数在200以下。这是一个比较激进的管理策略,请慎重使用。
对于1.0.11g版本您可以使用TCP Mux功能,详情请参考这里