阅读时间:1 分钟
0 字

隧道转发 ​

隧道转发可以把原本无法直接访问的端口,通过当前机器的 SSH 连接安全地转到另一端。打开「机器管理」,找到要作为 SSH 服务器的机器,点击它的「隧道」按钮即可配置。

先记住这句话

「本地转发」和「远程中转」底层都是 SSH -L。区别只在于最后访问的是当前 SSH 服务器自己,还是它能连通的另一台机器。

怎么选 ​

你想做什么选择的模式
在自己电脑上访问当前 SSH 服务器里的数据库或 Web 服务本地转发
让当前 SSH 服务器访问你电脑上的开发服务远程转发
在自己电脑上开一个 SOCKS5 代理,访问目标时再动态决定去哪里动态转发
借当前 SSH 服务器做中转,访问它内网里的另一台机器远程中转

本地转发 ​

一句话:把当前 SSH 服务器里的服务,拉到你的电脑上访问。

本地转发设置

例如,服务器 A 上有 MySQL,只监听 127.0.0.1:3306,你想用本地的数据库工具连接它:

界面字段填写示例说明
本地监听端口3306你电脑上要打开的端口
服务器内端口3306服务器 A 上 MySQL 的端口
允许局域网访问不勾选只让当前电脑访问,更安全

点击「保存」后,在本地数据库工具中填写:

text
主机:127.0.0.1
端口:3306

数据会这样走:

text
你的电脑 127.0.0.1:3306
        ↓ SSH 隧道
服务器 A 127.0.0.1:3306

端口被占用怎么办?

如果你电脑上的 3306 已被占用,只需把「本地监听端口」改为 13306。服务器内端口仍填 3306,本地连接时使用 127.0.0.1:13306。

远程转发 ​

一句话:把你电脑上的服务,开给当前 SSH 服务器访问。

远程转发设置

例如,你的电脑正在运行一个 127.0.0.1:3000 的开发站点,想让服务器 A 也能打开它:

界面字段填写示例说明
服务器监听端口8080在服务器 A 上打开的端口
本地端口3000你电脑上开发站点的端口
允许公网/外部网络访问先不勾选默认只让服务器 A 自己访问

保存后,在服务器 A 上测试:

bash
curl http://127.0.0.1:8080

链路是:

text
服务器 A 127.0.0.1:8080
        ↓ SSH 隧道
你的电脑 127.0.0.1:3000

谨慎开启外部访问

勾选「允许公网/外部网络访问」后,其他设备可能通过 服务器IP:8080 访问你的本地服务。只在确实需要时开启,并同时检查云平台安全组、服务器防火墙和 SSH 服务端的 GatewayPorts 配置。

动态转发 ​

一句话:在你电脑上开一个 SOCKS5 代理,具体访问哪个目标由应用每次告诉代理。

动态转发设置
界面字段填写示例说明
本地代理端口8088你电脑上 SOCKS5 代理的端口
允许局域网访问不勾选避免局域网其他设备使用你的代理

保存后,在浏览器或其他支持代理的应用中填写:

text
代理类型:SOCKS5
主机:127.0.0.1
端口:8088

这个模式不会预先写死目标地址:应用可以先访问 10.0.0.8,再访问 172.16.1.20,两次都走同一个 127.0.0.1:8088 代理。

TIP

这是 SOCKS5 代理,不是 HTTP 代理。如果应用提供「通过 SOCKS 代理解析 DNS」的选项,建议一并开启,避免域名在本地解析失败。

远程中转 ​

一句话:你的电脑访问不了服务器 B,但服务器 A 能访问,那就让 A 帮你转一道手。

远程中转设置

在配置前,建议先在服务器 A 上确认目标服务能访问:

bash
curl http://10.0.0.8:80

如果返回正常,再在 极目桌面 中填写:

界面字段填写示例说明
本地端口8080你电脑上要打开的端口
待访问 IP 地址10.0.0.8服务器 B 的地址,必须从服务器 A 的视角能访问
远程端口80服务器 B 上目标服务的端口

保存后,在你的电脑上打开:

text
http://127.0.0.1:8080

数据会这样走:

text
你的电脑 127.0.0.1:8080
        ↓ SSH 隧道
服务器 A(中转)
        ↓ 内网
服务器 B 10.0.0.8:80

目标 IP 是从谁的视角看?

「待访问 IP 地址」是从服务器 A 的视角访问的地址,不是你电脑的视角。所以这里可以填服务器 A 所在内网的 IP,例如 10.0.0.8。

对应的 SSH 命令 ​

不需要手写命令也能使用 极目桌面。下表用来帮你理解四个选项的底层含义:

极目桌面 模式对应的 SSH 命令示例
本地转发ssh -L 3306:127.0.0.1:3306 user@服务器A
远程转发ssh -R 8080:127.0.0.1:3000 user@服务器A
动态转发ssh -D 8088 user@服务器A
远程中转ssh -L 8080:10.0.0.8:80 user@服务器A

常见问题 ​

现象先检查什么
保存时提示端口被占用换一个本地监听端口,不用修改目标服务端口
隧道建立成功,但页面打不开确认目标服务真的在运行,并从 SSH 服务器上直接测试目标 IP 和端口
远程转发只能在服务器自己访问这是未开启外部访问时的正常现象
动态转发连不上确认应用选择的是 SOCKS5,而不是 HTTP 代理
断开 SSH 后隧道失效SSH 隧道依赖当前连接,重新连接机器后再确认隧道状态