上一篇 下一篇 分享链接 返回 返回顶部

SaaS平台如何在香港服务器的Windows Server中启用RDS会话虚拟化,降低跨境远程桌面的带宽消耗?

发布人:Minchunlin 发布时间:2025-09-23 10:40 阅读量:829


那天凌晨,香港PCCW机房的客户运营群里不断刷屏:“远程桌面一卡一顿”“Excel 滚动都花屏”。我手里攥着一杯便利店的美式,盯着 Grafana 上来自内地用户的链路:广州—>香港延迟 42~68ms,抖动 10~30ms,丢包 0.5~2%。这对 RDP 来说不算灾难,但用户侧 2~5Mbps 的公网出口让“高清桌面”变成奢望。

我决定两件事同时做:

  • 把 RDS 会话虚拟化跑起来,让应用在香港“就近渲染”;
  • 用一套可回滚的编码/视觉/传输策略,在不牺牲太多可读性的前提下把带宽压到 1Mbps 附近。

一、现场环境与目标

目标

  • 让内地用户通过 RD Gateway 穿到香港,使用发布的 SaaS 客户端(和必要的办公组件)。
  • 高峰 200+ 并发会话下,人均带宽 ≤ 1Mbps(常态办公场景),页面滚动流畅,文字不糊。

硬件与网络(真实上架参数)

  • 机房:香港(PCCW/HKT 双线 BGP,向内地有 CN2/GIA 回程)
  • 物理宿主:Supermicro 1U(单路 AMD EPYC 7313P 16C/32T,256GB RAM)
  • 存储:2 × 3.84TB NVMe(RAID1,存放 RDSH 镜像和用户 Roaming Profile 缓存)
  • 网络:2 × 10GbE(bond 做冗余),对外 200Mbps 保障带宽
  • 延迟:华南用户 42~68ms,华东 70~95ms
  • OS:Windows Server 2022 Datacenter(中文化 + 最新累积补丁)
  • 证书:Let’s Encrypt(win-acme 自动续期)
  • 目录:单域 AD,香港为资源域控
  • 许可:RDS CAL 2022 Per User(KMS/AVMA 无关,正规授权)

RDS 角色拓扑(3 台虚拟机)

  • CB01:Connection Broker(4C/8G)
  • SH01 / SH02:Session Host ×2(各 8C/24G,后期可水平扩展)
  • GW01:RD Gateway + RD Web + RD Licensing(4C/8G;对外 443/3391)
  • 内部端口:3389(RDP),443(RDWeb/RDG TCP),3391(RDG UDP),5985/5986(WinRM)

二、一步到位的部署脚本(我当时真这么敲的)

提示:如果你第一次做,建议“先脚本后向导”。脚本可复现、可回滚。

1) 角色安装(在各自节点)

# 在 CB01
Install-WindowsFeature RDS-Connection-Broker -IncludeManagementTools

# 在 SH01 / SH02
Install-WindowsFeature RDS-RD-Server -IncludeManagementTools

# 在 GW01
Install-WindowsFeature RDS-Gateway,RDS-Web-Access,RDS-Licensing -IncludeManagementTools

2) 建立基础部署(在 CB01 运行)

Import-Module RemoteDesktop
# 初始化部署(Broker + Session Host + Web Access)
New-RDSessionDeployment `
  -ConnectionBroker "CB01.domain.hk" `
  -SessionHost "SH01.domain.hk" `
  -WebAccessServer "GW01.domain.hk"

# 把第二台会话主机加入
Add-RDServer -Role RDS-RD-SERVER -Server "SH02.domain.hk" -ConnectionBroker "CB01.domain.hk"

# 建集合并发布我们 SaaS 的 RemoteApp(示例用 notepad 占位)
New-RDSessionCollection `
  -CollectionName "SaaS-Session" `
  -SessionHost "SH01.domain.hk","SH02.domain.hk" `
  -ConnectionBroker "CB01.domain.hk" `
  -CollectionDescription "SaaS 多租户会话集群"

# 示例发布 RemoteApp
New-RDRemoteApp `
  -CollectionName "SaaS-Session" `
  -Alias "SaaSClient" -DisplayName "SaaS 客户端" `
  -FilePath "C:\Program Files\SaaSClient\SaaS.exe" `
  -ConnectionBroker "CB01.domain.hk"

3) 配置许可(很关键,否则 120 天后掉坑)

# 在 GW01 安装 Licensing 后
Set-RDLicenseConfiguration `
  -ConnectionBroker "CB01.domain.hk" `
  -LicenseServer "GW01.domain.hk" `
  -Mode PerUser

4) 配置 Gateway(统一外网入口)

# 证书建议用 Let’s Encrypt + win-acme (wacs.exe) 生成,安装到本机“个人”存储并设置自动续期
# 然后在 RD 部署属性里统一替换证书(RD Broker、RD Web、RD Gateway)

# Gateway 外网 FQDN
$gwFqdn = "rdg.saas.example.hk"
Set-RDDeploymentGatewayConfiguration `
  -GatewayMode Custom `
  -GatewayExternalFqdn $gwFqdn `
  -LogonMethod Password `
  -BypassLocal $true `
  -UseCachedCredentials $true `
  -ConnectionBroker "CB01.domain.hk"

CAP/RAP(授权/资源策略)我用 NPS 控制,仅允许“RDS-Users”AD 组通过,资源指向“RDG组内所有计算机”。

三、带宽优化:我最终落地的“稳妥组合拳”

跨境链路的本质问题是:带宽紧 + 抖动丢包。RDP 自 8.x 起已经很聪明,但想把人均压到 1Mbps 还得下刀子。以下策略均在 Windows Server 2019/2022 + 新版 MSTSC 客户端下验证。

1) 图形编码:优先 AVC/H.264 4:2:0,禁用 4:4:4

“4:4:4”画质更锐利,但在文档/表格滚动时显著增带宽。

我在 RDS 会话主机 GPO里如下设置:

组策略路径与建议值

路径 策略 说明
计算机配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面会话主机 → 远程会话环境 优先使用 H.264/AVC 444 图形模式 已禁用 让 RDP 退回 4:2:0,明显降带宽
同上 自动检测连接质量 已启用 让客户端/服务器协商更保守
同上 限制最大颜色深度 16 位 文字依旧清晰,带宽立降
同上 不允许桌面背景不允许字体平滑 已启用 小幅节流,配合 16bpp 更稳

说明:有 GPU 的主机可以开启“为所有 RDS 会话使用硬件图形适配器”,但务必仍禁用 4:4:4,否则图形更丝滑、带宽却起飞。

2) UDP 传输:能用就用,测到抖动/丢包大就果断停

RD Gateway 支持 UDP/3391,在良好跨境路由下,它能降低输入延迟。

但某些运营商路径对 UDP 不友好(NAT/丢包),我按区域开关:

  • 华南/电信 CN2:保留 UDP;
  • 华北/某些移动/铁通:禁用 UDP(只走 443/TCP),抖动更可控。

测试口令(客户端)

# TCP
Test-NetConnection rdg.saas.example.hk -Port 443
# UDP(Windows 的 UDP 探测有限,但可参考)
Test-NetConnection rdg.saas.example.hk -UdpPort 3391 -InformationLevel Detailed

客户端禁用 UDP(策略)

用户配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面连接客户端 → 关闭 UDP:已启用

3) 重定向与多媒体:把不必要的都关掉

我在会话集合级别下推一组自定义 RDP 属性(Broker 上统一下发):

Set-RDSessionCollectionConfiguration `
  -CollectionName "SaaS-Session" `
  -ConnectionBroker "CB01.domain.hk" `
  -CustomRdpProperty @"
redirectclipboard:i:1
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:1
redirectdrives:i:0
audiocapturemode:i:0
audiomode:i:2
videoplaybackmode:i:1
compression:i:1
bandwidthautodetect:i:1
networkautodetect:i:1
disable full window drag:i:1
disable menu anims:i:1
bitmapcachepersistenable:i:1
session bpp:i:16
"@

解释:

  • 禁重定向:打印机/盘符最耗带宽,统一关闭。
  • 音频:audiomode:i:2(不播放),audiocapturemode:i:0(不采集)。
  • 视频播放模式:videoplaybackmode:i:1(服务器端解码,压带宽)。
  • 缓存:bitmapcachepersistenable:i:1(位图持久缓存,多开/频繁窗口切换很有用)。
  • 16bpp + 关闭窗口拖动/菜单动画:视觉差别不大,节省可观。

4) 会话与资源治理

  • 会话超时与回收(防“挂着不动还占带宽”)
  • 活动但空闲:30 分钟强制断开
  • 断线会话:8 小时清理
  • Dynamic Fair Share(Server 2012 R2+):默认已启用,避免“带宽土豪”
  • Profile:用户漫游配置文件走 NVMe 本地缓存 + 后台异步写回,降低登录尖刺

四、真实数据:三轮 A/B 的对比

场景:Excel/浏览器/内部 SaaS 客户端为主;无高清视频、无 3D;用户端带宽 2~10Mbps 不等。

表 1:图形编码与颜色深度

方案 颜色深度 AVC 模式 人均带宽(p50/p95) 主观体验
A(默认) 32bpp 允许 4:4:4 1.8 / 3.2 Mbps 文字锐利,但滚动时带宽峰值高
B(推荐) 16bpp 禁用 4:4:4(退 4:2:0) 0.85 / 1.6 Mbps 文字清晰度略降,但滚动顺滑、峰值温和
C(更省) 16bpp 4:2:0 + 禁桌面特效 0.65 / 1.2 Mbps 进一步省带宽,UI 动效变少

表 2:UDP 取舍

路由区域 UDP 状态 人均带宽(p95) 输入延迟(主观) 备注
华南(电信 CN2) 开启 UDP 1.4 Mbps 更顺手 丢包低,UDP 有益
华北(移动/铁通) 关闭 UDP(TCP only) 1.2 Mbps 稳定,不突刺 避免 NAT/丢包导致的卡断

表 3:重定向与音频

设置 成果
关闭打印机/盘符重定向 高峰期 p95 带宽下降 ~12%
音频不播放/不采集 再降 ~6%
位图持久缓存 窗口切换/重复界面带宽峰值降低,操作更稳

五、客户端分发与体验设置

我最终给用户两种入口:

  • RDWeb 门户:https://rdg.saas.example.hk/rdweb(绑定同一张公有证书)
  • 签过名的 .rdp 快捷文件(内含自定义属性,上面那段 CustomRdpProperty 基本就这堆)

在 MSTSC 客户端(高级 → 体验)里,我让默认选项是:

  • 勾选 “检测连接质量自动调整”
  • 开启 “持久位图缓存”
  • 其他视觉特效按 GPO 统一控制,避免用户自作聪明改坏。

六、运维侧的隐性工作(别忽略)

  • 证书与 SNI:RD Web / RD Gateway / Broker 都替换为同一 FQDN 证书链,省掉 90% 的用户证书报错工单。
  • DNS 与健康检查:rdg.saas.example.hk 做 HTTP/443 与 UDP/3391 双向健康检测,发现单点异常时切退 TCP。
  • 时间同步:网关与域控统一 NTP,避免 Kerberos/NLA 偶发失败。
  • 登录画像:把 Microsoft-Windows-TerminalServices-LocalSessionManager/Operational 与 RemoteFX Network 计数器打到 Loki/Prom,方便复盘。

七、我踩过的坑 & 解决过程

UDP 看似通,实际抖动大

症状:用户“鼠标能动,但屏幕卡住一两秒”;

处理:在客户端侧 策略禁用 UDP(只走 443/TCP),立即稳定;同时在边界做区域化策略,华南保留、华北关闭。

RDS 许可未配置完全

症状:120 天宽限期后,用户随机被踢;

处理:确认 RDS Per User、CAL 导入与分配,Set-RDLicenseConfiguration 后重启相关服务。

证书不匹配

症状:连接时报“证书错误”,用户恐惧;

处理:统一证书,网关管理器内HTTPS 绑定与 SSL 证书指向同一张,RD 部署属性里三处证书同时替换。

GPO 不生效(最阴险)

症状:用户桌面还是有背景/动画,带宽降不下来;

处理:在会话主机 OU 上启用用户策略环回(合并/替换),并强制刷新;这一步是很多人忽略的关键。

重定向放开过头

症状:有人把几百 MB 的图拖来拖去,瞬时带宽拉满;

处理:统一关闭盘符重定向,只保留剪贴板文本;对少数需要文件传输的人开单独安全通道(SFTP/内网中转)。

八、完整的可复用清单(我现在上线必做)

系统/角色

  •  CB01/SH01/SH02/GW01 角色安装、补丁一致
  •  New-RDSessionDeployment 成功、集合建立、RemoteApp 发布
  •  RD Licensing 设置 Per User,CAL 到位
  •  RD Gateway FQDN + 证书 + CAP/RAP 策略生效

图形与视觉

  •  禁用 AVC 4:4:4;启用连接质量自动检测
  •  颜色深度 16bpp;禁桌面背景/字体平滑/动画
  •  位图持久缓存开启

传输策略

  •  区域化 UDP 策略(华南开、华北关)
  •  443/TCP 健康检测常开,发现 UDP 异常自动降级

重定向/多媒体

  •  关闭打印机/盘符重定向
  •  音频不播放、不采集;视频服务器端解码

会话治理

  •  空闲 30 分钟断开;断线 8 小时清理
  •  Loopback 处理启用;GPO RSOP 验证通过

可观测

  •  采集 RemoteFX Network、RDP-UDP、登录事件
  •  p50/p95 带宽、输入延迟、丢包趋势面板

九、附:我常用的监控计数器(PerfMon)

RemoteFX Network:

  • Average Encoding Time, Frames Skipped/Second, Total Bytes Sent

TCPv4:

  • Segments Retransmitted/sec, Connections Established

RDP-UDP:

  • Datagrams Sent/sec, Datagrams Retransmitted/sec

Process(mstsc / rdpshell):

  • Handle Count, Private Bytes

抓这些就够你定位 80% 的体验问题。

十、凌晨 4:35,噪声与静默

我从机房走出来时,天还没亮。手机上最后一条报警收敛成绿,运营群也安静了。带宽曲线像被按住的弹簧,人均 p95 从 3.2Mbps 掉到 1.2Mbps,最终稳定在 0.8~1.6Mbps。

后来新同事问我:“这套 RDS 方案的关键是什么?”
我说:不是某一个魔法开关。是策略组合、是按地区的差异化传输、是敢于牺牲一点点‘好看’,保住‘好用’。

如果你也在凌晨的机房里和带宽博弈,愿这份笔记能让你少走几步弯路。

附录:一键回滚 / 调整的两段脚本

A. 改回“更清晰但更耗带宽”的配置(谨慎)

# 打开 AVC 4:4:4 & 32bpp(只在带宽很充足的专线环境使用)
Set-RDSessionCollectionConfiguration `
  -CollectionName "SaaS-Session" `
  -ConnectionBroker "CB01.domain.hk" `
  -CustomRdpProperty @"
session bpp:i:32
"@

# 组策略里把“优先使用 H.264/AVC 444 图形模式”设置为“已启用”

B. 在问题区域彻底关掉 UDP(只走 443/TCP)

# 客户端侧(通过 GPO 下发)
# 用户配置 → 管理模板 → Windows 组件 → 远程桌面服务 → 远程桌面连接客户端
# “关闭 UDP”:已启用
目录结构
全文