tags:
- 华为云
- Windows Server
- 远程桌面
- RDP
- 安全组
华为云 Windows 服务器远程桌面自定义端口排障指南
一、问题现象
一台华为云 Windows 服务器出现了以下情况:
- 通过云堡垒机可以正常进入服务器;
- Windows 的远程桌面服务处于运行状态;
- 华为云安全组和云防火墙看起来都已经放行;
- 但是本地电脑仍然无法通过远程桌面连接。
这类问题很容易让人误以为是远程桌面服务故障。实际上,堡垒机和本地电脑走的是两条不同的网络路径:
text
堡垒机:堡垒机 → VPC 内网 → 云服务器
本地电脑:本地出口公网 IP → Internet → 云防火墙 → EIP/公网映射
→ 安全组 → Windows 防火墙 → RDP 服务
因此,"堡垒机能连接"只能说明服务器和内网路径基本正常,并不能证明公网入口也配置正确。
二、本次案例的关键原因
服务器没有继续使用 RDP 默认端口 3389,注册表中的端口值为:
text
PortNumber REG_DWORD 0xc4d5
0xc4d5 是十六进制,换算成十进制为:
text
0xc4d5 = 51389
也就是说,服务器实际使用的远程桌面端口是 51389。本地连接、安全组、云防火墙和 Windows 防火墙必须全部围绕这个端口配置。
正确的远程桌面地址格式为:
text
服务器公网IP:51389
如果只填写公网 IP,远程桌面客户端会默认访问 3389,自然无法连接。安全组中即使放行了 3389,对当前服务也没有作用。
此外,安全组规则如果使用 /32 白名单,规则中的源地址必须是本地电脑当前的公网出口 IP,而不是电脑的局域网地址。家庭宽带、公司网络、VPN 和手机热点都可能改变出口 IP。
三、服务器端检查
1. 检查远程桌面服务
在服务器的 CMD 中执行:
bat
sc query TermService
如果在 PowerShell 中执行,建议写成:
powershell
sc.exe query TermService
正常情况下应看到:
text
STATE : 4 RUNNING
2. 查看实际 RDP 端口
执行:
bat
reg query "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber
如果返回十六进制值,可以在 PowerShell 中换算:
powershell
[Convert]::ToInt32("c4d5", 16)
输出:
text
51389
3. 确认端口正在监听
仅仅看到服务处于 RUNNING 还不够,还要确认系统真的监听了目标端口:
bat
netstat -ano | findstr :51389
正常结果类似:
text
TCP 0.0.0.0:51389 0.0.0.0:0 LISTENING
或者:
text
TCP [::]:51389 [::]:0 LISTENING
也可以使用 PowerShell:
powershell
Get-NetTCPConnection -LocalPort 51389 -State Listen
如果没有任何监听结果,说明端口设置尚未生效或远程桌面监听器存在异常。修改端口后通常需要重启远程桌面服务或服务器。执行下面的命令会中断现有远程桌面会话,应确保还能通过堡垒机或控制台重新进入:
powershell
Restart-Service TermService -Force
4. 检查 Windows 防火墙
为 TCP 51389 创建入站允许规则:
powershell
New-NetFirewallRule `
-DisplayName "RDP TCP 51389" `
-Direction Inbound `
-Protocol TCP `
-LocalPort 51389 `
-Action Allow
可以进行本机端口测试:
powershell
Test-NetConnection 127.0.0.1 -Port 51389
如果显示:
text
TcpTestSucceeded : True
说明服务器本机的 RDP 监听和 TCP 防火墙路径基本正常。
RDP 还可以使用同端口的 UDP 来改善连接体验,但 UDP 并不是建立基本远程桌面连接的必要条件。需要时可以额外添加:
powershell
New-NetFirewallRule `
-DisplayName "RDP UDP 51389" `
-Direction Inbound `
-Protocol UDP `
-LocalPort 51389 `
-Action Allow
四、配置华为云安全组
远程桌面是从本地电脑主动访问服务器,因此主要配置安全组的入方向规则:
| 配置项 | 建议值 |
|---|---|
| 方向 | 入方向 |
| 策略 | 允许 |
| 协议 | TCP |
| 端口 | 51389 |
| 源地址 | 本地当前公网 IP/32 |
例如,本地当前公网出口 IP 为 203.0.113.10,源地址应填写:
text
203.0.113.10/32
注意:上面的地址只是文档示例,不能直接照抄。
可以在浏览器中搜索"我的 IP"查询当前公网出口 IP。不要填写 192.168.x.x、10.x.x.x 或 172.16.x.x 之类的局域网地址。
是否还要配置出方向规则?
通常不需要为这次 RDP 连接单独添加出方向规则。安全组是有状态的,已允许入站连接的响应流量会自动放行。出方向保持默认允许即可。
只有在还配置了无状态网络 ACL、第三方防火墙,或者设置了特殊的严格出站策略时,才需要进一步检查返回方向规则。
临时排障方法
如果无法确定是否为源 IP 不匹配,可以短时间将源地址改为:
text
0.0.0.0/0
如果修改后立即能够连接,基本可以确定是原来的源 IP 白名单不正确。测试完成后应立刻恢复为自己的公网 IP /32,不要长期向整个互联网开放远程桌面端口。
五、检查云防火墙和公网映射
如果服务器的 EIP 已纳入华为云防火墙防护,还需要确保云防火墙允许以下流量:
text
来源:本地当前公网 IP
目的:服务器 EIP
协议:TCP
目的端口:51389
动作:允许
安全组和云防火墙是不同的控制层。只配置其中一层,另一层仍然拒绝时,连接依旧无法通过。
如果公网 IP 不是直接绑定在云服务器上,而是经过 NAT 网关,还要检查 DNAT 规则是否正确,例如:
text
公网 EIP:51389 → 云服务器私网 IP:51389
公网端口与服务器端口也可以不同,但连接时必须使用 DNAT 规则中的公网端口。
六、从本地电脑验证公网端口
在本地 Windows PowerShell 中执行:
powershell
Test-NetConnection 服务器公网IP -Port 51389
重点观察:
text
TcpTestSucceeded
结果为 True
说明公网 TCP 路径已经连通。此时如果远程桌面客户端仍然报错,应继续检查:
- 用户名和密码;
- 账号是否有远程登录权限;
- 网络级别身份验证(NLA);
- 远程桌面授权和会话限制;
- 客户端是否确实填写了
公网IP:51389。
结果为 False
优先检查:
- 是否使用了正确的公网 IP;
- 服务器是否监听 TCP 51389;
- 安全组是否放行 TCP 51389;
- 安全组源地址是否等于本地当前公网出口 IP;
- 云防火墙是否放行相同的 IP、EIP 和端口;
- 是否存在 NAT/DNAT 端口映射;
- 本地是否启用了 VPN、代理或更换了网络;
- 公司网络或运营商是否限制了该端口。
可以再使用手机热点测试一次。如果热点可以连接、原网络不能连接,问题通常位于本地网络出口或源 IP 白名单,而不是服务器。
七、正确发起远程桌面连接
在"远程桌面连接"的"计算机"输入框中填写:
text
服务器公网IP:51389
也可以按 Win + R,执行:
text
mstsc /v:服务器公网IP:51389
八、推荐排障顺序
建议严格按照从内到外的顺序排查:
text
TermService 是否运行
↓
注册表端口是否为预期值
↓
服务器是否监听 TCP 51389
↓
Windows 防火墙是否允许 TCP 51389
↓
安全组入方向是否允许 TCP 51389
↓
源地址是否为本地当前公网 IP
↓
云防火墙是否允许访问 EIP:51389
↓
NAT/DNAT 映射是否正确
↓
本地 Test-NetConnection 是否成功
↓
使用 公网IP:51389 发起 RDP 连接
这种排查方式可以快速定位问题究竟发生在服务器、Windows 防火墙、云侧访问控制,还是本地网络。
九、安全建议
远程桌面端口暴露到公网存在扫描、爆破和漏洞利用风险,建议:
- 安全组源地址只允许可信公网 IP
/32; - 不要长期使用
0.0.0.0/0开放 RDP; - 使用强密码,并限制可远程登录的账号;
- 启用账户锁定策略和登录审计;
- 及时安装 Windows 安全更新;
- 优先通过 VPN、堡垒机或零信任接入访问服务器;
- 修改默认端口只能减少普通扫描,不能代替真正的访问控制。
十、总结
本案例最值得注意的不是"端口有没有放行",而是每一层使用的端口和源地址是否完全一致:
text
RDP 实际监听端口:51389
Windows 防火墙:允许 TCP 51389 入站
安全组:允许本地当前公网 IP 访问 TCP 51389
云防火墙:允许同一来源访问服务器 EIP 的 TCP 51389
远程桌面客户端:连接 公网IP:51389
安全组通常只需要配置入方向,返回流量由有状态连接自动放行。堡垒机能够进入服务器,只能证明内网访问链路正常;本地电脑能否连接,还取决于公网入口上的每一层配置。