跳到主要内容

远程转发

本文介绍如何使用 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. 保存并启动

  1. 点击创建按钮保存配置
  2. 在列表中找到新建的规则
  3. 点击开始转发按钮启动隧道

示例:暴露本地开发环境

假设本机运行了一个 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

使用方法:

  1. 启动转发
  2. 将回调地址配置为 http://服务器IP:8888/callback
  3. 回调请求会被转发到本地的 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,但外部无法访问。

解决方案

  1. 检查服务器 sshd 配置是否设置了 GatewayPorts yesGatewayPorts clientspecified
  2. 修改配置后需要重启 SSH 服务
  3. 检查防火墙是否放行了对应端口

端口被占用

问题:服务器提示端口被占用。

解决方案

  1. 更换一个未被占用的服务器端口
  2. 或关闭占用该端口的程序

在服务器上检查端口占用:

sudo lsof -i :9000
# 或
sudo netstat -tlnp | grep :9000

外部无法访问

问题:转发启动成功,但外部无法访问服务器端口。

排查步骤

  1. 确认服务器监听地址是否为 0.0.0.0(而非 127.0.0.1
  2. 检查服务器防火墙是否放行端口
  3. 检查云服务器安全组配置
  4. 确认本地服务是否在运行

连接不稳定

问题:转发频繁断开。

解决方案

  1. 检查网络连接稳定性
  2. 在 SSH 配置中设置心跳保活
  3. 确保本地网络不会中断 SSH 连接

安全建议

  1. 限制访问范围:如非必要,监听地址使用 127.0.0.1 而非 0.0.0.0
  2. 使用随机端口:避免使用常见端口,减少被扫描风险
  3. 及时关闭:不需要时及时停止转发
  4. 配合认证:在暴露的服务前加上认证层
  5. 监控日志:关注服务器访问日志,及时发现异常访问

下一步