SIP ALG 是什么
SIP 通话的媒体通道(RTP)地址和端口写在信令报文正文(SDP)里,而不是像普通协议那样写在报文头上。NAT 只改报文头,改不到信令正文,于是出现「注册成功、能振铃、接通后没声音或单通」的典型故障。ALG(应用层网关)的作用就是解析 SIP/SDP 内容,把里面携带的私网地址端口一并替换成公网侧地址端口,并在防火墙上为媒体流动态放行。
基本信息
| 涉及协议 | SIP 信令(5060/UDP、5061/TLS)、RTP/RTCP 媒体流 |
|---|---|
| 设备角色 | IP-PBX、语音网关、视频会议 MCU、SIP 话机 |
| 开启位置 | 出口防火墙或路由设备的 ALG 开关,随厂商默认策略不同 |
| 常见现象 | 注册失败、能振铃无语音、单通、呼叫中断 |
| 替代方案 | 媒体端口固定为范围后静态放行,或使用经 SBC 中转 |
典型使用场景
- 总部与分支都用私网地址、经 NAT 后与运营商 SIP 中继对接
- 视频会议终端在 NAT 后注册到云端 MCU,媒体协商失败导致黑屏或掉线
- 呼叫中心坐席使用 SIP 软电话,外呼后只有一方能听到声音
- 更换出口防火墙后原通话正常、新设备上通话无声,需要判断是否为 ALG 差异
- 加密信令(SIP over TLS)与加密媒体(SRTP)场景,需要确认设备能否解析并给出替代穿透设计
排查顺序
排查顺序
# 1. 抓包看注册与呼叫流程:信令是否正常、有无 200 OK
# 2. 展开 SDP 正文,确认里携带的是私网地址还是公网地址
# 3. 对比 NAT 转换前后:信令头的 Via/Contact 与正文连接地址是否一致
# 4. 确认设备 ALG 开关状态,并核对厂商对加密信令的处理说明
# 5. 无 ALG 或 ALG 不可用时,把媒体端口固定为范围并静态放行
# 6. 先在私网内验证通话,再验证跨公网、跨运营商通话故障现象对照
| 现象 | 可能原因 | 核查点 |
|---|---|---|
| 注册失败 | 信令端口未放行或 Contact 地址不可达 | 5060/5061 放行与注册报文的 Contact |
| 能振铃无语音 | SDP 中媒体地址为私网,RTP 未建立 | SDP 连接地址与 RTP 双向包计数 |
| 单通 | 单向媒体端口未放行或 ALG 只改了一侧 | 两侧 RTP 收发计数与端口一致性 |
| 通话 30 秒后中断 | 媒体空闲导致会话老化或保持报文丢失 | 会话老化时间与 RTP 保活间隔 |
不同厂商 ALG 的实现与兼容性差异较大,跨厂商对接前先做小范围通话验证;若 ALG 解析不了加密信令,只能改用 SBC 中转或固定媒体端口放行。
媒体端口固定放行会扩大暴露面,建议限定来源为对端 SIP 服务商地址段,并对放行范围做台账记录,便于后续审计。