Skip to content

隧道管理

学习如何创建、管理和监控隧道


📋 目录


隧道概述

什么是隧道?

隧道(Tunnel)是 YAT 的核心工作单元,用于将内网服务暴露到公网。

隧道的组成

  • Intent(意图) - 您想要做什么(协议、配置)
  • Channels(通道) - 具体的转发规则
  • Participants(参与者) - 设备及其角色
  • Routes(路由) - 运行链路

隧道状态

状态说明图标
active运行中🟢
inactive未启动
stopped已停止🔴
failed启动失败
negotiating协商中🟡

支持的应用类型

应用协议说明
HTTP 代理HTTP/HTTPSWeb 服务、API
TCP 转发TCP数据库、SSH
UDP 转发UDP游戏服务器、DNS
ARD 远程桌面TCP+UDPmacOS 远程桌面

创建隧道

方式一:从 Tunnels 页面创建

  1. 点击左侧导航栏 Tunnels
  2. 点击 创建隧道 按钮
  3. 选择应用类型

📸 Tunnel snapshot 应用选择对话框

说明:显示可用的应用列表、应用图标和描述

方式二:从 Edge 页面创建

  1. 点击左侧导航栏 Edges
  2. 选择一个 Edge 服务器
  3. 点击 创建隧道 按钮

配置隧道

HTTP 代理

配置项

  • 隧道名称 - 自定义名称(必填)
  • 本地端口 - 本地服务端口(必填)
  • 本地主机 - 本地监听地址(默认 127.0.0.1)
  • 传输模式 - Relay / P2P / WireGuard
  • 共享设置 - 共享 / 独占

📸 Tunnel snapshot HTTP 代理配置表单

说明:显示名称、端口、传输模式等配置项

TCP/UDP 转发

配置项

  • 隧道名称 - 自定义名称
  • 本地端口 - 本地监听端口
  • 远程端口 - 远程暴露端口(可选)
  • 本地主机 - 本地监听地址

ARD 远程桌面

配置项

  • 隧道名称 - 自定义名称
  • 目标主机 - 目标 Mac 的主机名或 IP
  • 传输模式 - Relay / P2P / WireGuard
  • 角色 - 服务器 / 客户端

配置初始化

某些应用会在创建时自动初始化配置:

typescript
// ARD 示例
{
  localHost: '127.0.0.1',
  sharedState: 'shared',
  tunnelRole: 'publisher',
  transport: 'relay',
  creatorDeviceId: 'device-xxx'
}

创建成功

创建成功后:

  • ✅ 隧道出现在隧道列表中
  • ✅ 状态为 未启动
  • ✅ 可以点击查看详情

启动与停止

启动隧道

方式一:从列表启动

  1. 找到隧道卡片
  2. 点击 启动 按钮
  3. 等待状态变为 运行中

方式二:从详情启动

  1. 点击 查看详情
  2. 点击 启动 按钮

📸 Tunnel snapshot 隧道启动过程

说明:显示启动按钮、加载状态、成功提示

启动流程

用户点击启动

检查 Edge 连接

检查本地端口

调用 Host API (startChannels)

Edge 创建通道

状态同步到客户端

显示运行中

停止隧道

方式一:从列表停止

  1. 找到运行中的隧道
  2. 点击 停止 按钮
  3. 确认停止

方式二:从详情停止

  1. 进入隧道详情
  2. 点击 停止 按钮

重启隧道

隧道运行异常时,可以点击 重新连接 按钮重启。


查看隧道详情

进入详情

点击隧道卡片上的 查看详情 按钮。

详情页面结构

1. 基本信息

  • 隧道名称
  • 应用类型
  • Edge 服务器
  • 创建时间
  • 更新时间

📸 Tunnel snapshot 隧道详情 - 基本信息

说明:显示名称、应用、Edge、时间等信息

2. 远程地址

显示可用的远程访问地址:

  • 系统分配域名 - xxx.myroxy.dev
  • 自定义域名 - 如果已配置
  • CNAME 状态 - DNS 验证状态

📸 Tunnel snapshot 隧道详情 - 远程地址

说明:显示多个地址、复制按钮、CNAME 状态

3. 通道列表

显示隧道下的所有通道:

通道名称协议本地端口远程端口状态
VNC 通道TCP590012345运行中
VNC 通道UDP590012345运行中

📸 Tunnel snapshot 隧道详情 - 通道列表

说明:显示通道 key、协议、端口绑定、状态

4. 参与者信息

显示参与设备的角色:

  • 设备 ID
  • 角色 - Publisher / Consumer / Controller
  • 状态 - Online / Offline
  • 最后在线时间

5. 应用自定义标签页

某些应用会提供额外的标签页:

ARD 示例

  • 连接状态 - 显示 VNC 服务状态
  • 远程桌面快照 - 显示远程桌面预览

📸 Tunnel snapshot 隧道详情 - ARD 自定义标签

说明:显示连接状态、桌面快照


隧道共享与协作

共享模式

YAT 支持两种共享模式:

Exclusive(独占)

  • 🔒 仅创建设备可以使用
  • 🚫 其他设备无法加入
  • ✅ 适合个人使用

Shared(共享)

  • 👥 同一账号的其他设备可以加入
  • 🔄 自动同步通道状态
  • ✅ 适合多设备协作

设置共享模式

创建时设置: 在创建隧道的配置表单中选择共享或独占。

创建后修改: 目前不支持修改共享模式,需要重新创建隧道。

多设备协作

场景示例

场景: 在公司访问家里的 NAS

设置步骤

  1. 家里设备(Publisher)

    • 创建隧道,设置为 共享
    • 角色:Publisher(发布端)
    • 启动隧道
  2. 公司设备(Consumer)

    • 看到共享隧道
    • 角色:Consumer(消费端)
    • 查看远程地址,访问服务

📸 Tunnel snapshot 多设备协作示意图

说明:显示 Publisher 和 Consumer 设备、隧道共享关系

角色说明

角色权限说明
Publisher启动/停止/控制服务提供者
Consumer查看/访问服务使用者
Controller管理配置管理员(预留)

删除隧道

删除流程

  1. 找到隧道卡片
  2. 点击 删除 按钮
  3. 确认删除

⚠️ 警告:删除操作不可逆!

删除前检查

删除前,应用可以定义检查逻辑:

typescript
hooks: {
  onBeforeDelete(context) {
    // 检查是否有运行中的服务
    if (context.tunnel.status === 'active') {
      alert('请先停止隧道')
      return false
    }
    return true
  }
}

删除后

  • ❌ 隧道从列表中移除
  • ❌ Edge 上的通道被清理
  • ❌ 分配的域名被释放
  • ❌ 无法恢复

隧道统计

统计卡片

Tunnels 页面顶部显示统计信息:

  • 运行中 - 当前运行的隧道数量
  • 已停止 - 已停止的隧道数量
  • 入站流量 - 接收的数据量
  • 出站流量 - 发送的数据量

📸 Tunnel snapshot 统计卡片

说明:显示 4 个统计指标

查看单个隧道流量

在隧道详情中可以看到该隧道的流量统计。


常见问题

Q: 创建隧道时提示"端口被占用"

原因: 本地端口已被其他服务占用。

解决:

  1. 更换本地端口
  2. 或关闭占用该端口的服务
bash
# macOS/Linux 查看端口占用
lsof -i :8080

# Windows 查看端口占用
netstat -ano | findstr :8080

Q: 隧道启动后立即停止

可能原因:

  1. Edge 服务器离线
  2. 本地服务未启动
  3. 网络不稳定

解决:

  1. 检查 Edge 状态
  2. 确认本地服务运行正常
  3. 查看错误日志

Q: 如何查看隧道日志?

目前日志功能开发中,您可以通过以下方式排查问题:

  1. 查看隧道状态提示
  2. 查看 Edge 服务器日志
  3. 提交 Issue 附带截图

Q: 一个 Edge 可以创建多少个隧道?

理论上没有限制,但建议:

  • 单个 Edge 不超过 20 个隧道
  • 总带宽不超过 Edge 服务器容量

Q: 隧道可以跨 Edge 迁移吗?

目前不支持。如需更换 Edge,需要:

  1. 删除原隧道
  2. 在新 Edge 上重新创建

💡 最佳实践

1. 命名规范

使用有意义的名称:

✅ 我的 NAS - HTTP
✅ 开发服务器 - TCP 3000
✅ 家庭监控 - UDP
❌ 隧道 1
❌ test

2. 端口选择

  • 使用非特权端口(>1024)
  • 避免常见端口冲突
  • 记录端口用途

3. 安全建议

  • 个人使用选择 独占 模式
  • 团队协作选择 共享 模式
  • 定期清理不用的隧道

4. 性能优化

  • 优先选择 P2P 模式(延迟更低)
  • 大文件传输使用 WireGuard 模式
  • Web 服务使用 HTTP/HTTPS

📚 相关文档


YAT Team - 让内网穿透更简单

基于 MIT 许可证发布。