常见问题
解决使用 YAT 过程中遇到的常见问题
📋 目录
安装问题
Q: YAT 支持哪些操作系统?
支持:
- ✅ macOS 10.15+ (Catalina)
- ✅ Windows 10+
- ✅ Linux (Ubuntu 18.04+, CentOS 7+, Debian 9+)
不支持:
- ❌ macOS 10.14 及以下
- ❌ Windows 7/8
- ❌ 32 位系统
Q: macOS 提示"无法验证开发者"?
原因: macOS Gatekeeper 安全策略
解决:
- 打开 系统设置 > 隐私与安全性
- 找到 仍要打开 按钮
- 点击 仍要打开
- 确认打开
或者使用命令行:
xattr -d com.apple.quarantine /Applications/YAT.appQ: Windows SmartScreen 阻止安装?
解决:
- 点击 更多信息
- 点击 仍要运行
Q: Linux 缺少依赖?
Ubuntu/Debian:
sudo apt install libnss3 libatk1.0-0 libatk-bridge2.0-0 \
libcups2 libdrm2 libxkbcommon0 libxcomposite1 \
libxdamage1 libxrandr2 libgbm1 libpango-1.0-0 \
libcairo2 libasound2CentOS/RHEL:
sudo yum install nss atk at-spi2-atk cups-libs \
libdrm libxkbcommon xorg-x11-util-macros \
libXcomposite libXdamage libXrandr mesa-libgbm \
pango cairo alsa-libQ: 安装后无法启动?
排查步骤:
检查系统要求
- 操作系统版本
- 内存(至少 2GB)
- 磁盘空间(至少 500MB)
查看日志
macOS:
cat ~/Library/Logs/YAT/main.logWindows:
%APPDATA%\YAT\logs\main.logLinux:
cat ~/.config/yat/logs/main.log- 重新安装
- 卸载当前版本
- 清理配置目录
- 重新下载最新版本
登录问题
Q: 无法登录 GitHub?
可能原因:
- 网络问题
- GitHub OAuth 应用配置问题
- 浏览器拦截
解决:
- 检查网络连接
- 尝试在浏览器中访问 GitHub
- 禁用广告拦截插件
- 清除浏览器缓存
Q: 登录后立即退出?
可能原因:
- Token 过期
- 网络断开
- 账户被禁用
解决:
- 重新登录
- 检查网络
- 联系支持团队
Q: 多设备登录冲突?
不会冲突。YAT 支持多设备同时登录。
隧道问题
Q: 创建隧道时提示"没有可用的 Edge"?
原因: 未订阅任何 Edge 服务器
解决:
- 前往 Edges 页面
- 切换到 市场 标签
- 订阅一个 Edge 服务器
- 返回创建隧道
Q: 隧道启动失败?
常见错误:
错误 1: Edge 离线
症状: "Edge is offline"
解决:
- 检查 Edge 状态
- 重启 Edge 服务器
- 等待 Edge 上线
错误 2: 端口被占用
症状: "Port already in use"
解决:
# macOS/Linux
lsof -i :8080
kill -9 <PID>
# Windows
netstat -ano | findstr :8080
taskkill /PID <PID> /F错误 3: 网络超时
症状: "Connection timeout"
解决:
- 检查网络连接
- 检查防火墙设置
- 尝试切换网络
错误 4: 权限不足
症状: "Permission denied"
解决:
- Consumer 角色不能启动隧道
- 联系 Publisher 启动
Q: 隧道启动后立即停止?
可能原因:
- 本地服务未启动
- Edge 连接断开
- 配置错误
排查步骤:
1. 确认本地服务运行
curl http://localhost:8080
2. 检查 Edge 状态
- 查看 Edge 页面
- 状态应为"在线"
3. 查看隧道日志
- 详情页面查看错误信息Q: 远程地址无法访问?
检查清单:
- [ ] 隧道状态是否为"运行中"
- [ ] 本地服务是否正常
- [ ] Edge 是否在线
- [ ] 浏览器是否提示证书错误
- [ ] 防火墙是否阻止连接
测试方法:
# 测试本地服务
curl http://localhost:8080
# 测试远程地址
curl https://xxx.myroxy.dev
# 测试 Edge 连接
ping edge.myroxy.devQ: 如何停止隧道?
- 找到隧道卡片
- 点击 停止 按钮
- 确认停止
Q: 隧道可以重命名吗?
目前不支持重命名。需要:
- 删除旧隧道
- 创建新隧道
Edge 服务器问题
Q: Edge 显示离线?
排查步骤:
# 1. 检查服务器是否运行
ssh user@edge-server
uptime
# 2. 检查 Edge 进程
ps aux | grep yat-edge
# 3. 检查端口
netstat -tlnp | grep 443
# 4. 查看日志
sudo journalctl -u yat-edge -n 100
# 5. 重启服务
sudo systemctl restart yat-edgeQ: 如何更新 Edge?
自动更新(推荐):
# YAT 客户端中点击"更新"按钮手动更新:
# 1. 下载新版本
curl https://github.com/tunnel6/edge/releases/latest/download/edge-${os}-${arch} -o /usr/local/bin/edge
# 4. 启动新版本
killall edge && edge server startQ: Edge 证书过期?
自动续期(默认): YAT 会在到期前 30 天自动续期。
手动续期:
# 在 Edge 服务器上
./yat-edge certs renew --config config.yaml
# 重启 Edge
sudo systemctl restart yat-edgeQ: 如何查看 Edge 资源使用?
# CPU 和内存
top -p $(pgrep yat-edge)
# 网络流量
iftop -i eth0
# 磁盘使用
du -sh /opt/yat/扩展问题
Q: 扩展安装后没有显示?
排查步骤:
- 检查目录结构
extensions/my-extension/
├── index.js # 必须
├── index.d.ts # 可选
└── manifest.json # 可选- 检查入口文件
// index.js 必须导出 extension
export const extension = { ... }- 查看控制台
打开开发者工具 > Console
查看是否有加载错误- 重启 YAT
Q: ARD 扩展连接失败?
常见错误:
错误 1: VNC 端口不可达
症状: "Target port is unreachable: 127.0.0.1:5900"
解决:
- 确认 macOS 已开启屏幕共享
- 检查防火墙设置
- 测试本地连接:bash
nc -zv 127.0.0.1 5900
错误 2: 角色错误
症状: "当前设备是客户端,不能创建 ARD 通道"
解决:
- 确保 Publisher 设备启动隧道
- Consumer 设备只能连接
错误 3: VNC 客户端未安装
症状: "未找到可用的本地 VNC 客户端"
解决:
- macOS: 使用内置"屏幕共享"应用
- Windows: 安装 RealVNC 或 TightVNC
- Linux: 安装 Remmina 或 Vinagre
Q: 如何卸载扩展?
- 前往 Apps 页面
- 找到扩展
- 点击 卸载
- 确认卸载
⚠️ 注意: 卸载会删除该扩展的所有隧道
性能问题
Q: 隧道延迟高?
优化建议:
选择更近的 Edge
- 中国用户:香港、日本
- 欧美用户:法兰克福、美西
切换传输模式
- Relay → P2P(同地域)
- Relay → WireGuard(大文件)
检查网络质量
bash# 测试延迟 ping edge.myroxy.dev # 测试带宽 speedtest-cli
Q: 带宽限制?
限制因素:
- Edge 服务器带宽
- 本地网络带宽
- 传输模式
建议:
- 小文件:Relay 模式
- 大文件:P2P 或 WireGuard
- 视频流:P2P 模式
Q: CPU 占用高?
优化建议:
减少隧道数量
- 关闭不用的隧道
切换传输模式
- WireGuard CPU 占用最低
检查扩展
- 某些扩展可能消耗较多资源
网络问题
Q: 公司网络无法使用?
可能原因:
- 防火墙阻止连接
- 代理服务器拦截
- 端口被封锁
解决:
使用 HTTPS(443 端口)
- 通常不会被封锁
配置代理
bashexport HTTPS_PROXY=http://proxy.company.com:8080联系 IT 部门
- 申请开放 443 端口
- 将 Edge 域名加入白名单
Q: 移动网络不稳定?
优化建议:
使用 Relay 模式
- P2P 在移动网络下成功率低
启用自动重连
- YAT 默认启用
使用 WireGuard
- 对移动网络优化好
Q: IPv6 支持?
YAT 的 Edge 服务器可以通过 IPv6 访问,客户端也会自动检测 IPv6 连通性。
但 WireGuard 网络当前仅支持 IPv4:
- 网络 CIDR 分配仅支持 IPv4(如
10.0.0.0/24) - LAN endpoint 采集(same-NAT 发现)仅处理 IPv4 地址
- Relay 转发不处理 IPv6 数据包
如果需求足够,未来版本可能会为 WireGuard 网络添加 IPv6 支持。
Q: WireGuard relay 网络不通(peer 间无法通信)
现象:Edge 已上线,WireGuard 接口已创建,但 peer 之间 ping 不通
快速排查:
# 1. 确认 nftables 规则已安装
sudo nft list table ip yat_relay
# 期望看到 forward 链,counter 有计数
# 2. 确认 IP 转发已启用
cat /proc/sys/net/ipv4/ip_forward # 应为 1
# 3. 确认 rp_filter 已关闭
cat /proc/sys/net/ipv4/conf/all/rp_filter # 应为 0
# 4. 检查 Docker iptables 是否干扰
sudo iptables -L DOCKER-USER -v -n # 检查是否有 DROP 策略
sudo iptables -V # 确认是 nft 还是 legacy常见原因:
ip_forward未启用(Edge 会自动设置,但容器权限不足时可能失败)- Docker 主机的
DOCKER-USER链 DROP 策略拦截了转发包 - iptables-legacy 与 nftables 规则不兼容(两者使用独立内核路径)
详细排查指南
参见 Edge WireGuard 配置 - 异常处理,包含 Docker iptables DROP 策略的完整诊断流程和解决方案。
Q: 虚拟机 guest 与同局域网 peer 单向通信(能发不能收)
现象: 运行在虚拟机 guest(KVM、VirtualBox、VMware)中的设备可以向同局域网 peer 发送数据,但收不到任何回包(0 B received, N KiB sent)。
原因:VM guest 同时有 bridge 和 NAT 模式的虚拟网卡。NAT 网卡导致 guest 的流量被 host 做 masquerading,产生非对称路由:
Peer → 发往 guest 的 LAN IP → 到达 guest ✓
Guest → 经 NAT 网卡回包 → 源 IP 变成 host IP → peer 不识别 → 丢包 ✗解决方案:
方案 1:确保 bridge 网卡为默认路由(推荐)
确保 guest 的默认网关走 bridge 网卡,而不是 NAT 网卡:
Linux guest:
# 查看当前路由
ip route
# bridge 网卡应该是默认路由
# 如果 NAT 网卡是默认路由,调整 metric:
sudo ip route change default via <bridge-gateway> dev <bridge-interface> metric 100Windows guest:
- 打开网络连接
- 右键 bridge 适配器 → 属性 → IPv4 → 高级
- 取消勾选"自动跃点",设置较低值(如 10)
- 对 NAT 适配器设置较高跃点值(如 100)
方案 2:移除 NAT 模式网卡
如果不需要 NAT 网卡,从 VM 配置中删除:
KVM/libvirt:
virsh edit <vm-name>
# 删除 <interface type='network'> 且 <source network='default'/> 的块方案 3:使用 relay 模式
如果 VM 网络无法重新配置,将 WireGuard 网络切换为 force relay 模式。流量将通过 Edge relay 服务器转发,绕过局域网路由问题。
TIP
observed endpoint 显示的是 host 的 IP(而非 guest 的 IP),这在 guest 使用 NAT 模式网络时是正常行为。host 执行 NAT masquerading,因此外部 peer 看到的是 host 的 IP。这是正常的,不是 bug。
Q: 为什么 same-NAT(同局域网)优先使用 LAN endpoint 而不是 observed 公网 endpoint?
当两个 peer 处于同一个 NAT 后(共享相同公网 IP),你可能会问:既然 observed 公网 endpoint 已经验证可用,为什么不直接用它?
原因是 Hairpin NAT(NAT 回环)的支持不确定。
如果 same-NAT 的 peer 使用 observed 公网 endpoint,流量路径会是:
设备 A (192.168.1.100) → 路由器 → 公网 → 路由器 → 设备 B (192.168.1.101)这要求路由器支持 Hairpin NAT —— 即把来自 LAN 设备、目标为本路由器公网 IP 的流量,回环转发到 LAN 内的另一台设备。许多家用路由器:
- ❌ 完全不支持 Hairpin NAT
- ⚠️ 实现有 bug 或不稳定
- ⚠️ 仅对特定协议支持(不一定支持 UDP)
YAT 的方案:当检测到 same-NAT(两个 peer 共享相同的 observed 公网 IP)时,优先使用各 peer 上报的 LAN endpoint,实现局域网直连,不依赖路由器的 Hairpin NAT 能力:
设备 A (192.168.1.100) → 局域网直连 → 设备 B (192.168.1.101)如果 LAN endpoint 不可用或无效,YAT 会自动回退到 observed 公网 endpoint,并且 WireGuard 内置的自愈机制(PersistentKeepalive 每 25 秒)可以在数秒内恢复 endpoint 问题。
高级问题
Q: 如何自定义 Edge 配置?
编辑 Edge 配置文件:
# config.yaml
server:
port: 443
tls:
cert_file: certs/edge-tls.crt
key_file: certs/edge-tls.key
captain:
address: captain.myroxy.dev:443
token: "your-token"
edge:
name: "my-edge"
data_dir: ./data
# 高级配置
max_channels: 100
heartbeat_interval: 30
reconnect_interval: 5Q: 如何调试隧道?
启用调试日志:
在客户端中设置日志级别为 DEBUG。
查看日志:
# macOS
tail -f ~/Library/Logs/YAT/main.log
# 过滤隧道相关日志
grep -i tunnel ~/Library/Logs/YAT/main.logQ: 数据备份策略?
自动备份(开发中)
手动备份:
# 备份配置
tar czf yat-backup-$(date +%Y%m%d).tar.gz \
~/Library/Application\ Support/YAT/
# 恢复配置
tar xzf yat-backup-20241210.tar.gz \
-C ~/Library/Application\ Support/YAT/Q: 如何贡献代码?
- Fork 仓库
- 创建分支
- 提交修改
- 提交 Pull Request
💡 通用排查步骤
1. 检查日志
日志是最有用的调试信息。
2. 重启服务
很多问题是临时的,重启可以解决。
3. 更新版本
确保使用最新版本。
4. 搜索 Issue
在 GitHub Issues 中搜索类似问题。
5. 提交 Issue
如果问题未解决,提交 Issue 并附带:
- 操作系统版本
- YAT 版本
- 错误日志
- 复现步骤
- 截图
📚 相关文档
💬 获取帮助
- GitHub Issues: 提交问题
- Discussions: 社区讨论
- Email: [email protected]
YAT Team - 让内网穿透更简单