5.2. Diameter 对等发现 (Diameter Peer Discovery)
允许动态发现 Diameter 代理 (agent) 可以简化并增强 Diameter 服务的部署稳健性. 为促进 Diameter 对等发现的可互操作实现, 下文描述下列机制: 手工配置与 DNS. 二者均基于既有 IETF 标准. 所有 Diameter 实现必须同时支持这两种机制, 可以任选其一使用.
可能在两种场景下进行 Diameter 对等发现. 第一种是 Diameter 客户端需要发现第一跳 Diameter 代理. 第二种是 Diameter 代理需要发现另一代理以继续处理某次 Diameter 操作. 两种情况下, 建议采用下列「搜索顺序」:
-
Diameter 实现查询其静态 (手工) 配置的 Diameter 代理位置列表. 若存在且响应, 则使用这些位置.
-
Diameter 实现对特定域中的服务器执行 NAPTR 查询. 实现须事先知道在哪个域中查找 Diameter 代理, 例如可从需要执行 Diameter 操作所依据的网络接入标识符 (NAI) 中的「域」推断.
Diameter 中对 NAPTR 的用法遵循 S-NAPTR DDDS 应用 [RFC3958], 其中 SERVICE 字段包含所需应用及所支持应用协议的标签. Diameter 应用的应用服务标签 (application service tag) 为 aaa, 所支持应用协议标签为 diameter.tcp, diameter.sctp, diameter.dtls 或 diameter.tls.tcp [RFC6408].
客户端可按 S-NAPTR DDDS 应用 [RFC3958] 定义的解析过程查找匹配的 SRV, A 或 AAAA 记录以得到合适对等端. NAPTR 替换字段中的域后缀应当与原始查询的域一致. 示例见附录 B.
- 若未找到 NAPTR 记录, 请求方直接查询下列 SRV 记录之一: TCP 上的 Diameter 使用
_diameter._tcp.realm, TLS 上的 Diameter 使用_diameters._tcp.realm, SCTP 上的 Diameter 使用_diameter._sctp.realm, DTLS 上的 Diameter 使用_diameters._sctp.realm. 若找到 SRV 记录, 请求方可按 [RFC2782] 的规则对 SRV 中目标主机名做地址记录查询 (A 与/或 AAAA). 若未找到 SRV 记录, 请求方放弃.
若服务器使用站点证书 (site certificate), NAPTR 查询中的域名与替换字段中的域名都必须能够基于服务器在 TLS/TCP 与 DTLS/SCTP 或互联网密钥交换协议 (IKE) 握手中给出的站点证书验证为有效. 同理, SRV 查询中的域名与 SRV 记录目标中的域名都必须能基于同一张站点证书验证为有效. 否则, 攻击者可能篡改 DNS 记录使替换值指向另一域, 客户端将无法分辨这是预期行为还是攻击结果.
此外, Diameter 对等端必须核查所发现的对等端经授权可承担其角色. 仅凭 IKE 或 TLS/TCP 与 DTLS/SCTP 的认证, 或仅凭 DNSSEC 校验 DNS 资源记录, 并不足以得出此结论. 例如, Web 服务器可能持有有效的 TLS/TCP 与 DTLS/SCTP 证书, DNS 中也可能有受保护记录, 但这并不表示其被授权充当 Diameter 服务器.
授权可通过例如配置 Diameter 服务器认证机构 (CA) 实现. 服务器 CA 向 Diameter 服务器签发证书, 在扩展密钥用途扩展 [RFC5280] 中用对象标识符 (OID) 标明主体为 Diameter 服务器. 该证书随后在 TLS/TCP, DTLS/SCTP 或 IKE 安全协商中使用. 但需注意, 撰写本文时尚不存在专门的 Diameter 服务器 CA.
动态发现的对等端会在对等表 (peer table, 见第 2.6 节) 中产生一条记录. 通过 DNS 创建的记录必须在 DNS 生存时间 (TTL) 内过期 (或刷新). 若在本地域外发现对等端, 还要为该对等端的域创建路由表项 (见第 2.7 节). 路由表项的过期时间必须与对等端记录的过期时间一致.