NAPTR 是什么
NAPTR(Naming Authority Pointer,TYPE 35)用 order、preference、flags、service、regexp、replacement 六个字段,把查询的名字按正则规则转换成另一个域名或 URI 形式。它是 DDDS(动态委托发现系统)的通用机制,最经典的用法是 ENUM:把电话号码映射成 SIP 地址(RFC 3403)。
基本信息
| 类型 | NAPTR(TYPE 35) |
|---|---|
| 字段 | order、preference、flags、service、regexp、replacement |
| 规范 | RFC 3403(DDDS) |
| 经典应用 | ENUM(RFC 6116)、SIP 号码路由 |
| 查询命令 | dig +short <名字> NAPTR |
| 与 SRV 关系 | 常串联使用:先 NAPTR 定位服务,再 SRV 找端点 |
典型使用场景
- ENUM 排障:号码到 SIP 地址的映射不生效
- 语音与 SIP 网关对接:确认 E.164 号码在 e164.arpa 下的记录
- 理解 DDDS 规则:多个候选如何按 order 与 preference 排序
- 协议研究:厘清 NAPTR 与 SRV 的分工差异
- 电信系统迁移:核对号码路由记录是否完整搬移
- 自动化巡检:为关键号码配置解析可用性监控
ENUM 查询示例
ENUM 查询示例
# 查询 E.164 号码 +8612345678904 对应的 ENUM 记录(号码需倒序)
dig +short 4.9.0.8.7.6.5.4.3.2.1.6.8.e164.arpa NAPTR
# 100 10 "u" "E2U+sip" "!^.*$!sip:+8612345678904@example.com!" .
# order=100 preference=10 flags=u(结果是一个 URI) service=E2U+sipNAPTR 字段读法
| 字段 | 含义 | 要点 |
|---|---|---|
| order | 处理顺序,小者优先 | 同一 order 内再看 preference |
| preference | 同组内优先级,小者优先 | 数值越小越先尝试 |
| flags | u 表示结果是 URI、s 表示下一步查 SRV | 决定如何解释输出 |
| service | 服务类型,如 E2U+sip | 用于筛选可用服务 |
| regexp | 改写规则,用感叹号分隔 | 与 replacement 互斥 |
解析必须按 order 分组、组内按 preference 排序并依次尝试;跳过 order 直接比 preference 会选出错误目标。
regexp 与 replacement 只能二选一,同时给出属于非法记录,会直接被验证方判为格式错误。
regexp 以感叹号作为分隔符,替换串里的特殊字符要按规则处理,写规则时最容易出错。
日常运维很少直接碰到 NAPTR;多数服务发现场景 SRV 已经够用。
NAPTR 的价值在于把任意名字空间按规则映射到另一套命名空间,这正是 ENUM 能承载电话路由的原因。
ENUM 名字由号码倒序后拼接 e164.arpa 组成,例如 +8612345678904 对应 4.9.0.8.7.6.5.4.3.2.1.6.8.e164.arpa,顺序写错就查不到。
flags 为 s 时解析链路会继续走向 SRV,再由 SRV 给出主机与端口;只解析 NAPTR 并不能得到可直接连接的地址。