Gost 基于 SSH 的本地与远程端口转发
/ 3 min read
Updated:Table of Contents
Gost 可以把 SSH 当作隧道,用一份配置同时完成两件事:
- 本地端口转发:在本地监听端口,流量经 SSH 送到远端,访问远端服务器上的服务(例如只监听
127.0.0.1的 MySQL)。 - 远程端口转发:在远端监听端口,流量经 SSH 回到本地,把本地服务暴露给远端,相当于一次内网穿透。
相比直接用 ssh -L / ssh -R,好处是配置文件化、可以多条规则一起管理,还能利用 Gost 的多跳和负载均衡。
完整配置
services: # 本地端口转发:本地 :3306 → SSH → 远端的 127.0.0.1:3306 - name: mysql addr: ":3306" handler: type: tcp chain: chain-server listener: type: tcp forwarder: nodes: - name: target-0 addr: 127.0.0.1:3306
# 远程端口转发:远端 :9999 → SSH → 本地的 127.0.0.1:6666 # 远程监听需要 listener 走 chain,本地转发目标写在 forwarder 里 - name: local_service addr: ":9999" handler: type: rtcp listener: type: rtcp chain: chain-server forwarder: nodes: - name: target-0 addr: 127.0.0.1:6666
# 远程服务器chains: - name: chain-server hops: # 第一跳(可以继续加 hop 实现跳板连接) - name: hop-0 # 节点列表(可以放多个节点做负载均衡) nodes: - name: node-0 addr: server:22 connector: type: sshd dialer: type: sshd auth: username: root # password: 密码 metadata: privateKeyFile: ~\.ssh\id_rsa # Windows 写法
# 日志log: output: stderr level: error format: text rotation: maxSize: 100 maxAge: 10 maxBackups: 3 localTime: true compress: false使用说明
- 本地转发:启动后,本地连接
127.0.0.1:3306就等于连接远端服务器上的 MySQL,数据库端口不需要对公网开放。 - 远程转发:在远端服务器上访问
127.0.0.1:9999,就会到达本地的127.0.0.1:6666。远端监听的端口注意不要和服务器上已占用的端口冲突。 - 认证:推荐使用密钥认证(
privateKeyFile),不要把密码写进配置文件。
参考
- Gost v3 文档
- 同类工具的对比见 内网穿透工具清单 和 流量转发工具与面板清单