在配置企业级应用时,很多人会把域名解析只理解成IP地址和域名的对应关系。实际上,DNS系统还提供了一种更细粒度的资源记录类型,专门回答“某个服务到底跑在哪台主机的哪个端口上”。这就是SRV记录。它不像A记录只给出一个IP,也不像CNAME只做别名跳转,而是把服务名、传输协议、目标主机、端口、优先级和权重全部打包在一起,方便客户端自动发现服务。如果你的即时通讯、SIP电话或企业邮箱客户端经常提示找不到服务器,很可能就是SRV记录缺失或格式写错。

一、SRV记录的含义与字段拆解
SRV记录的全称是Service locator,属于DNS记录中的服务定位类型。早期DNS只能回答主机名对应的IP,但要连接某个服务,客户端还需要知道端口号和协议。SRV记录就是用来补齐这个信息的。例如在SIP语音通信中,客户端需要先查询_sip._tcp.ipipp.com的SRV记录,才能知道应该连接sip.ipipp.com的5060端口,而不是默认猜测一个地址。
一条标准SRV记录由服务名、协议、域名、TTL、记录类型、优先级、权重、端口和目标主机组成。格式如下:
_service._proto.ipipp.com. 3600 IN SRV 10 60 5060 sip.ipipp.com.
其中_service是服务标识,例如_sip、_xmpp、_autodiscover;_proto表示传输协议,常用_tcp或_udp。后面的域名部分一般写完整域名,并以点结尾。TTL是缓存时间,IN表示Internet类,SRV是记录类型。再后面依次是优先级、权重、端口和目标主机。
优先级数值越小越优先,客户端会先尝试优先级低的记录。权重只在优先级相同的多条记录之间起作用,数值越大被选中的概率越高,通常用于负载均衡。目标主机必须是一个有A记录或AAAA记录的主机名,不能直接填IP地址。端口则明确告诉客户端连接哪个端口,这也是SRV记录区别于A记录的核心价值。
二、如何设置SRV记录:主流平台操作步骤
不同域名注册商和DNS托管平台添加SRV记录的界面略有差异,但核心字段是相通的。以常见的控制台为例,进入域名解析页面后,添加记录时选择类型为SRV。一般需要填写主机记录和服务参数。主机记录通常写成_sip._tcp或_autodiscover._tcp,系统会自动补全域名后缀。
记录值部分需要按顺序填写优先级、权重、端口和目标主机,中间用空格分隔。例如希望SIP服务指向sip.ipipp.com的5060端口,优先级设为10,权重设为60,记录值可以写:
10 60 5060 sip.ipipp.com.
有些平台会提供独立输入框,把优先级、权重、端口、目标主机分开填写,效果一致。需要特别注意的是,目标主机名在部分DNS系统中必须加末尾的点,表示绝对域名;如果不加,系统可能把它当作当前域名的子域处理,导致解析结果错误。建议统一写成完整域名并加点。
添加完成后,可以等待几分钟让记录生效。新记录通常TTL较短,但如果你修改了已有记录,可能要等旧缓存过期。企业场景建议先在测试域名上验证,确认无误后再写入正式域名。
三、实战案例:为SIP服务和邮箱自动发现配置SRV记录
假设公司域名为ipipp.com,计划部署一套SIP语音系统,服务器主机名为voice.ipipp.com,SIP信令端口为5060。客户端在登录时需要自动发现服务位置,这时就需要添加一条SRV记录。进入DNS管理后台,新增记录,类型选择SRV,主机记录填写_sip._tcp,记录值填写:
10 30 5060 voice.ipipp.com.
这里的优先级10表示只有一个服务节点时没有比较意义,权重30也无关紧要。如果后续扩容了第二台服务器,可以再加一条优先级相同的SRV记录,例如指向voice2.ipipp.com,端口5060,权重30,客户端就会按权重比例把请求分配到两台服务器上。如果需要主备切换,可以给备用服务器设置更高的优先级数值,比如20,这样只有主服务器不可用时客户端才会尝试备用节点。
另一个常见场景是Outlook或企业邮箱自动发现。某些邮件系统依赖_autodiscover._tcp记录来告诉客户端自动配置服务器。记录值可能是10 10 443 mail.ipipp.com.,具体端口取决于邮件服务商要求。添加后可在命令行验证:
dig SRV _sip._tcp.ipipp.com +short
输出类似:
10 30 5060 voice.ipipp.com.
如果看到类似结果,说明记录已生效。使用nslookup也可以:
nslookup -type=SRV _sip._tcp.ipipp.com
四、常见问题与注意事项
配置SRV记录时,最常见的问题是目标主机本身没有A记录或AAAA记录。如果目标主机无法解析到IP,即使SRV记录格式正确,客户端也无法建立连接。排查时可以先用dig A voice.ipipp.com +short确认目标主机解析正常。另一个高频问题是记录值中的目标域名没有加末尾的点,导致DNS把它理解成voice.ipipp.com.ipipp.com,解析自然失败。
优先级和权重的理解也容易出错。优先级不是权重,数值越大不代表越优先。正确逻辑是:数字越小优先级越高。权重只在优先级完全相同的记录之间参与随机选择,客户端会根据权重比例分配连接,但并不是严格的百分比,尤其当客户端实现不同时结果可能有偏差。不要用权重来做主备切换,主备逻辑应该用优先级实现。
此外,如果服务使用了TLS证书,目标主机名必须与证书签发的域名一致。例如SRV记录指向sip.ipipp.com,但证书只签发给voice.ipipp.com,客户端会报证书不匹配。端口设置也要与服务器实际监听端口一致,防火墙和云安全组需要放行对应TCP或UDP端口。
修改或删除SRV记录后,可能会因为旧的TTL缓存仍然生效。可以使用命令查询当前解析结果,或降低TTL后再进行变更。对于生产环境,建议先短TTL测试,确认稳定后再改回较长TTL。还要避免同一服务名和协议重复添加相互冲突的记录,有些DNS控制台会提示,但客户端行为可能不可预测。最好按服务规划好记录,保留变更日志,方便回滚。