top of page
搜尋

Termius Port Forwarding 端口转发与 SSH 隧道配置全攻略

作家相片: termius team
termius team
10月19日
讀畢需時 8 分鐘

想临时连一下远程 MySQL,结果发现数据库只监听内网地址;想把本地开发中的网页给同事看,又不想折腾一堆公网部署;想让浏览器走某台 SSH 服务器的网络访问资源。遇到这些情况,Termius 的 Port Forwarding 就很好用。


它把常见的 `ssh -L`、`ssh -D`、`ssh -R` 做成了图形化规则。你不用每次手敲长命令,只要选类型、填端口、保存,然后双击启用就行。


下面按最常见的使用顺序来讲:先看三种转发分别适合什么场景,再一步步配置本地转发、动态转发、远程转发,最后补几个排错小技巧。


俯视图展示一台笔记本电脑正在连接远程服务器。
端口转发的核心,就是让本地和远程服务通过 SSH 隧道连起来。

1. 先搞懂 Termius 里的三种 Port Forwarding


Termius 里的 Port Forwarding 面板一般在左侧菜单可以找到。部分版本会放在 `Vaults` 下面的 `Port Forwarding` 里。入口可能略有差异,但配置思路是一样的。


三种类型对应 SSH 命令里的三个参数:


Termius 类型

对应 SSH 参数

最适合的场景

常见例子

`Local`

`ssh -L`

把远程内网服务映射到本地

本地访问远程 Redis、MySQL、管理后台

`Dynamic`

`ssh -D`

把 SSH 服务器变成 SOCKS5 代理

浏览器走远程服务器网络

`Remote`

`ssh -R`

把本地服务暴露到远程服务器

本地开发项目临时给别人访问


如果你是第一次用,建议先从 Local Forwarding 开始。它最直观,也最常用。


顺便说一句,如果你还没安装客户端,建议从 Termius 官网确认系统版本,再进行 Termius 下载,避免拿到非官方安装包。


2. 配置本地端口转发,把远程内网服务映射到本地


本地端口转发,也就是 `Local Forwarding`,对应命令行里的:


```bash

ssh -L 本地端口:目标地址:目标端口 SSH服务器

```


在 Termius 里不用写这串命令。你只要告诉它:本地开哪个端口,通过哪台 SSH 服务器,去访问哪个远程地址和端口。


适合什么情况


Local 最适合这种场景:


你有一台云服务器或跳板机,可以 SSH 登录。它自己,或者它所在内网里的某台机器,跑着一个服务。这个服务不能直接从公网访问,但你想在本地电脑上用工具连它。


常见例子有:


  • Redis 监听 `127.0.0.1:6379`

  • MySQL 只允许内网访问 `3306`

  • 某个后台页面只开在服务器内网

  • Elasticsearch、RabbitMQ、Grafana 等管理界面不对公网开放


在 Termius 里怎么填


打开 Termius 后,按这个顺序操作:


  1. 进入 `Port Forwarding` 面板

    如果没看到,可以去 `Vaults` 里找 `Port Forwarding`。


  2. 点击右上角的 `+ New Rules` 或 `Create`


  3. 创建一条新规则,并填写这些字段:


字段

填什么

`Type`

选择 `Local`

`Label`

随便起个好认的名字,比如 `Redis 映射`

`Local Port`

本地空闲端口,比如 `8888`

`Select Host`

选择用来 SSH 登录的服务器

`Destination Address`

目标服务地址

`Destination Port`

目标服务真实端口,比如 `6379`


这里最容易填错的是 `Destination Address`。


如果你要访问的服务就在 SSH 服务器本机上,比如 Redis 运行在这台服务器的 `127.0.0.1:6379`,那就填:


```text

127.0.0.1

```


如果你要通过这台 SSH 服务器访问同一个内网里的其他机器,比如目标机器内网 IP 是 `10.0.1.25`,那就填:


```text

10.0.1.25

```


`Destination Port` 填服务真实端口。Redis 常见是 `6379`,MySQL 常见是 `3306`,Web 服务可能是 `80`、`8080` 或其他端口。


保存并启用


填完后点击 `Save`。


回到规则列表,双击刚刚创建的规则。等图标变绿,或者状态显示连接成功,隧道就建立好了。


这时你在本地访问:


```text

127.0.0.1:8888

```


实际访问到的就是远程目标服务。


举个例子,你把远程 Redis 的 `6379` 映射到了本地 `8888`,那么本地 Redis 客户端里主机填 `127.0.0.1`,端口填 `8888` 就行。


一个小习惯:本地端口不要直接用和远程一样的端口。比如远程 MySQL 是 `3306`,本地可以填 `13306`。这样不容易和本机服务打架。

3. 配置动态端口转发,把 SSH 服务器当 SOCKS5 代理


动态端口转发,也就是 `Dynamic Forwarding`,对应命令行里的:


```bash

ssh -D 本地端口 SSH服务器

```


它和 Local 不一样。Local 是把某一个明确的目标服务映射到本地,而 Dynamic 更像是开了一个本地 SOCKS5 代理。你的浏览器或其他软件连到这个代理后,请求会通过 SSH 服务器发出去。


适合什么情况


Dynamic 适合这些场景:


  • 让浏览器通过远程服务器访问网页

  • 访问只有远程服务器所在网络才能打开的内网系统

  • 临时测试某个站点在远程服务器网络下的表现

  • 不想给每个目标服务单独建 Local 转发规则


它的好处是灵活。你不需要提前指定 `Destination Address` 和 `Destination Port`。


在 Termius 里怎么填


进入 `Port Forwarding` 面板,点击 `+ New Rules`,然后这样配置:


字段

填什么

`Type`

选择 `Dynamic`

`Label`

比如 `SOCKS5 代理`

`Local Port`

本地代理端口,比如 `1080`

`Select Host`

选择作为代理节点的 SSH 服务器


Dynamic 不需要填目标地址,也不需要填目标端口。


保存后,双击这条规则启用。连接成功后,本地就有了一个 SOCKS5 代理:


```text

127.0.0.1:1080

```


浏览器里怎么用


如果你只想让浏览器走这个代理,可以用浏览器代理插件,比如 SwitchyOmega 这类工具。配置时选择:


```text

代理类型:SOCKS5

地址:127.0.0.1

端口:1080

```


如果你想让某些软件也走这条通道,就去对应软件的代理设置里填同样的 SOCKS5 地址和端口。


这里有个容易忽略的点:Dynamic 只负责提供代理入口。你的浏览器或软件必须主动设置代理,否则流量不会自动走这条 SSH 隧道。


近景图展示浏览器代理设置窗口和本地端口编号。
动态转发创建的是本地 SOCKS5 代理,软件需要手动指定它。

4. 配置远程端口转发,把本地服务临时暴露出去


远程端口转发,也就是 `Remote Forwarding`,对应命令行里的:


```bash

ssh -R 远程端口:本地地址:本地端口 SSH服务器

```


这个方向和 Local 正好相反。


Local 是“我在本地访问远程服务”。

Remote 是“别人通过远程服务器访问我本地的服务”。


适合什么情况


Remote 最常见的用途是内网穿透。


比如你本地正在开发一个 Web 项目,运行在:


```text

127.0.0.1:3000

```


你想让同事或测试人员临时访问它,但你的电脑没有公网 IP,也不想部署到线上环境。这个时候,可以用一台有公网 IP 的 SSH 服务器做中转。


配置完成后,别人访问:


```text

远程服务器IP:8080

```


请求会通过 SSH 隧道转到你本地的:


```text

127.0.0.1:3000

```


在 Termius 里怎么填


进入 `Port Forwarding` 面板,点击 `+ New Rules`,然后这样配置:


字段

填什么

`Type`

选择 `Remote`

`Label`

比如 `本地 Web 穿透`

`Remote Port`

远程服务器上要开放的端口,比如 `8080`

`Select Host`

选择有公网 IP 的 SSH 服务器

`Destination Address`

通常填 `127.0.0.1`

`Destination Port`

本地服务端口,比如 `3000`


保存后,双击启用规则。


如果一切正常,远程服务器会开始监听你填的 `Remote Port`。访问远程服务器的这个端口时,请求会被转发到你的本地服务。


远程转发最容易卡在 GatewayPorts


Remote Forwarding 有一个很常见的坑:你配置好了,Termius 也显示连接成功,但外网就是访问不了。


很多时候不是 Termius 的问题,而是远程 Linux 服务器的 SSH 配置限制了监听地址。


打开远程服务器上的 SSH 配置文件:


```bash

sudo nano /etc/ssh/sshd_config

```


找到或添加:


```text

GatewayPorts yes

```


保存后重启 SSH 服务:


```bash

sudo systemctl restart sshd

```


如果服务器使用的是某些发行版,服务名也可能是 `ssh`,对应命令可能是:


```bash

sudo systemctl restart ssh

```


还要检查两件事:


  • 云服务器安全组是否放行了 `Remote Port`

  • 服务器本机防火墙是否允许外部访问该端口


Remote 很方便,但别把敏感服务直接暴露出去。临时调试可以,长期使用最好加认证、限制来源 IP,或者放到更安全的访问层后面。


5. 启动失败时,先查这几个地方


Port Forwarding 启不起来,或者启起来但访问不了,通常逃不出下面几类问题。


本地端口被占用


Local 和 Dynamic 都需要占用本地端口。比如你填了 `8888`,但本机已经有其他软件占着它,Termius 就可能启动失败。


可以换一个端口试试,比如:


```text

18080

13306

16379

11080

```


尽量选一个你认得出来含义的端口。比如 `13306` 一看就知道可能是 MySQL 转发。


SSH 主机连接本身有问题


端口转发依赖 SSH 会话。Termius 启用规则时,会在后台维持一个 SSH 连接。


如果 SSH 主机密码、密钥、跳板配置有问题,Port Forwarding 也会失败。先去 `Hosts` 里确认这台服务器能正常登录,再回到 Port Forwarding 启动规则。


也别手动断开这台服务器的连接。隧道依赖这条连接,断开后转发会马上失效。


Destination Address 填错


Local 转发时,`127.0.0.1` 指的是远程 SSH 服务器自己的本机地址,不是你的电脑。


Remote 转发时,`127.0.0.1` 通常指你的本地电脑,因为目标是你本地服务。


这个方向很容易混,记住一句话就够了:


Destination Address 写的是“最终要被访问的服务在哪里”。

Local 的最终服务在远程侧。

Remote 的最终服务在本地侧。


服务只监听了错误地址


有些服务只监听 `127.0.0.1`,有些监听 `0.0.0.0`,这会影响能不能访问。


比如你想通过 SSH 服务器访问内网机器上的服务,但那个服务只监听了内网机器自己的 `127.0.0.1`,那从 SSH 服务器过去就连不上。你需要让服务监听内网 IP,或者改成合适的监听地址。


云服务器安全组没放行


Local 和 Dynamic 通常不需要额外放行远程端口,因为访问是通过 SSH 隧道走的。


Remote 不一样。Remote 要让外部用户访问远程服务器上的某个端口。这个端口除了在 SSH 配置里允许,还要在云平台安全组里放行。


6. 该选 Local、Dynamic 还是 Remote


如果你还在纠结该选哪一个,可以直接按下面这个判断:


你想做什么

选哪种

在本地访问远程数据库或后台

`Local`

让浏览器走 SSH 服务器网络

`Dynamic`

把本地开发服务给别人访问

`Remote`

只访问一个固定服务

`Local`

访问很多不固定的网站或内网资源

`Dynamic`

做临时内网穿透

`Remote`


我的建议是:


  • 日常连数据库和后台,优先用 Local

  • 临时代理浏览器流量,用 Dynamic

  • 本地项目演示和临时回调测试,用 Remote


别一上来就把所有东西都暴露到公网。能用 Local 解决的,就别用 Remote。能只给自己访问的,就别开放给所有人。


侧面视角展示小型服务器和网线连接的家庭网络设备。
不同转发模式只是方向不同,本质都是通过 SSH 建立安全通道。

常见问题


Termius Port Forwarding 需要一直开着吗


需要。端口转发依赖 SSH 会话。只要 Termius 关闭、网络断开,或者对应 SSH 连接断掉,隧道就会失效。


Local Forwarding 里本地端口可以随便填吗


不能完全随便。要填本机没有被占用的端口。建议避开系统常用端口,选 `8888`、`13306`、`16379`、`18080` 这类容易识别的端口。


Dynamic Forwarding 是不是等于全局代理


不是。Termius 只创建 SOCKS5 代理入口。你的浏览器、系统或软件需要手动配置 `127.0.0.1` 和对应端口,流量才会走这个代理。


Remote Forwarding 为什么外网访问不了


常见原因有三个:远程服务器没有开启 `GatewayPorts yes`,云服务器安全组没放行端口,或者服务器防火墙拦截了端口。先从这三处查。


Destination Address 应该填 localhost 还是内网 IP


看目标服务在哪里。服务就在 SSH 服务器本机,Local 里填 `127.0.0.1`。服务在同内网另一台机器,填那台机器的内网 IP。Remote 场景下,如果目标是你本地电脑上的服务,通常填 `127.0.0.1`。


最后给你一个实用选择


如果只是想把远程 Redis、MySQL、后台页面映射到本地,直接选 Local,本地端口填一个空闲端口,目标地址按服务位置填写。


如果想让浏览器走 SSH 服务器的网络,选 Dynamic,然后在浏览器里配置 SOCKS5。


如果要把本地开发中的 Web 服务临时给别人访问,选 Remote,同时检查 `GatewayPorts`、安全组和防火墙。


Termius 的 Port Forwarding 难点不在界面,而在判断“流量从哪里来,要到哪里去”。把这个方向想清楚,Local、Dynamic、Remote 三种规则就很好选了。


 
 
 

留言


bottom of page