
简介这份文档面向网络工程师与语音通信运维人员系统讲解采用SIP协议的Cisco IOS语音网关帮助读者理解PSTN到SIP中继的网关部署方式解决企业分支与运营商网络中语音与IP网络融合的选型与配置问题。资源包内共1个doc文件约71KB内容涵盖网关应用场景、平台型号、主要特性与优势以及IETF标准支持等核心知识点。文档重点展开SIP信令在PSTN与IP网络间的媒体端接与信号转换功能涉及PBX互联、SIP中继、IP Centrex和家庭语音等应用并梳理QoS与呼叫准入控制、会话边界控制器、应急故障切换、多协议支持等关键能力同时列出Cisco 1700至5000系列可配置网关及2到2688个语音通道的扩展范围还附有RFC标准与对应IOS版本对照表。目前已有276人学习适合需要快速掌握SIP语音网关原理与部署要点的读者参考。1. 从 PSTN 到 SIP 中继Cisco IOS 语音网关到底解决什么问题很多做企业融合通信的工程师第一次接触 Cisco IOS 语音网关都是被一个很具体的需求逼出来的总部有一套 Cisco Unified CallManager分支机构还有一堆模拟话机和老 PBX运营商那边只给了一根 E1 或者 SIP 中继怎么把这三样东西接起来还要保证拨号计划统一、语音质量不塌方。这时候你翻配置手册会发现绕不开的就是 IOS 语音网关这个角色。它的本质是在 PSTN 和 IP 网络之间做媒体端接和信令转换。一边是 T1/E1 PRI、BRI、FXO、FXS、EM 这些传统语音接口另一边是 SIP、H.323、MGCP 这些分组信令。Cisco IOS 语音网关把两边的信令和媒体流对接起来让老 PBX 能注册到统一通信让模拟话机能走 IP 中继让运营商 SIP 中继能落地到本地网关。支持的语音通道从 2 路到 2688 路覆盖 1700、2600、2800、3700、3800 以及 5000 系列通用网关选型空间很大。适合谁看这份资源如果你正在做分支机构语音改造、SIP 中继对接、PBX 互联或者需要给呼叫中心做本地逃生这份 Cisco IOS 语音网关的配置和管理资料就是你要的东西。它不讲虚的直接落到 CLI 配置、协议参数和故障切换逻辑上。2. SIP 信令在 IOS 网关上的落地从全局参数到拨号对等体2.1 为什么选 SIP 而不是 H.323 或 MGCPCisco IOS 语音网关同时支持 SIP、H.323 和 MGCP但实际项目里选 SIP 的比例越来越高。原因不复杂SIP 是 IETF 标准RFC 3261 定义了完整的会话创建、修改和终止流程和第三方呼叫座席的互操作性最好。H.323 虽然成熟但协议栈重和 IP Centrex 这类新兴应用对接时经常要额外做协议转换。MGCP 更适合集中式控制但网关本身智能有限故障切换时依赖呼叫代理。SIP 的另一个优势是能把数据、语音和视频集成在单一呼叫里用统一拨号计划管理。RFC 3262 的 PRACK、RFC 3311 的 UPDATE、RFC 3515 的 REFER 这些扩展让呼叫转接、会话刷新、资源优先级这些功能都能在信令层完成。如果你需要和运营商 SIP 中继对接SIP 几乎是默认选项。不过要注意IOS 网关上的 SIP 支持是分版本递进的。RFC 3261 基础 SIP 从 12.3(8)T 开始支持TLS 加密要 12.4(6)TDNS SRV 记录解析从 12.2(8)T 就有。选版本的时候别只看路由器型号IOS 特性集才是决定能不能用某个 RFC 的关键。2.2 全局 SIP 参数配置在配置拨号对等体之前先把全局 SIP 参数立住。这些参数决定了网关怎么标识自己、怎么处理信令、怎么和上层代理交互。! 开启 SIP 服务并设置信令端口 voice service voip sip ! 绑定 SIP 信令到 5060 端口默认就是 5060 bind control source-interface GigabitEthernet0/0 bind media source-interface GigabitEthernet0/0 ! 设置 SIP 用户代理的显示名称 sip-server ipv4:10.1.1.100 ! 允许从 SIP 中继接收呼叫 allow-connections sip to sip ! 启用 PRACK 可靠临时响应 rel1xx supported prack ! 启用 UPDATE 方法 update-method enabled ! 设置会话刷新间隔 session refresh exit ! ! 配置 SIP 用户代理信息 sip-ua ! 设置本端 SIP 地址 sip-server ipv4:10.1.1.100 ! 注册到 SIP 代理 registrar ipv4:10.1.1.100 expires 3600 ! 启用 DNS SRV 查询 dns srv ! 设置传输协议为 TCP 或 UDP transport udp exit这段配置的逻辑是voice service voip下的sip子模式管的是信令层面的行为bind control和bind media分别指定信令和媒体流的源接口避免多接口环境下路由不对称。allow-connections sip to sip允许网关做 SIP 到 SIP 的转接这在 SIP 中继场景里必须开。rel1xx supported prack对应 RFC 3262让临时响应可靠传输减少呼叫建立失败。sip-ua下的registrar是向 SIP 代理注册dns srv对应 RFC 2782让网关能通过 DNS SRV 记录找到备用服务器。参数怎么改expires 3600是注册有效期运营商要求短一点可以改成 1800 或 600。transport udp改成tcp的话信令走 TCP适合对丢包敏感的环境但会增加一点延迟。session refresh默认启用间隔由min-se和max-se控制一般不用动。2.3 拨号对等体配置与拨号计划拨号对等体是 IOS 语音网关的核心逻辑它决定了什么呼叫走什么路径。SIP 中继场景下你需要至少两个对等体一个指向运营商 SIP 服务器一个指向本地呼叫处理。! 指向运营商 SIP 中继的拨号对等体 dial-peer voice 100 voip description To-SP-SIP-Trunk ! 匹配被叫号码这里匹配所有以 9 开头的号码 destination-pattern 9T ! 指定会话协议为 SIP session protocol sipv2 ! 指定 SIP 服务器地址 session target ipv4:202.1.1.1:5060 ! 指定编解码器 codec g711ulaw ! 设置 DTMF 中继方式为 RFC 2833 dtmf-relay rtp-nte ! 启用 SIP 注册 ! 如果运营商要求注册取消下面注释 ! session target registrar ! 设置呼叫准入控制 call admission new-model ! 设置最大并发呼叫数 max-conn 30 exit ! ! 指向本地 CallManager 的拨号对等体 dial-peer voice 200 voip description To-CUCM destination-pattern 1... session protocol sipv2 session target ipv4:10.1.1.100:5060 codec g711ulaw dtmf-relay rtp-nte exit ! ! 指向本地 FXO 端口的拨号对等体用于逃生 dial-peer voice 300 pots description To-PSTN-FXO destination-pattern 9T port 0/0/0 forward-digits all exit逻辑说明dial-peer voice 100 voip是 VoIP 对等体destination-pattern 9T里的T表示可变长度号码9是出局前缀。session protocol sipv2指定用 SIP 第二版。session target ipv4:202.1.1.1:5060是运营商 SIP 服务器地址。codec g711ulaw是 G.711 编码带宽占用 64kbps语音质量最好但带宽消耗大如果带宽紧张可以改成g729rtr。dtmf-relay rtp-nte对应 RFC 2833用 RTP 包传输 DTMF比带内传输可靠。dial-peer voice 300 pots是 POTS 对等体指向物理 FXO 端口。当 SIP 中继故障时呼叫可以走 FXO 逃生到 PSTN。forward-digits all表示把所有匹配的号码都转发出去不做裁剪。参数怎么改max-conn 30限制并发呼叫数根据 E1 的 30 个时隙来设。destination-pattern可以根据实际拨号计划调整比如9[2-9]..匹配 9 开头的 11 位号码。如果运营商要求注册把session target ipv4换成session target registrar并在sip-ua下配好registrar地址。2.4 验证 SIP 呼叫是否正常配完之后别急着上线先用show命令和测试呼叫验证。! 查看 SIP 用户代理状态 show sip-ua status ! 查看 SIP 注册状态 show sip-ua registrar status ! 查看拨号对等体摘要 show dial-peer voice summary ! 查看活动呼叫 show call active voice brief ! 开启 SIP 调试谨慎使用生产环境会刷屏 debug ccsip messages debug ccsip statesshow sip-ua status能看到 SIP 服务是否启用、绑定的接口和端口。show sip-ua registrar status显示注册是否成功如果失败会给出原因码。show dial-peer voice summary列出所有对等体的状态和匹配计数。show call active voice brief看当前活动呼叫的编解码器、DTMF 方式、收发包统计。调试命令debug ccsip messages会打印 SIP 信令交互适合排查呼叫建立失败。但生产环境慎用信令量大时会把控制台刷爆。建议用debug ccsip messages配合logging buffered限制输出。3. QoS 与呼叫准入控制让语音在拥塞时不掉链子3.1 语音质量的关键参数语音质量不是玄学是几个硬指标延迟、抖动、丢包。ITU-T G.114 建议单程延迟不超过 150ms抖动缓冲能吸收 30ms 以内的抖动丢包率超过 1% 就会明显感知。Cisco IOS 语音网关提供了一整套 QoS 工具来保证这些指标。差分服务代码点DSCP标记是第一步。语音承载流标记为 EF Expedited ForwardingDSCP 46信令标记为 AF31DSCP 26。这样上游设备能识别并优先处理。IP 优先级是二层标记和 DSCP 配合使用。低延迟队列LLQ是核心机制。它给语音流一个绝对优先的队列保证在拥塞时语音包优先发送。基于类别的加权公平队列CBWFQ给其他流量分配带宽保证。服务保证代理和响应时间报告器用来监控 QoS 是否达标。资源可用性检查和 RSVP 用来做呼叫准入带宽不够时拒绝新呼叫而不是让所有呼叫一起劣化。3.2 QoS 配置模板! 定义语音流量的类映射 class-map match-any VOICE-SIGNALING match dscp af31 match dscp cs3 exit ! class-map match-any VOICE-BEARER match dscp ef exit ! ! 定义策略映射 policy-map WAN-QOS class VOICE-BEARER priority percent 30 ! 语音承载流给 30% 带宽的绝对优先队列 class VOICE-SIGNALING bandwidth percent 5 ! 信令给 5% 带宽保证 class class-default fair-queue ! 其他流量公平队列 exit ! ! 应用到 WAN 接口 interface Serial0/0/0 service-policy output WAN-QOS exit ! ! 在拨号对等体上标记 DSCP dial-peer voice 100 voip ip qos dscp ef media ip qos dscp af31 signaling exit逻辑说明class-map把流量分类match dscp ef匹配语音承载流。policy-map定义每类流量的处理方式priority percent 30给语音流 30% 带宽的 LLQbandwidth percent 5给信令 5% 的带宽保证。service-policy output应用到 WAN 接口的出方向。拨号对等体下的ip qos dscp命令在网关入口就打标记省去上游设备分类的麻烦。参数怎么改priority percent 30的 30% 根据 WAN 带宽和并发呼叫数算。一个 G.711 呼叫占 64kbps加上 IP/RTP 头大约 80kbps。30 路并发就是 2.4Mbps如果 WAN 带宽是 8Mbps30% 就是 2.4Mbps刚好够。G.729 呼叫占 8kbps加头大约 24kbps同样带宽能支持更多路。bandwidth percent 5给信令一般 5% 足够。3.3 呼叫准入控制配置! 启用呼叫准入控制 call admission new-model ! ! 设置基于资源的准入控制 call admission limit 30 ! ! 在拨号对等体上启用准入控制 dial-peer voice 100 voip call admission new-model max-conn 30 exit ! ! 配置 RSVP 预留 interface Serial0/0/0 ip rsvp bandwidth 2400 exit ! dial-peer voice 100 voip req-qos guaranteed-delay acc-qos guaranteed-delay exitcall admission limit 30设置网关最大并发呼叫数。max-conn 30在对等体级别限制。ip rsvp bandwidth 2400在接口上预留 2400kbps 给 RSVP。req-qos guaranteed-delay要求 RSVP 预留acc-qos guaranteed-delay接受预留。当带宽不够时新呼叫会被拒绝已有呼叫不受影响。参数怎么改call admission limit根据网关的 DSP 资源和 WAN 带宽取小值。ip rsvp bandwidth根据实际语音带宽需求设别超过接口带宽的 75%。4. 会话边界控制器与协议互操作SIP 和 H.323 怎么共存4.1 多服务 IP 到 IP 网关的角色Cisco IOS 语音网关上的多服务 IP 到 IP 网关提供了一个会话边界控制器功能集。它的核心作用是在两个 IP 域之间做信令和媒体的中介包括 SIP 和 H.323 之间的信号互操作、地址和端口转换、计费和呼叫详细记录规范化、QoS 和带宽管理。实际项目里最常见的场景是总部用 H.323 老系统分支机构上了 SIP 中继两边要互通。IOS 网关可以在中间做协议转换SIP 侧的 INVITE 转成 H.323 的 SetupH.323 的 Alerting 转成 SIP 的 180 Ringing。媒体流也要做互操作包括 DTMF 和编译码器转换。地址和端口转换是另一个关键功能。私网地址的 SIP 消息到了公网侧Contact 和 Via 头里的地址需要转换否则响应回不来。IOS 网关的 SBC 功能可以自动处理这些。4.2 SIP 到 H.323 互操作配置! 启用多服务 IP 到 IP 网关 voice service voip ! 允许 SIP 到 H.323 的转接 allow-connections sip to h323 allow-connections h323 to sip ! 启用地址转换 sip ! 启用 SIP 到 H.323 的互操作 interworking exit ! ! 配置 H.323 侧参数 voice service voip h323 ! 设置 H.323 的呼叫信号 call start slow ! 设置 H.323 的注册 gatekeeper registration ras exit exit ! ! 配置 SIP 到 H.323 的拨号对等体 dial-peer voice 400 voip description SIP-to-H323 destination-pattern 8T session protocol sipv2 session target ipv4:10.1.1.100 codec g711ulaw dtmf-relay rtp-nte exit ! dial-peer voice 500 voip description H323-to-SIP destination-pattern 7T session protocol h323 session target ipv4:10.2.2.100 codec g711ulaw dtmf-relay h245-alphanumeric exit逻辑说明allow-connections sip to h323和allow-connections h323 to sip开启双向协议转换。interworking启用 SIP 和 H.323 的互操作。H.323 侧的call start slow表示慢启动先建立 H.245 通道再协商能力兼容性更好。registration ras向网守注册。拨号对等体 400 匹配 8 开头的号码走 SIP对等体 500 匹配 7 开头的号码走 H.323。参数怎么改dtmf-relay在 SIP 侧用rtp-nteH.323 侧用h245-alphanumeric网关会自动转换。codec两边要一致不一致的话网关会做转码消耗 DSP 资源。4.3 故障切换与应急能力应急能力是 IOS 语音网关的强项。如果无法连接到主 SIP 代理或背到背用户代理故障恢复功能可以在分支机构路由器上为 PSTN 电话接口提供支持。这一功能可以和 Cisco Unified Survivable Remote Site Telephony 结合支持呼叫处理。当 Cisco Unified CallManager 故障切换到第三个服务器时IOS 语音网关会使用下一个可用服务器。配置上通过sip-ua下的多个registrar实现。sip-ua ! 主 SIP 代理 registrar ipv4:10.1.1.100 expires 3600 ! 备用 SIP 代理 registrar ipv4:10.1.1.101 expires 3600 ! 第三备用 registrar ipv4:10.1.1.102 expires 3600 ! 启用故障切换 retry invite 3 retry response 3 retry bye 3 retry cancel 3 ! 设置故障切换时间 timers expires 3600 timers connect 500 exitregistrar可以配多个网关按顺序尝试。retry invite 3表示 INVITE 失败重试 3 次。timers connect 500是连接超时 500ms。当主代理不可达时网关自动切换到下一个。5. 避坑与排查IOS 语音网关对接 SIP 中继的五个血泪教训5.1 现象呼叫建立成功但单通原因媒体流源接口没绑定或者 NAT 环境下 SDP 里的地址是私网地址对端回不来。解决在voice service voip下配bind media source-interface指定公网接口。如果经过 NAT启用sip下的nat相关命令或者用 SBC 功能做地址转换。检查show call active voice brief里的收发包统计如果一边有包一边没包基本就是媒体路径问题。5.2 现象DTMF 按键无效原因DTMF 中继方式不匹配。SIP 侧配了rtp-nte但运营商侧用带内传输或者 H.323 侧用h245-alphanumeric但没做转换。解决先确认运营商要求的 DTMF 方式。SIP 中继一般用 RFC 2833rtp-nte如果运营商用 SIP INFO改成dtmf-relay sip-notify。H.323 侧用h245-alphanumeric或h245-signal。网关两侧不一致时会自动转换但转换需要 DSP 资源高并发时可能失败。5.3 现象注册成功但呼叫被拒原因拨号对等体的destination-pattern不匹配或者session target指向的地址不对。解决用show dial-peer voice summary看匹配计数如果某个对等体计数为 0说明没匹配上。用test voice port或csim start模拟呼叫测试。检查destination-pattern的正则表达式T表示可变长度.表示任意一位[]表示范围。注意9T和9.T的区别前者匹配 9 开头的任意长度号码后者匹配 9 开头后跟至少一位的号码。5.4 现象语音断续、抖动明显原因QoS 没配或配错WAN 拥塞时语音包被丢弃或延迟。解决检查 WAN 接口的service-policy是否应用show policy-map interface看各类流量的统计。确认语音流被标记为 EF并且 LLQ 的带宽足够。如果 WAN 带宽不足考虑用 G.729 压缩编码或者启用呼叫准入控制限制并发数。show call active voice brief里的jitter字段能看出抖动情况。5.5 现象故障切换后呼叫中断原因备用 SIP 代理没配或者retry参数太小切换过程中呼叫已经超时。解决在sip-ua下配多个registrar并调整retry invite、retry response的次数。timers connect设大一点给切换留时间。如果用了 Cisco Unified SRST确认 SRST 的max-ephones和max-dn够用。测试时手动断开主代理观察show sip-ua registrar status的切换过程。6. 进阶技巧用 TCL 和 VXML 做自定义信令与验证6.1 TCL 脚本在 IOS 网关上的应用Cisco IOS 语音网关支持工具命令语言TCL和语音可扩展标记语言VXML做丰富信令。TCL 脚本可以挂在拨号对等体上在呼叫建立前执行自定义逻辑比如根据主叫号码查数据库、播放提示音、收集 DTMF 输入。# 一个简单的 TCL 脚本根据主叫号码决定路由 proc act_Setup { } { global dest set calling [infotag get leg_calling] # 如果主叫是 1001转到 2001 if { $calling 1001 } { set dest 2001 } else { set dest 2002 } # 设置被叫号码 leg setup $dest callInfo } proc act_CallInfo { } { # 呼叫建立后的处理 leg proceeding leg connect } proc act_Disconnect { } { # 呼叫断开后的清理 leg disconnect }这个脚本的逻辑是在act_Setup里获取主叫号码根据号码设置被叫dest然后调用leg setup建立呼叫。act_CallInfo处理呼叫进展act_Disconnect做清理。实际部署时把脚本放到 flash 里在拨号对等体下用service命令挂载。参数怎么改infotag get leg_calling获取主叫leg_calling可以换成leg_called获取被叫。leg setup的第二个参数callInfo是回调过程名。脚本调试用debug voip script看执行日志。6.2 VXML 实现信息等待和总结RFC 3842 定义了信息总结和信息等待指示活动包从信息处理系统向用户传输信息等待状态和信息总结。VXML 脚本可以实现这个功能。?xml version1.0? vxml version2.0 form block prompt您有 value exprmsgCount/ 条新留言/prompt /block field nameaction prompt按 1 收听按 2 删除按 3 退出/prompt grammar typeapplication/x-nuance-gsl [one two three] /grammar filled if condaction one goto next#listen/ elseif condaction two/ goto next#delete/ else/ exit/ /if /filled /field /form form idlisten block prompt正在播放留言/prompt audio srcmsg.wav/ /block /form form iddelete block prompt留言已删除/prompt /block /form /vxml这个 VXML 脚本先播放留言数量然后收集用户按键根据按键跳转到不同表单。grammar定义语音识别的语法这里用 GSL 格式。audio播放留言文件。实际部署时 VXML 脚本放在 HTTP 服务器上网关通过ivr命令加载。6.3 验证方法用 SIPp 做压力测试上线前用 SIPp 做压力测试验证网关的并发处理能力和故障切换。# 安装 SIPp sudo apt-get install sipp # 运行 SIPp 测试脚本模拟 30 路并发呼叫 sipp -sf uac.xml 10.1.1.1:5060 -m 30 -r 5 -d 10000 # 参数说明 # -sf 指定场景文件 # -m 总呼叫数 # -r 每秒呼叫数 # -d 呼叫持续时间毫秒uac.xml是 SIPp 的场景文件定义 INVITE、ACK、BYE 的流程。-m 30模拟 30 路呼叫-r 5每秒发起 5 路-d 10000每路持续 10 秒。测试时观察show call active voice brief的并发数和show sip-ua status的状态。如果呼叫失败率超过 1%检查 DSP 资源和 QoS 配置。从那以后我每次上线前都强制走一遍 SIPp 压力测试和故障切换演练确认registrar切换时间在 3 秒以内DTMF 在 30 路并发下不丢包。希望帮到你。本文还有配套的精品资源点击获取