安全与凭证
远程桌面把「一台内网机器的桌面」交给一个网页,所以发放规则比文件分享更敏感。本页说明这条链路默认给你挡住了什么、没挡住什么,以及出事之后怎么收。
访问地址本身就是凭证
https://p2pee.cn/r/<凭证>/
└────────┘ 路径这一段编码这台网关的凭证信息
- 凭证写在地址里,而不是写在服务端 session 里。这是有意的设计取舍:不把内网地址与机器名推给持有凭证的浏览器,就没法知道该连哪台机器。
- 结论:拿到完整地址的人 = 能连进这台网关清单里的机器。RDP 还要目标机的账号口令;VNC 如果预置了
pass=,那就什么都不用再输。 - 地址不会被搜索引擎收录(
/r/在robots.txt里 Disallow,入口页带X-Robots-Tag: noindex),但这只是防索引,不是保密手段。
这些都不该做
把地址发到群聊 / 公开仓库 / 工单系统;给 VNC 预置 pass= 之后把地址发给不熟悉的人;把地址存成书签共享给同事一起用(每份会话都占并发额度,且无从追责)。
目标机器改不了,也当不了跳板
| 防线 | 实现 |
|---|---|
| 地址只来自启动参数 | 网页上没有地址输入框,机器卡片上的地址只作展示 |
| 选择只认清单 ID | 页面回传的是 rdp-1 / vnc-2 这样的编号,ID 不在清单里一律被拒绝 |
| 启动时就拒绝公网目标 | 回环 / 私有网段 / 链路本地 / CGNAT / 内网语义域名 / 裸主机名之外一律不让启动,判定不看订阅、也没有绕过开关 |
所以就算有人拿到完整凭证,也无法让网关去连它指定的一台内网机器 —— 能连的只有你启动时写下的那几台。
口令的去向
| 凭据 | 出现位置 | 不会出现在 |
|---|---|---|
| RDP 用户名 / 域 | 可写在启动参数里预置,页面仍可修改 | — |
| RDP 口令 | 只在页面输入,仅存内存,随会话结束消失 | 启动参数、机器清单、日志、地址 |
| VNC 口令 | 可写在启动参数 pass= 里;不进清单,只在会话就绪时经已加密的 P2P 通道下发一次 | 页面 DOM、机器清单、日志 |
RDP 不给预置是因为 NLA / CredSSP 需要账号与口令成对出现,塞进命令行就等于让启动参数变成凭据载体。
日志与数据面
- 日志脱敏:访问地址只写成
https://…/r/Abc123***这种认得出、用不上的形式;换凭证的key=请求串、broker 地址与 topic 的账号段都会被遮掉。完整地址只出现在网关启动的那一次横幅里 —— 要长期托管它,请当作密码管理。 - 画面不经服务器:桌面字节始终走浏览器与网关之间的 DTLS 加密 P2P DataChannel,服务器只牵线、牵完即退出链路;网关不开放任何入站端口,也不需要端口映射。
- 走中继也不解密:打洞失败经 TURN 中继转发时,改变的是路径(多一跳、带宽受限)而不是机密性,中继拿到的只是密文。
地址外泄之后怎么作废
| 手段 | 效果 | 说明 |
|---|---|---|
| 停止网关进程 | 立即失效(连不上) | 最可靠的一层,但重启后若 markID 不变,同一地址又活了 |
| 重启网关(非会员) | 换新地址 | markID 每次随机 1000-9999,重启即作废旧地址 |
改 -mark 后重启(会员) | 换新地址 | 会员用 -mark 固定地址,作废就得改成新值 |
| 控制台重置账户 Key | ❌ 作不了废 | 已发出的地址里编码的是「用户 + 派生口令 + markID」,与 Key 无关,重置 Key 后旧地址照样打得开 |
重置 Key ≠ 换访问地址
这是最容易误判的一条。Key 泄露要重置 Key;访问地址泄露要靠让网关重新分配 markID(重启或改 -mark),或者先把网关停掉。顺手把 -connect 里的 VNC 预置口令一并撤掉,避免新地址又带着免入口令。
一份发放前自检
-connect里有没有不该预置的pass=?发给别人就撤掉。- 目标机上是否只开了需要的账号?别为了让空口令账户连上而去关掉口令要求。
- 地址只发给需要的人,并告诉他「这是凭证,不要转发」。
- 用完让网关下线:停进程、让被控机休眠,或在控制台确认这条被控端已不在列表里。
- 长期常驻的机器(NAS / 软路由)上,把带
-key的服务文件权限收到600。
