「gost」是一款用go语言实现的简单安全隧道开源工具,支持的特性包括多端口监听、可设置转发代理、支持多级转发(代理链)、支持标准HTTP/HTTPS/HTTP2/SOCKS4(A)/SOCKS5代理协议等等一大堆。老E主要看对标准协议的支持和是否简洁,与本文关联的文档包括「使用gost建立跨境加密通道」。
gost安全通道/隧道(新的3.0版作者也不再使用隧道定义)的建立是基于TLS的,将流量加密并结合其他方法(gost参数及用户自定义方法)混淆成普通的上网流量,降低流量特征监控的识别度。仅就Telegram而言,之前常用的方法包括:
-
- socks或mtproto直连:基本秒封
- mtproto+tls:有一定效果,但延迟一般较高
- mtproto+中转:由于mtp的自定义属性和高识别度,中转服务商一般严禁mtp
本文以标准的socks5代理为例,对过墙流量进行加密、混淆,如此,在绝大部分情况下可确保境外可达。强调一下:不过GFW就不用怕GFW。不过墙的流量没必要搞得花里胡哨,过墙的再花里胡哨一样会被干翻。
1.基本原理
跨境通道/隧道的基本原理如下:
2.下载安装gost
gost 2.x Github项目地址及Release下载:
https://github.com/ginuerzh/gost https://github.com/ginuerzh/gost/releases
gost 3.0 rc Github项目地址及Release下载:
https://github.com/go-gost/gost https://github.com/go-gost/gost/releases
3.服务端(代理/远程服务器/境外服务器)
本文采用最新的gost 3.0 rc8版本,境外vps以linux-amd64为例,部署gost的vps为debian/ubuntu系统,将gost二进制预编译文件安装到/usr/local/bin/gost目录下,以下凡是“#”注释的命令均为可选,最小实现不运行此类命令。
#apt update #apt upgrade -y mkdir -p /usr/local/bin/gost curl -sSL -o gost.tar.gz https://github.com/go-gost/gost/releases/download/v3.0.0-rc8/gost_3.0.0-rc8_linux_amd64v3.tar.gz && tar -zxvf ./gost.tar.gz -C /usr/local/bin/gost
启动服务端并设置路径为/kb,可结合nginx或gost自身的分流功能进行混淆。
#gost -L relay+wss://username:password@:8443?path=/kb
如认证信息中包含特殊字符,可使用auth参数。
#authcode=$(echo -n username:password | base64) && gost -L mwss://:8443?auth=${authcode}?path=/kb
如未来有增加下一跳的需求,可使用"-L relay+mwss",relay协议同时支持转发与代理。如果需要将gost服务端置于nginx之后且需要获取客户端真实IP地址,则需要开启proxyProtocol接收代理协议功能。<xxxxxxxxxxxxxx>为用户名:密码的base64编码。
#gost -L relay+wss://:8443?auth=<xxxxxxxxxxxxxx>?path=/kb?proxyProtocol=1
4.客户端(转发/本地服务器/境内服务器)
4.1 linux-arm64
专属机场/几点首选24小时开机运行的设备,老E使用了m401a armbian盒子。无论是否进行了其他配置,和盒子处于同一网络的设备都可以将这台m401a当作节点,在SwitchyOmega里指向它即可实现跨境。
#apt update #apt upgrade -y mkdir -p /usr/local/bin/gost curl -sSL -o gost.tar.gz https://github.com/go-gost/gost/releases/download/v3.0.0-rc8/gost_3.0.0-rc8_linux_arm64.tar.gz && tar -zxvf ./gost.tar.gz -C /usr/local/bin/gost gost -L socks5://:10088 -F relay+wss://username:password@server_ip_or_domianname:8443
如果开启证书校验,则必须指定服务端域名而非IP地址。
#gost -L socks5://:10088 -F relay+mwss://username:password@:server_domain_name:8443?secure=true
4.2 windows-amd64
下载解压windows-amd64版本压缩文件,直接运行解压得到的gost命令行程序即可。Defender如有误报可以忽略。
https://github.com/ginuerzh/gost/releases/download/v2.11.5/gost-windows-amd64-2.11.5.zip
可以通过Windows的sc命令可以创建一个Windows服务:
sc create gost binpath= "d:\gost.exe -L socks5://:10088 -F relay+wss://username:password@server_ip_or_domianname:8443" start= auto
4.3 其他
项目release页面同时也提供了MacOS的二进制预编译版本,参照linux-arm64及windows-amd64的方式安装部署即可。对于移动端,IOS建议直接使用ShadowRocket或其他app均可,对于简单的、标准的socks5节点都提供了支持。Android可以使用作者建议的shadowsocks插件。重复一句话:不过墙不用怕墙。过墙的流量搞得再花里胡哨一样会被干翻,笑~。
https://github.com/xausky/ShadowsocksGostPlugin
5.配置文件
gost支持使用配置文件而非命令参数方式运行,通过-C参数可以指定通过读取配置文件加载配置项。配置文件的生成可以使用-O参数。如下为在服务端生成yaml或json格式配置文件的示例。以配置文件方式加载配置非常适合于通过systemd守护运行的方式,可以修改配置文件而非重启进程,提高管理效率。
#authcode=$(echo -n username:password | base64) && gost -L mwss://:8443?auth=${authcode}?path=/kb -O yaml #authcode=$(echo -n username:password | base64) && gost -L mwss://:8443?auth=${authcode}?path=/kb -O json
在以上最小实现的基础上,我们可以进一步实现nginx分流、反代、端口复用等,增加“隧道”线路的可靠性,同时还可以增加防嗅探手段。需要提示的是,gost v3支持分流、限速等管理特性,而nginx的特性应用需要结合具体的协议,如ws/wss的支持和tcp tls的支持有所区别,不能照搬。
文章评论