在某些远程桌面部署场景中,希望用户只需输入一个简洁的域名即可连接,而不必手动输入端口号。这不仅能提升使用体验,也能让端口变更对用户透明。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

  1. 添加 A 记录 cssCopyEditrdp.example.net. IN A 203.0.113.50 A 记录确保 rdp.example.net 可以解析到服务器的 IP 地址。
  2. 添加 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 记录,可以在不引入额外中间层的前提下,实现远程桌面的便捷访问,并为后续的多服务器部署预留扩展空间。

Leave a Reply

Your email address will not be published. Required fields are marked *