# 端口转发

本地端口转发让你可以从设备上访问服务器背后的服务 —— 数据库、notebook、开发
服务器 —— 就像它们在本地一样。

## 添加规则

在编辑器中打开一台主机，进入**转发**标签。每条规则包含：

- **本地端口** —— 你设备上的端口（必须为 1024 或更高；iOS 沙盒无法绑定更低的
  端口），
- **远程主机** —— 从 SSH 服务器看到的地址（默认 `localhost`），
- **远程端口**，
- 可选的**标签**，
- **连接时自动启动**。

预设涵盖了常见的那几个：jupyter 8888、postgres 5432、mysql 3306、redis 6379、
web 3000、web 8080。

同一台主机内的本地端口不能重复。对规则的修改会实时应用到已连接的主机。

![主机编辑器的转发标签，其中有一条规则：本地端口 8080 转发到 localhost:18080，标签为 dev server，并带有一个启用开关。](https://bambouville.com/docs/assets/img/forwarding-rule.png)

*主机编辑器转发标签中已保存的一条规则，带有它的启用开关和当前状态。*


## 隧道页面

侧边栏中的**隧道**页面会汇总你所有主机上的每一条转发规则，按主机分组并显示
已连接/已断开状态。每条规则都会显示它的状态（例如“监听中 · 0 个活动连接”）、
实时的 ↑/↓ 字节计数、一个启用开关，以及一个用来在 Safari 中打开类 HTTP 端口
的按钮。

在会话内部，顶栏中的 **⇄ N** 按钮会显示该主机的同一状态。

在 [iPhone](https://bambouville.com/docs/zh-hans/iphone/) 上，可以从会话顶栏看到隧道，但规则的创建和编辑要在
iPad 上进行。

![隧道页面列出一条转发规则：8080 转发到 localhost:18080，标签为 dev server，归在一台已连接的主机下，显示其监听状态并带有一个启用开关。](https://bambouville.com/docs/assets/img/tunnels-page.png)

*所有主机上的每一条规则，按主机分组，各自带有实时状态和一个开关。*


## 使用隧道

规则一旦开始监听，就把设备上的任意应用指向 `localhost:<local port>` —— 用
浏览器访问开发服务器，用 Postgres 客户端访问数据库。流量会在 SSH 连接内部
传输到你的服务器，再由服务器连接到远程的 host:port。

## mosh 与转发

转发规则跑在 SSH 连接上。使用 **mosh** 传输方式时：

- **自动 tmux** 和 **具名 tmux** 启动模式会为 tmux 保留一条 SSH 侧信道，转发
  可以搭载其上。
- **自定** 启动模式没有可承载转发的 SSH 连接，因此添加规则被停用 —— 请把启动
  模式改为自动 tmux 或具名 tmux。

## 限制

- 本地端口必须 **≥ 1024**（iOS 沙盒）。
- 每台主机不能有重复的本地端口。
- 转发只支持本地到远程；没有远程（-R）转发。
