跳至正文

[教程]SRV记录制作

本文使用的平台:Cloudflare

SRV记录(摘自Wikipedia)

SRV记录(英语:Service Record,中文又名服务定位记录)是域名系统中用于指定服务器提供服务的位置(如主机名和端口)数据。此数据于RFC 2782中定义,类型代码为33。部分协议,如会话发起协议(SIP)及可扩展消息与存在协议(XMPP)通常需要服务记录的支持。

服务记录的格式为:(Linux dig出来的记录)

_服务._协议.名称. TTL 类别 SRV 优先级 权重 端口 主机.
  • 服务:服务的符号名称。
  • 协议:服务的传输协议,通常为TCPUDP
  • 名称:此记录生效的所在域名,以半角逗号结尾。
  • TTL:标准DNS存活时间值。
  • 类别:标准DNS类别值(此值总为IN)。
  • 优先级:目标主机的优先级,值越小越优先。
  • 权重:相同优先度记录的相对权重,值越大越优先。
  • 端口:服务所在的TCP或UDP端口。
  • 主机:提供服务的规范主机名,以半角句号结尾。

SRV服务列表(摘自Wikipedia)

SRV记录通常与下列标准化传输协议同时使用:

Cloudflare上SRV解析处理

Cloudflare中SRV解析截图
  • 名称:用户连接的域名
  • 服务:对应的SRV解析服务,需要对照上文的表选择
  • 协议:你SRV服务需要走的连接方式
  • TTL:解析修改生效时间
  • 优先级:解析先后顺序,数字越大,解析越后
  • 权重:在同一优先级情况下的负载均衡分配,权重越高,负载越大
  • 端口:目标解析使用的端口
  • 目标:一个解析(必须是A、AAAA解析,否则该SRV无效)

例子:

这时的srv解析情况为mc.srv.example.com使用Minecraft服务通过TCP协议mc.example.com:39999映射出来,用户只需输入srv解析mc.srv.example.com(不需要另加端口)就会指向到mc.example.com:39999

优先级与权重的关系

假设我们有这些解析

# _服务._协议.名称.            TTL  类别 SRV 优先级   权重   端口 主机.
_sig._tcp.box.example.com.   86400 IN    SRV 10       80     5060 main.box.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 10       10     5060 box.1.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 10       5      5060 box.2.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 10       5      5060 box.3.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 20       70     5060 main.2.box.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 20       10     5060 box2.1.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 20       10     5060 box2.2.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 20       10     5060 box2.3.example.com.
_sig._tcp.box.example.com.   86400 IN    SRV 30       0      5060 box.all.server.is.down.example.com.

以这些解析为例,我们不难看出box.example.com对应多个主机目标,因为优先级为10/20/30,所以设备默认先解析优先级为10的解析,即main.box.example.com,box.1.example.com,box.2.example.com,box.3.example.com,其中,设备优先使用权重较大的解析,所以优先使用main.box.example.com,因此,设备在使用该SRV解析时会有80%的时间连接在main.box.example.com10%的时间用在box.1.example.com上,剩下的10%的时间分别用在box.2.example.com,box.3.example.com上并共享负载(权重都为5)。

此时,如果主机main.box.example.com进入维护状态不可使用,那么设备将优先连入box.1.example.com,然后再连入box.2.example.com,box.3.example.com共享负载(权重都为10)。

如果优先级为10的主机都进入了不可使用的状态,那么设备将去连接优先级为20的解析。以此类推,如果优先级为10/20的主机全部都不可使用。那么就会解析优先级为30的主机(因为优先级为30的只有一个解析,所以权重可以设成0)。