RDP 代理服务器
RDP 代理服务器是 Next Terminal 提供的原生 RDP 入口。开启后,用户可以在 Web 端为已授权的 RDP 资产下载 .rdp 文件,并使用 Windows 远程桌面、Microsoft Remote Desktop 等标准 RDP 客户端连接到 Next Terminal,再由 Next Terminal 代理访问真实的 Windows 远程桌面资产。
和 Web 页面内的远程桌面访问不同,RDP 代理服务器面向本地 RDP 客户端,适合需要原生客户端体验、剪贴板、磁盘重定向、RemoteApp 等能力的场景。
主要特性
- 标准 RDP 客户端访问: 用户无需安装专用客户端,直接使用系统自带或常见 RDP 客户端打开
.rdp文件 - 统一 RDP 入口: 对外只暴露一个固定 RDP 代理地址,通过 Next Terminal 解析到不同目标资产
- 短期一次性票据:
.rdp文件内使用NTICKET票据登录代理,票据默认 300 秒有效,解析成功后立即失效 - 权限控制: 只能为当前用户已授权的 RDP 资产生成票据和下载
.rdp文件 - 会话审计: 通过代理建立的 RDP 会话会创建 Next Terminal 会话记录,可参与审计和录像策略
- 剪贴板和磁盘重定向: 生成的
.rdp文件默认启用剪贴板,并重定向客户端全部磁盘 - RemoteApp 支持: 如果 RDP 资产配置了 RemoteApp,生成的
.rdp文件会自动携带 RemoteApp 参数
使用方式
步骤 1: 按访问方式决定是否开放 RDP 代理端口
RDP 代理服务器监听独立端口。是否需要在 docker-compose.yaml 中映射该端口,取决于实际访问方式:
- 直接使用本地 RDP 客户端连接代理地址:需要映射 RDP 代理端口。
- 在 Web 页面下载
.rdp文件后打开连接:需要映射 RDP 代理端口,因为本地 RDP 客户端会连接.rdp文件中的代理地址。 - 通过 Termark WebSocket 隧道访问:通常不需要对外暴露 RDP 代理端口,Termark 会通过 Next Terminal Web 服务建立隧道并转发到本地访问。
默认 RDP 代理监听端口为 3390。如果需要直连代理地址,可以按下面方式为 next-terminal 服务增加端口映射:
services:
next-terminal:
ports:
- "8088:8088"
- "2022:2022"
- "3390:3390"如果你在系统设置中使用了其他监听端口,需要同步修改端口映射。例如监听地址为 0.0.0.0:3391 时,应映射:
ports:
- "3391:3391"修改完成后,重建 next-terminal 容器使端口映射生效:
docker compose up -d --force-recreate next-terminalTermark WebSocket 隧道
如果只通过 Termark WebSocket 隧道访问 RDP 资产,可以不映射 3390 到宿主机,也不需要在防火墙或安全组中放行该端口。此时需要确保 Termark 能访问 Next Terminal 的 Web 服务地址,并且反向代理支持 WebSocket。
步骤 2: 在系统设置开启 RDP 代理服务器
登录 Next Terminal,进入「系统设置」>「RDP 代理服务器」,按下面的方式配置:
- RDP 代理服务: 开启后,Next Terminal 会启动 RDP 代理监听服务
- 监听地址: RDP 代理服务器监听的 IP 地址和端口,默认
0.0.0.0:3390 - 对外访问地址: 写入
.rdp文件的连接地址,例如rdp.example.com:3390。如果为空,系统会根据监听地址和当前 Web 请求地址自动推导 - 票据有效期(秒):
.rdp文件内票据的有效时间,默认300秒,支持设置为60到3600秒
对外访问地址怎么填
如果 Next Terminal 部署在反向代理、NAT、容器端口映射或负载均衡后面,建议显式填写客户端真正能访问到的 RDP 地址,例如 rdp.example.com:3390 或 10.0.0.10:3390。如果留空,而监听地址是 0.0.0.0:3390,系统会使用当前 Web 请求的主机名加 RDP 端口推导地址,这在复杂网络环境中可能不准确。
安全建议
如果监听地址配置为 0.0.0.0:3390,表示 RDP 代理端口可能被外部网络访问。请在防火墙、安全组或访问控制策略中只允许可信来源访问该端口。
RDP 代理服务器启动时会自动生成用于 RDP 安全层的证书和私钥,默认保存到:
data/rdp-proxy/server.crt
data/rdp-proxy/server.key使用自签名证书时,RDP 客户端首次连接可能会提示证书或服务器身份警告,确认地址无误后继续连接即可。
步骤 3: 创建并授权 RDP 资产
RDP 代理服务器只支持协议为 RDP 的资产。使用前需要确认:
- 资产协议选择为
RDP - 资产地址、端口、账号、密码、域等连接信息配置正确
- 当前用户已被授权访问该资产
- 如果目标资产需要通过网关访问,相关网关配置可正常连通
用户下载 .rdp 文件时,Next Terminal 会先校验资产授权;RDP 客户端连接代理后,代理再根据票据解析真实目标资产和连接凭据。用户不需要知道目标 Windows 主机的账号密码。
步骤 4: 下载 .rdp 文件
进入「资产」页面,找到 RDP 资产,在操作菜单中点击「下载RDP文件」。
Next Terminal 会生成一个短期票据,并下载类似下面名称的文件:
next-terminal-RTxxxx.rdp.rdp 文件中的关键内容类似:
full address:s:rdp.example.com:3390
username:s:NTICKET:<ticketId>:<secret>
prompt for credentials:i:0
authentication level:i:2
enablecredsspsupport:i:0
redirectclipboard:i:1
drivestoredirect:s:*字段含义:
full address: RDP 代理服务器地址,对应系统设置中的「对外访问地址」或自动推导地址username: Next Terminal 生成的一次性票据,格式为NTICKET:<ticketId>:<secret>prompt for credentials:i:0: 不弹出额外凭据输入框enablecredsspsupport:i:0: 关闭前端客户端到代理这一段的 CredSSP/NLAredirectclipboard:i:1: 启用剪贴板重定向drivestoredirect:s:*: 重定向客户端全部磁盘
票据只能短时间使用
.rdp 文件中的票据默认 300 秒过期,并且成功解析一次后就会失效。请在下载后尽快打开连接,不要长期保存或重复使用旧 .rdp 文件。如果连接失败后提示票据过期、票据不存在或票据已使用,重新下载 .rdp 文件即可。
步骤 5: 使用 RDP 客户端连接
下载 .rdp 文件后,使用本地 RDP 客户端打开:
- Windows: 双击
.rdp文件,或使用「远程桌面连接」 - macOS: 使用 Microsoft Remote Desktop 导入或打开
.rdp文件 - Linux: 使用支持
.rdp文件的 RDP 客户端,或根据文件内容手动填写代理地址和用户名
连接流程如下:
- RDP 客户端连接到 Next Terminal 的 RDP 代理地址
- 代理读取
.rdp文件中的NTICKET票据 - Next Terminal 校验票据、用户权限和资产信息
- 代理连接真实 RDP 资产,并使用资产中配置的账号密码登录目标 Windows 主机
- 会话结束后,Next Terminal 记录会话断开状态
关于 NLA
生成的 .rdp 文件会关闭客户端到 RDP 代理这一段的 NLA/CredSSP,这是代理解析票据所需的行为。代理连接后端 Windows 目标资产时仍会启用 NLA。通常不需要手动修改 .rdp 文件。
文件传输与剪贴板
当前版本生成的 .rdp 文件默认开启:
redirectclipboard:i:1
drivestoredirect:s:*这意味着 RDP 客户端通常可以使用剪贴板复制文本或文件,也可以在远程桌面会话中访问本机重定向磁盘。实际效果仍取决于以下因素:
- 本地 RDP 客户端是否支持剪贴板和磁盘重定向
- 本地客户端是否允许重定向全部磁盘
- 目标 Windows 主机的远程桌面策略是否允许剪贴板或磁盘重定向
- 企业终端安全软件或组策略是否拦截文件传输
如果资产配置了 RemoteApp,.rdp 文件还会包含 remoteapplicationmode、remoteapplicationprogram 等字段,打开后会直接启动指定远程应用,而不是完整桌面。
常见问题
页面上看不到「下载RDP文件」
请检查:
- 资产协议是否为
RDP - 当前用户是否已被授权访问该资产
- 当前页面是否为资产列表或支持 RDP 代理下载的入口
下载 .rdp 文件失败
请检查:
- 当前登录状态是否有效
- 账号是否需要先完成双因素认证
- 资产是否仍然存在且协议为
RDP - 用户是否仍有资产访问权限
RDP 客户端无法连接代理地址
请检查:
- 端口是否开放: 防火墙、安全组或云厂商安全策略是否允许访问 RDP 代理端口
- 端口是否映射: Docker 部署时是否将容器内监听端口映射到宿主机
- 对外访问地址是否正确:
.rdp文件中的full address是否是客户端可达地址 - 服务是否开启: 系统设置中的 RDP 代理服务器是否已开启并保存
- 服务是否启动: Next Terminal 日志中是否显示 RDP proxy sidecar 启动成功
- 监听地址是否冲突:
3390或自定义端口是否已被其他进程占用
可以使用下面的命令测试端口连通性:
telnet rdp.example.com 3390
# 或
nc -zv rdp.example.com 3390提示票据过期、票据不存在或票据已使用
RDP 代理票据是短期一次性凭据,常见原因包括:
- 下载
.rdp文件后等待太久才打开,超过票据有效期 - 同一个
.rdp文件已经成功连接过一次 - RDP 客户端自动重连时复用了已消费的旧票据
- 手动编辑
.rdp文件导致NTICKET用户名不完整
处理方式是重新在资产页面点击「下载RDP文件」,使用新下载的文件连接。
可以手动输入 Windows 账号密码连接代理吗
不建议,也不是 RDP 代理服务器的设计用法。RDP 代理服务器使用 .rdp 文件中的 NTICKET:<ticketId>:<secret> 票据识别用户和资产,再由 Next Terminal 使用资产中保存的凭据连接真实 Windows 主机。
如果直接在 RDP 客户端里输入 Windows 账号密码,代理无法知道要连接哪一台资产,也无法完成权限校验和会话审计。
与 Web RDP 访问有什么区别
- RDP 代理服务器: 使用本地 RDP 客户端连接,体验更接近原生远程桌面,适合需要本地剪贴板、磁盘重定向、RemoteApp 或原生客户端能力的场景
- Web RDP 访问: 通过浏览器访问,无需暴露 RDP 代理端口,也无需本地 RDP 客户端,更适合临时访问或受限终端环境
是否支持在线监控和手动断开
当前 RDP 代理会话会记录会话状态,并可按策略参与录像和审计;但 RDP 代理会话暂不支持在线监控和从 Web 端主动断开。
与 SSH 代理服务器有什么区别
- RDP 代理服务器: 面向 Windows 远程桌面协议,通过
.rdp文件和短期票据访问 RDP 资产 - SSH 代理服务器: 面向 SSH 协议,通过标准 SSH 客户端访问 SSH 资产,支持交互选择、直连模式和 SSH 隧道