×

使用gost配置建立跨境隧道/通道

hqy hqy 发表于2024-12-03 18:34:46 浏览7 评论0

抢沙发发表评论

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.基本原理

跨境通道/隧道的基本原理如下:

在国外VPS搭建gost服务端作为代理,国内机使用gost进行转发(至国外VPS),在境外vps和国内机间建立加密通道/隧道。需要强调的是,这里称“隧道”是不严谨的定义,只是和当下互联网认知环境相匹配罢了。
同时,我们可以对这个简单的拓扑结构进行进一步的裁剪优化,逻辑上客户端、应用端是分离的,但物理上可将客户端和应用端合二为一。国内的“客户端”或者“vps”将它拉回到本地,gost项目本就提供了amd64、arm、mips以及各OS的二进制预编译版本,与大量动辄几百兆的GUI工具相比较身材相对很苗条,且无需安装。所以,客户端的部署不需要独立的vps,放在内网一台设备上(路由器、盒子等),或者干脆就放在本机使用,浏览器SwitchyOmega指向内网或者本机的gost连接器即可。相对“机场”而言,可以节约一台vps/主机的资源,符合个人学习、测试使用的需求定位,一人专属在各方面的体验、线路/节点的可管理性一定好于多人共享的节点。

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的支持有所区别,不能照搬。


打赏

本文链接:https://www.kinber.cn/post/4034.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客