深度解析DNS SRV记录:机制、场景、排查与配置规范

发布时间:2026-09-17 15:41:29

 

一、SRV记录的定义与来源

SRV记录主要用于定位提供特定服务的主机和端口。和A记录只提供域名到IP地址的映射不同,SRV记录同时提供服务类型、传输协议、端口号、优先级和目标主机等多层信息。SRV记录允许管理员为同一个域名配置多台服务器,在不修改客户端配置的前提下完成服务迁移,并可以指定某些主机作为主服务器、其他主机作为备用服务器。

 二、SRV记录的格式

SRV记录的标准格式如下:

_Service._Proto.Name TTL Class SRV Priority Weight Port Target

各字段的含义如下:

Service(服务名) :所需服务的符号名称,前面带下划线前缀,以避免与DNS中自然出现的标签发生冲突。例如,LDAP服务使用`_ldap`,SIP服务使用`_sip`。

Proto(协议) :传输层协议,通常为`_tcp`或`_udp`,同样带下划线前缀。

Name:提供服务的域名。

Priority(优先级) :目标主机的优先级,数值越小越优先。范围0至65535。

Weight(权重) :为相同优先级的条目指定相对权重,范围0至65535。权重值越高,被分配到的请求越多。

Port(端口) :服务监听的端口号。

Target(目标主机) :提供服务的服务器完全限定域名,必须指向已有的A记录或AAAA记录,不能是CNAME。

举例来说,一条用于LDAP服务的SRV记录可能如下所示:

_ldap._tcp.example.com. 86400 IN SRV 10 5 389 dc1.example.com.

 三、优先级和权重的选择机制

SRV记录区别于其他DNS记录的一个核心特征,是其内置的服务器选择机制。客户端在处理多条SRV记录时,遵循两个层次的逻辑。

第一层是优先级。客户端优先连接优先级数值最小的服务器。只有当所有高优先级服务器均不可达时,客户端才会降级到下一优先级组。RFC 2782建议优先级按10、20、30等间隔设置,为将来在现有服务器之间插入新的优先级层级预留空间。

第二层是权重。在同一优先级组内,客户端根据权重值按比例分配连接请求。RFC 2782定义了一个加权随机选择算法:将所有未排序的SRV记录按任意顺序排列,权重为0的记录排在列表最前面。随后在剩余记录中按权重比例选择目标。如果一台服务器的处理能力是另一台的三倍,管理员可以为前者配置三倍于后者的权重值。

需要注意的是,权重的负载均衡效果依赖于DNS记录的本地缓存机制,客户端在TTL有效期内使用的是缓存的记录列表,无法实时感知服务端地址的变化。

 四、SRV记录的典型应用

微软活动目录。微软活动目录的运行依赖SRV记录。域控制器安装完成后,会在DNS区域中自动注册一组SRV记录,包括_kerberos._tcp、_ldap._tcp和_ldap._tcp.dc._msdcs等。客户端通过这些记录定位可用的域控制器,本地配置中不需要写死服务器地址。域控制器还会在_msdcs子域中注册额外记录,用于跨站点的域控制器查找。

SIP与VoIP通信。RFC 3263规定了SIP协议使用SRV记录定位服务器的流程。企业VoIP系统通过_sip._tcp或_sip._udp记录,把客户端引导到对应的SIP代理和端口。使用微软Teams或Skype for Business时,客户端会查询_sipfederationtls._tcp和_sip._tls来找到云端入口。

LDAP目录服务。企业统一认证系统一般基于LDAP协议。客户端查询_ldap._tcp.example.com的SRV记录,获取目录服务器的地址和端口(默认389)。服务端扩展或迁移时,只需更新DNS记录,客户端配置文件不需要改动。

MySQL数据库。MySQL官方支持通过DNS SRV记录连接服务器。多台MySQL实例提供相同服务时,管理员可以配置SRV记录实现故障转移和负载均衡。客户端按优先级和权重选择可用的MySQL服务器,增减节点时只更新DNS记录即可。

其他协议。XMPP协议使用_xmpp-server._tcp和_xmpp-client._tcp记录定位消息服务器。Postfix从3.8.0版本开始支持DNS SRV记录做负载分配。Minecraft Java版同样支持SRV记录,玩家用域名直连服务器,不用记端口号。

 五、SRV记录的查询与验证

验证SRV记录是否配置正确,常用的命令行工具是`nslookup`和`dig`。

在Windows环境中,打开命令提示符后输入`nslookup`,然后执行:

set type=SRV

_ldap._tcp.dc._msdcs.example.com

系统会返回该域控制器对应的SRV记录,包含优先级、权重、端口和目标主机信息。

在Linux或macOS环境中,使用`dig`命令:

dig SRV _ldap._tcp.example.com

也可以使用`dig srv _kerberos._tcp.example.com`查询Kerberos服务记录。

配置SRV记录时的常见问题包括:主机名中漏掉下划线(如将`_ldap`写成`ldap`),目标主机末尾没有点号,以及服务类型前缀与实际协议不匹配。活动目录的SRV记录可以通过查看`%systemroot%\System32\Config`目录下的`Netlogon.dns`文件进行验证。

 六、SRV记录的安全考量

SRV记录本身是DNS查询的一部分,在未启用DNSSEC的情况下,攻击者可以通过DNS缓存投毒伪造SRV记录,将客户端引导至恶意服务器。伪造的SRV记录可能将SIP呼叫重定向到外部代理,或者将LDAP查询引导至仿冒的目录服务器。

RFC 7673规定了使用DNSSEC保护SRV记录的方法。按照该规范,发布的SRV记录以及对应的A和AAAA记录必须使用DNSSEC进行签名,同时还应至少发布一条TLSA记录用于验证服务器证书。如果DNSSEC未启用,SRV记录的委托行为本身不具备安全性保障。

对于企业DNS管理员来说,在部署SRV记录的同时启用DNSSEC签名,是保障服务发现过程可信的重要措施。

 七、配置建议

结合实际的运维经验,以下几条建议可以帮助管理员更好地管理SRV记录:

优先级值建议按10的倍数递增,比如10、20、30。这样在需要在现有服务器之间插入新的层级时,有足够的数值空间可以使用。

权重值需要根据服务器的实际处理能力来分配。性能接近的服务器可以配置相同的权重,性能差异较大的服务器应按处理能力的比例设置权重。

TTL值建议设置为600秒左右。这样在需要修改记录时能够较快生效,同时避免TTL过短导致的DNS查询压力增大。

配置完成后,务必使用`nslookup`或`dig`进行验证。重点检查主机名中的下划线是否完整、目标主机是否以点号结尾、端口号是否正确,以及服务类型前缀是否与协议规范一致。







推荐阅读:

域名NS记录修改全攻略:规则、误区、实操流程和常见问题

详解DNS解析中的TXT记录:定义、用途与实操指南

修改DNS解析记录多久生效,影响生效时间的因素有哪些?

DNS记录中的“主机记录”怎么填写?从概念到实践的全解析

域名过期后,DNS解析记录会保留、会生效吗?一文讲清楚

上一篇:什么是DNS隧道攻击?原理、检测方法和应对策略
免费试用
联系我们