在传统电话网络中,拨号只需要一串数字,电话交换机会帮你完成后续的一切路由工作。但在融合通信时代,电话号码不仅要能接到 PSTN 网络,还要能被互联网上的各种服务识别和定位,比如把号码转换成一个 SIP 地址后交给软交换系统处理。实现这个转换的核心机制之一,就是 DNS 中的 NAPTR 记录。它是 ENUM 体系的基础,也是 IMS 网络中进行号码解析的重要环节。

NAPTR 记录的基本概念与字段结构
NAPTR 全称是 Naming Authority Pointer,即权威名称指针记录,定义在 RFC 2915 中。它的作用是在 DNS 中存储一条“重写规则”,把一个域名映射成另一个域名或者一个 URI。与常见的 A 记录、CNAME 记录不同,NAPTR 记录不直接给出 IP 地址,而是给出一套规则,告诉查询者下一步应该去哪里、用什么协议、用什么方式继续解析。
一条完整的 NAPTR 记录包含六个核心字段,理解这些字段是掌握 NAPTR 的前提:
- Order(顺序号):整数,决定多条 NAPTR 记录的处理先后顺序,数值越小优先处理。
- Preference(优先级):在 Order 相同的多条记录之间做选择,数值越小越优先,通常用于负载分担或多服务商备份。
- Flags(标志位):常见取值有 S、A、U、P。S 表示下一步查询 SRV 记录,A 表示下一步查询 A 或 AAAA 记录,U 表示终止解析并输出一个 URI,P 表示由应用层协议自行处理。
- Service(服务字段):描述服务的解析规则与协议,比如
E2U+sip表示从 E.164 号码到 SIP URI 的转换,E2U+h323表示转换到 H.323 地址。 - Regexp(正则表达式):对当前域名或号码应用的正则替换规则,这是整个映射逻辑的核心。
- Replacement(替换内容):当不使用正则表达式时,直接指向下一个要查询的域名。
可以看出,NAPTR 记录本质上是一个“规则引擎”,Order 和 Preference 负责排序,Flags 决定解析链路的走向,Regexp 完成实际的字符串变换。这种设计让 DNS 具备了灵活的重写能力,非常适合电话号码这种需要多步转换的场景。
ENUM 场景下的电话号码映射流程
NAPTR 最典型的应用是 ENUM,即电话号码映射,RFC 3761 对此做了规范。ENUM 解决的问题是:如何通过 DNS 查询,把一个符合 E.164 标准的电话号码映射成互联网上的 URI 地址。
整个流程分为两步。第一步是号码到域名的转换。以号码 +861012345678 为例,先去掉加号,再把剩余数字倒序排列,每位数字之间加上点,最后拼接上固定的后缀 e164.arpa,得到 8.7.6.5.4.3.2.1.0.1.6.8.e164.arpa。之所以倒序,是因为 DNS 解析是从右往左进行的,这样做可以让同一个国家、同一个地区的号码聚集在同一棵 DNS 子树下,便于分层管理和授权。
第二步是对这个特殊域名发起 NAPTR 查询。DNS 服务器返回若干条 NAPTR 记录,解析方根据 Order 和 Preference 排序后逐条尝试。下面是一条典型的区域文件配置:
; 域名 8.7.6.5.4.3.2.1.0.1.6.8.e164.arpa 的区域文件 $ORIGIN 8.7.6.5.4.3.2.1.0.1.6.8.e164.arpa. @ IN NAPTR 100 10 "U" "E2U+sip" "!^.*$!sip:01012345678@example-sip.com!" . @ IN NAPTR 100 20 "U" "E2U+tel" "!^.*$!tel:+861012345678!" . @ IN NAPTR 200 10 "S" "E2U+sip" "" _sip._tcp.example-sip.com.
第一条记录的标志位是 U,正则表达式把整个查询域名替换成 sip:01012345678@example-sip.com,解析到此结束,调用方直接拿这个 URI 去发起 SIP 呼叫。第二条作为备用,提供 tel: 形式的结果。第三条的标志位是 S,表示正则替换没有完成最终转换,需要继续对替换字段指向的 _sip._tcp.example-sip.com 查询 SRV 记录,再由 SRV 记录定位到具体的服务器主机名,最后查询 A 记录拿到 IP 地址。
这种多级链式解析的设计好处在于灵活。运营商可以在 NAPTR 层面做策略控制,比如按用户签约信息返回不同的服务记录,把语音呼叫交给 SIP 域,把传真请求路由到 T.38 网关,而不需要改动底层的 DNS 架构。
NAPTR 与 SRV 记录的配合使用及实践要点
SRV 记录也是用于服务定位的 DNS 记录,它能告诉你某个服务由哪台主机、哪个端口提供。两者的分工很明确:NAPTR 负责“选择服务类型和协议”,SRV 负责“定位提供服务的具体主机”。当 NAPTR 的标志位是 S 时,两者就形成了上下游关系,这种组合在 SIP 协议的出站代理发现中被广泛使用。
比如一个 SIP 客户端要呼叫 user@example-sip.com,标准做法是先对 example-sip.com 查询 NAPTR 记录:
; 对 example-sip.com 的 NAPTR 查询结果示例 example-sip.com. IN NAPTR 50 50 "S" "SIPS+D2T" "" _sips._tcp.example-sip.com. example-sip.com. IN NAPTR 90 50 "S" "SIP+D2T" "" _sip._tcp.example-sip.com. example-sip.com. IN NAPTR 100 50 "S" "SIP+D2U" "" _sip._udp.example-sip.com.
服务字段中的 D2T 表示基于 TCP 的传输,D2U 表示基于 UDP 的传输,SIPS 表示 TLS 加密的 SIP。客户端按照 Order 排序,优先尝试加密的 TCP 方案,对 _sips._tcp.example-sip.com 发起 SRV 查询,拿到主机名和端口后再做 A 记录查询,最终建立连接。整个流程实现了传输协议的自动协商和服务器的自动发现。
在实际部署和维护 NAPTR 记录时,有几个常见的坑需要注意。首先是正则表达式的分隔符写法,ENUM 中规定用感叹号作为分隔符,格式为 !pattern!replacement!flags,如果误用成斜杠会导致解析失败。其次是 Replacement 字段在不使用时必须写一个点号表示空,不能留空。再次是 DNS 缓存 TTL 的设置,ENUM 记录涉及呼叫路由,TTL 设置过长会导致号码迁移后旧路由长时间不生效,一般建议控制在几分钟到一小时之间。最后,查询工具方面,可以使用 dig NAPTR 域名 命令直接验证记录是否正确发布,这在排障时非常实用。
总的来说,NAPTR 记录通过“排序加正则重写加链式解析”的组合,把 DNS 从一个简单的地址簿扩展成了具备路由决策能力的分布式数据库。理解了它,就能明白 VoIP 系统中号码是如何一步步被翻译成可呼叫的网络地址的,这对从事 IMS 核心网、SIP 服务器运维或者融合通信开发的工程师来说,都是一项基础且重要的技能。
NAPTR记录DNS解析ENUM电话号码映射修改时间:2026-09-13 05:56:32