假定S为具有暴露在公网的中转服务器,其IP地址为a.b.c.d,A为穿透目标,即目标被访问主机,其IP为192.168.1.10,我们希望其他主机可以访问其上运行的Jellyfin服务(默认端口8096)。以下为分步骤的最小实现。
1.S-中转服务器(VPS/可暴露于公网的主机/网关)
在中转服务器上,按照规划放行端口(8443、8080)后,运行以下命令:
gost -L socks5://:8443?bind=true #gost -L relay://:8443?bind=true
2.A-目标主机/被访问主机
目标主机/被访问主机是配置重点。将目标主机192.168.1.10的8096端口绑定/映射到中转服务器S的端口8080。rtcp、rudp为协议,指定远程端口转发,先后列出远程端口、本地端口。
gost -L rtcp://:8080/:8096 -F socks5://a.b.c.d:8443 #gost -L rtcp://:8080/:8096 -L rudp://:8080/:8096://:8080/:8096 -F relay://a.b.c.d:8443
3.B-访问主机/终端
作为访问终端,并非必须通过通过gost进行配置,可以直接访问S的8080端口,也即访问A的8096端口。
http://a.b.c.d:8080
通信两端都采用gost时,gost默认会进行协商加密(基于tls,对标准socks5协议进行了扩展),当S-中转服务器位于GFW另一侧,同时不希望额外付出开销的情况下,可以充分利用gost的这一特性。A和S的socks通信默认会进行协商加密,当使用tls、wss/mwss等协议时,应采用“notls=true”参数将加密功能关闭以避免重复加密。
#gost -L :10088 -F socks5://a.b.c.d:8443 #gost -L socks5:10088?notls=true -F socks5+tls://a.b.c.d:8443
此时,B(假定10.1.1.10/8)及B所处同一网段(10.1.1.x/8)的其他终端均可配置SwitchyOmega指向B的10088端口,通过访问S的8080端口实现穿透访问A于5000端口提供的服务。本文示例虽为socks5,但不推荐使用SwitchyOmega直接指向S,因为SwitchyOmega并不支持gost的协商加密特性。至本文发布时,Windows 10/11建议下载v3 rc8 windows-amd64版本,2.11 windows-amd64版本会遭遇Defender报毒问题。gost 3.0.0 rc8 windows-amd64链接如下:
https://github.com/go-gost/gost/releases/download/v3.0.0-rc8/gost_3.0.0-rc8_windows_amd64v3.zip
实际部署过程中,对S、A的IP地址和端口进行替换即可。在此最小实现基础上,调整协议、增加相应的参数,可实现更为安全、私密和稳定的内网访问。同时,如果B需要向内网外的用户提供相应的服务,同理参照A和S的配置部署。
文章评论