远程转发
本文介绍如何使用 XTerminal 配置远程端口转发(内网穿透),实现让外部网络访问本地服务。
工作原理
远程转发(Remote Forwarding)在 SSH 服务器上开启一个监听端口,当有连接访问该端口时,流量通过 SSH 隧道转发到本地目标。
外部访问 --> 服务器监听端口 --> [SSH 加密隧道] --> 本机 --> 本地服务
等效命令行:
ssh -R [服务器地址:]服务器端口:本地地址:本地端口 user@server
使用场景
| 场景 | 说明 |
|---|---|
| 内网穿透 | 没有公网 IP,需要对外暴露本地服务 |
| 远程调试 | 让测试人员访问本地开发环境 |
| 临时分享 | 快速分享本机运行的 Web 应用或 API |
| Webhook 测试 | 接收第三方服务的回调通知 |
配置步骤
1. 进入隧道管理
点击顶部导航栏的隧道标签,进入端口转发管理页面。
2. 新建转发规则
点击**+ 隧道**按钮,打开创建窗口。
3. 选择远程转发类型
在类型选项中选择远程转发(内网穿透)。

4. 填写配置信息
| 字段 | 说明 | 示例 |
|---|---|---|
| 分组 | 可选,选择所属分组 | 开发测试 |
| 名称 | 转发规则名称 | 分享本地 Web 服务 |
| 服务器 | 选择 SSH 服务器 | 公网服务器 |
| 服务器监听地址 | 服务器监听的 IP 地址 | 127.0.0.1 或 0.0.0.0 |
| 服务器端口 | 服务器监听的端口号 | 8080 |
| 回连目标地址 | 本地目标地址 | 127.0.0.1 |
| 回连端口 | 本地目标端口 | 3000 |
配置说明:
- 服务器监听地址:
127.0.0.1:只有服务器本机可以访问(安全)0.0.0.0:允许外部网络访问(需要服务器配置允许)
- 回连目标地址:通常填
127.0.0.1,也可以填本机局域网中其他设备的 IP
5. 保存并启动
- 点击创建按钮保存配置
- 在列表中找到新建的规则
- 点击开始转发按钮启动隧道
示例:暴露本地开发环境
假设本机运行了一个 Web 应用在 3000 端口,需要让外部用户访问。
配置方案:
| 配置项 | 值 |
|---|---|
| 类型 | 远程转发 |
| 名称 | 分享本地 Web |
| 服务器 | 公网服务器(203.0.113.100) |
| 服务器监听地址 | 0.0.0.0 |
| 服务器端口 | 9000 |
| 回连目标地址 | 127.0.0.1 |
| 回连端口 | 3000 |
使用方法:
启动转发后,外部用户访问 http://203.0.113.100:9000 即可访问你本地的 Web 应用。
示例:接收 Webhook 回调
假设需要测试支付回调,但本地没有公网 IP。
配置方案:
| 配置项 | 值 |
|---|---|
| 类型 | 远程转发 |
| 名称 | 支付回调测试 |
| 服务器 | 公网服务器 |
| 服务器监听地址 | 0.0.0.0 |
| 服务器端口 | 8888 |
| 回连目标地址 | 127.0.0.1 |
| 回连端口 | 8080 |
使用方法:
- 启动转发
- 将回调地址配置为
http://服务器IP:8888/callback - 回调请求会被转发到本地的 8080 端口
快速填充
创建时可以使用快速填充模板:
- 远程转发: 服务器9000 -> 本机3000:快速配置内网穿透
点击模板按钮后会自动填充常用配置值,根据实际情况修改即可。
GatewayPorts 配置
默认情况下,SSH 服务器只允许远程转发绑定到 127.0.0.1,不允许绑定到 0.0.0.0。
要允许外部访问,需要修改服务器的 SSH 配置。
修改 sshd 配置
编辑 /etc/ssh/sshd_config:
# 允许远程转发绑定到任意地址
GatewayPorts yes
# 或者只允许客户端指定的地址
GatewayPorts clientspecified
重启 SSH 服务
# systemd 系统
sudo systemctl restart sshd
# SysVinit 系统
sudo service sshd restart
配置说明
| 选项 | 说明 |
|---|---|
| no | 默认值,只能绑定到 127.0.0.1 |
| yes | 强制绑定到 0.0.0.0(所有接口) |
| clientspecified | 由客户端指定绑定地址 |
防火墙配置
如果服务器开启了防火墙,需要放行转发端口。
iptables
sudo iptables -A INPUT -p tcp --dport 9000 -j ACCEPT
firewalld
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
ufw
sudo ufw allow 9000/tcp
云服务器安全组
在云服务商控制台(阿里云、腾讯云、AWS 等)的安全组配置中,添加入站规则放行对应端口。
连接流程
1. XTerminal 建立到服务器的 SSH 连接
2. 请求服务器在指定端口开启监听
3. 外部访问服务器该端口
4. 流量通过 SSH 隧道加密传输到本机
5. 本机将流量转发到目标服务
常见问题
绑定 0.0.0.0 失败
问题:配置了服务器监听地址为 0.0.0.0,但外部无法访问。
解决方案:
- 检查服务器 sshd 配置是否设置了
GatewayPorts yes或GatewayPorts clientspecified - 修改配置后需要重启 SSH 服务
- 检查防火墙是否放行了对应端口
端口被占用
问题:服务器提示端口被占用。
解决方案:
- 更换一个未被占用的服务器端口
- 或关闭占用该端口的程序
在服务器上检查端口占用:
sudo lsof -i :9000
# 或
sudo netstat -tlnp | grep :9000
外部无法访问
问题:转发启动成功,但外部无法访问服务器端口。
排查步骤:
- 确认服务器监听地址是否为
0.0.0.0(而非127.0.0.1) - 检查服务器防火墙是否放行端口
- 检查云服务器安全组配置
- 确认本地服务是否在运行
连接不稳定
问题:转发频繁断开。
解决方案:
- 检查网络连接稳定性
- 在 SSH 配置中设置心跳保活
- 确保本地网络不会中断 SSH 连接
安全建议
- 限制访问范围:如非必要,监听地址使用
127.0.0.1而非0.0.0.0 - 使用随机端口:避免使用常见端口,减少被扫描风险
- 及时关闭:不需要时及时停止转发
- 配合认证:在暴露的服务前加上认证层
- 监控日志:关注服务器访问日志,及时发现异常访问