SRV 记录

DNS 服务(SRV)记录是一种规范,用于定义指定服务的服务器位置,包括主机名和端口号。与大多数仅提供服务器名称或 IP 地址的 DNS 记录不同,SRV 记录同时包含目标服务器和服务运行的具体端口,以及用于负载均衡和故障转移的优先级和权重值。

How it works

SRV 记录允许应用程序在域中发现服务,无需手动配置。它们通常用于需要指定特定端口的服务,如 VoIP、即时通讯(XMPP)、电子邮件(SMTP)和目录服务(LDAP)。通过查询 SRV 记录,客户端可以自动找到服务的正确服务器和端口。

SRV 记录包含四个控制服务路由和负载均衡的关键值: **记录格式:** SRV 记录遵循格式:_service._proto.name - _service:服务的符号名称(例如 _xmpp、_sip、_ldap) - _proto:传输协议(通常是 _tcp 或 _udp) - name:域名 示例:_xmpp._tcp.example.com **优先级(数值越低 = 优先级越高):** 客户端应首先联系优先级值最低的服务器。如果该服务器不可用,则回退到优先级值较高的服务器。例如,如果您有优先级为 10、20 和 30 的服务器,无论权重值如何,始终首先尝试优先级为 10 的服务器。 **权重(负载均衡):** 当多个服务器具有相同优先级时,权重决定每个服务器应接收的流量比例。权重是相对值 - 如果三个具有相同优先级的服务器的权重分别为 60、30 和 10(总计 100),它们将分别接收大约 60%、30% 和 10% 的请求。 **端口:** 服务在目标服务器上运行的 TCP 或 UDP 端口号。这是 SRV 记录的独特之处 - 它们同时指定主机和确切端口。 **目标:** 提供服务的服务器主机名。这必须是 A 或 AAAA 记录(而不是 CNAME)。

Key Points

  • 与其他 DNS 记录不同,SRV 记录同时包含主机名和端口号
  • 格式为 _service._proto.name(例如 _xmpp._tcp.example.com)
  • 优先级决定联系顺序(数字越小越优先),权重决定相同优先级之间的负载分配
  • 常用于 VoIP、即时通讯、电子邮件和目录服务
  • 目标必须指向具有 A 或 AAAA 记录的主机名,而不是 CNAME

Common Use Cases

  • VoIP 和 SIP 服务: SIP(会话发起协议)使用 SRV 记录来定位 VoIP 服务器,允许客户端自动发现用于语音通话的正确服务器和端口
  • 即时通讯(XMPP/Jabber): XMPP 服务使用 SRV 记录实现联合消息传递,允许服务器发现并连接到其他 XMPP 服务器
  • Microsoft Active Directory: Active Directory 广泛使用 SRV 记录进行服务发现,允许客户端查找域控制器、LDAP 服务器和 Kerberos 服务
  • 电子邮件提交: _submission._tcp SRV 记录可以指定邮件提交服务端口,补充电子邮件配置中的 MX 记录

code SRV 记录配置示例

TypeHost / NameValue / Points toTTL
SRV_xmpp._tcp10 60 5222 server1.example.com3600
SRV_xmpp._tcp10 40 5222 server2.example.com3600
SRV_xmpp._tcp20 0 5222 backup.example.com3600
SRV_sip._tcp10 0 5060 voip.example.com3600

* SRV 记录指定服务、协议、优先级、权重、端口和目标。优先级越低 = 优先级越高。

Frequently Asked Questions

SRV 记录中的优先级和权重有什么区别?expand_more
优先级决定首先联系哪些服务器 - 客户端始终首先尝试优先级值最低的服务器。权重仅在具有相同优先级的服务器之间起作用,决定每个服务器应接收的流量比例。例如,如果服务器 A 的优先级为 10,服务器 B 和 C 的优先级为 20,则无论任何权重值如何,始终首先尝试服务器 A。只有当服务器 A 不可用时,权重才会在选择 B 和 C 之间发挥作用。
为什么目标不能是 CNAME?expand_more
根据 DNS 规范(RFC 2782),SRV 记录的目标必须是具有 A 或 AAAA 记录的主机名,而不是 CNAME。这是因为允许 CNAME 会产生额外的查询复杂性和潜在的循环依赖。如果您需要指向不同的主机名,请先为目标主机名创建 A 记录,然后将 SRV 记录指向该 A 记录。
我的网站需要 SRV 记录吗?expand_more
不需要,标准网站不使用 SRV 记录 - 它们使用 A 记录或 CNAME 记录。SRV 记录用于需要同时指定主机名和端口号的特定服务,如 VoIP(SIP)、即时通讯(XMPP)、电子邮件提交或目录服务(LDAP)。如果您只是托管网站,只需要 A/AAAA 记录和可能的 CNAME 记录。
应用程序如何知道要查找 SRV 记录?expand_more
支持 SRV 记录的应用程序经过专门编程以查询它们。例如,为 user@example.com 配置的 XMPP 客户端将自动查询 _xmpp-client._tcp.example.com SRV 记录以查找消息服务器。应用程序根据其功能知道要查找的服务名称和协议。并非所有应用程序都支持 SRV 记录 - 必须在软件中明确构建支持。
我可以将 SRV 记录用于 HTTP/HTTPS 服务吗?expand_more
虽然在技术上可行,但 SRV 记录通常不用于 HTTP/HTTPS,因为 Web 浏览器默认不查询 SRV 记录。浏览器期望网站可以在 URL 中主机名的标准端口(HTTP 为 80,HTTPS 为 443)上访问。SRV 记录最适合客户端应用程序设计用于查询它们的服务,如 VoIP 客户端、消息客户端或企业软件。