31 lines
1.0 KiB
Markdown
31 lines
1.0 KiB
Markdown
|
|
# 2026-06-10 — RDP guacd 握手修复
|
|||
|
|
|
|||
|
|
## 摘要
|
|||
|
|
|
|||
|
|
修复浏览器 RDP 连接时 guacd 报 `Guacamole protocol violation`:由透明 TCP 桥接改为服务端完成 guacd 握手后再转发 WebSocket。
|
|||
|
|
|
|||
|
|
## 动机
|
|||
|
|
|
|||
|
|
`guacamole-common-js` 的 `WebSocketTunnel` 假定服务端(官方 Java servlet)向 guacd 发送 `select`/`connect` 等指令;Nexus 原先将浏览器 WS 字节原样转发到 guacd,导致协议错误。
|
|||
|
|
|
|||
|
|
## 涉及文件
|
|||
|
|
|
|||
|
|
- `server/infrastructure/guacamole/protocol.py` — 指令编解码、guacd RDP 握手
|
|||
|
|
- `server/infrastructure/guacamole/ws_tunnel.py` — 握手后 WS↔guacd 桥接,过滤内部 ping
|
|||
|
|
- `server/api/rdp.py` — 使用 DB 中 `rdp_hosts` 凭据握手,JWT 仍走路径
|
|||
|
|
- `tests/test_guacamole_protocol.py` — 协议单测
|
|||
|
|
|
|||
|
|
## 迁移 / 重启
|
|||
|
|
|
|||
|
|
- 无 DB 迁移
|
|||
|
|
- 需重启 API 容器(`deploy-production.sh`)
|
|||
|
|
|
|||
|
|
## 验证
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
bash scripts/local_verify.sh
|
|||
|
|
python -m pytest tests/test_guacamole_protocol.py -q
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
生产:3389 页连接 → guacd 日志无 protocol violation → 画布显示桌面。
|