在某些远程桌面部署场景中,希望用户只需输入一个简洁的域名即可连接,而不必手动输入端口号。这不仅能提升使用体验,也能让端口变更对用户透明。DNS SRV 记录便能实现这一目标。
什么是 SRV 记录
SRV(Service)记录是一种 DNS 资源记录类型,用于指定某个服务所在的主机和端口。其结构为:
_service._proto.name. TTL IN SRV priority weight port target.
- service:服务名称,例如 RDP 使用
_msrdp - proto:协议类型(通常为
_tcp或_udp) - name:该服务所在的域名
- priority:优先级,数字越小优先级越高
- weight:同优先级时的权重,用于负载分配
- port:服务监听的端口
- target:提供服务的目标主机(FQDN)
RDP 对 SRV 记录的支持
从 Windows 7 与 Windows Server 2008 R2 起,RDP 客户端(mstsc.exe)支持在解析域名时自动查询 _msrdp._tcp.<域名> 的 SRV 记录,以确定应连接的目标主机与端口。这意味着,只需配置正确的 SRV 记录,用户就可以在客户端输入域名而无需附加端口号。
子域名场景配置
假设希望使用 rdp.example.net 作为远程桌面入口,实际的远程桌面服务器 IP 为 203.0.113.50,监听端口为 24500。
- 添加 A 记录 cssCopyEdit
rdp.example.net. IN A 203.0.113.50A 记录确保rdp.example.net可以解析到服务器的 IP 地址。 - 添加 SRV 记录 yamlCopyEdit
_msrdp._tcp.rdp.example.net. 3600 IN SRV 0 0 24500 rdp.example.net.该记录告诉 RDP 客户端:- 服务类型为
_msrdp - 协议为
_tcp - 主机是
rdp.example.net - 端口为
24500
- 服务类型为
客户端在连接 rdp.example.net 时,会自动查询 _msrdp._tcp.rdp.example.net,获取目标主机与端口后直接发起 TCP 连接。
验证 SRV 记录
配置完成并生效后,可以通过以下命令验证:
nslookup -type=SRV _msrdp._tcp.rdp.example.net
输出中应包含配置的端口和目标主机信息。
SRV 记录与反向代理的区别
很多人会误以为 SRV 记录相当于 DNS 层的反向代理,其实并非如此。
| 特性 | SRV 记录 | 反向代理 |
|---|---|---|
| 作用层级 | DNS 解析层 | 应用层 / 网络层 |
| 是否转发流量 | 否,客户端直接连目标主机 | 是,代理服务器转发流量 |
| 典型用途 | 服务发现、端口公布 | 流量中转、负载均衡、缓存 |
SRV 记录仅在 解析阶段 告诉客户端应连接的主机与端口,客户端会直接与目标服务器建立连接,不经过任何中间转发节点。
适用场景
- 隐藏非标准端口:用户无需输入端口号,避免暴露服务端口细节。
- 多服务器负载分配:通过优先级和权重在多台服务器间分流。
- 服务迁移:变更服务端口或主机时,用户端配置无需调整。
通过合理配置 A 记录与 SRV 记录,可以在不引入额外中间层的前提下,实现远程桌面的便捷访问,并为后续的多服务器部署预留扩展空间。