gost 是一个非常优秀的代理(proxy)和隧道(tunnel)工具, 支持多种形式的端口映射。
与FRP类似,它也可以实现反向连接的内网穿透。
不过与FRP相比,gost使用更为简单,性能非常稳定。支持N多种传输协议,现在网上介绍gost的文章并不多,gost本身是一个强大的网络工具,做内网穿透简直是小case。
本文介绍采用远程端口映射方式的内网映射, 就是所谓的rtcp。
远程端口映射的意思就是,将本地端的一个服务的端口p(tcp/udp)映射到远程公网主机的端口p1上, 用户通过访问远程的端口P来访问本地的这个服务端口p。
一个典型的内网穿透的场景如下图所示:
server用VPS实现,可以提供公网访问。
host A和host B处于内网中,没有公网IP地址,要想让外部的人员可以访问内网中的host B上的ssh服务( :22端口),在host A上通过gost 将host B的22端口映射到远程 server上的2222端口上。
当然此处也可以不要hostB,将22映射到本机hostA的22端口,也是可以的。
下面我们来看具体的做法:
gost 采用gost 的v3版本来做。
下载地址: Releases · go-gost/gost · GitHub
采用如下的命令:
# server
./gost -L socks5://:5555?bind=true
# host A
./gost -L rtcp://:2222/hostB_IP:22 -F socks5://server_IP:5555
其他用户此时可以用 ssh root@server_IP -p2222 命令,访问hostB的ssh服务。
当然也可以不指定hostB_IP,则默认是访问本机的22端口,如下所示。
# host A
./gost -L rtcp://:2222/:22 -F socks5://server_IP:5555
此处用的是TCP的端口映射,与具体应用层的协议无关。所以各种基于tcp的协议都是支持的。比如http,rmtp。
gost的官方文档位于:
SOCKSv4/v5 - GOSThttps://gost.run/tutorials/protocols/socks/
此处用的是socks5协议进行传输,用relay协议也是可以的。relay协议是gost自己实现的类socks5协议,专门用于端口映射。
Relay - GOSThttps://gost.run/tutorials/protocols/relay/
# server
./gost -L relay://:5555?bind=true
# host A
./gost -L rtcp://:2222/hostB_IP:22 -F relay://server_IP:5555
当然高级的用法是relay结合其他协议,比如kcp。
kcp采用UDP协议,在一些丢包率高的场景下可以大大提高链路的数据传输带宽。
# server
./gost -L relay+kcp://:5555?bind=true
# host A
./gost -L rtcp://:2222/hostB_IP:22 -F relay+kcp://server_IP:5555
kcp在此处是作为数据通道,承载上层的relay协议,具体的代理功能由relay协议实现。
gost可选的数据传输协议包括以下这么多种,比如用tls可以进行加密,kcp可以加速。
数据通道用于承载代理或转发协议数据,目前支持的数据通道协议有:
tcp
- 原始TCP协议mtcp
- Multiplex TCP 多路复用功能的TCPudp
- 原始UDP协议tls
- TLS协议dtls
- DTLS协议mtls
- Multiplex TLS,在TLS上增加多路复用功能ws
- Websocketmws
- Multiplex Websocket,在Websocket上增加多路复用功能wss
- Websocket Secure,基于TLS加密的Websocketmwss
- Multiplex Websocket Secure,在基于TLS加密的Websocket上增加多路复用功能h2
- HTTP2协议h2c
- HTTP2 Cleartextgrpc
- gRPC协议pht
- Plain HTTP Tunnelssh
,sshd
- SSH协议kcp
- 基于UDP的KCP协议quic
- 基于UDP的QUIC协议h3
- HTTP3协议,基于PHT协议构建数据通道wt
- HTTP/3 WebTransport模式ohttp
- HTTP Obfuscationotls
- TLS Obfuscationicmp
,icmp6
- ICMP和ICMPv6协议ftcp
- Fake TCP
与FRP相比,是不是更加的简单,根本不需要写什么配置文件。