我们目前正在使用基于 NetSapiens 的 VoIP 系统,由于 SIP-ALG 未被禁用或无法禁用,许多消费级路由器和调制解调器都存在严重问题。
那么如果 SIP-ALG 是 VoIP 电话的一个问题,为什么它总是默认启用,甚至单独用作协议?
答案1
如果 SIP-ALG 是 VoIP 电话的一个问题,为什么它总是默认启用,甚至单独用作协议?
SIP-ALG 允许 NAT 路由器重写 SIP 消息(SIP 标头和 SDP 正文)中的信息。
目的是通过检查 VoIP 流量(数据包)并在必要时进行修改来防止路由器防火墙引起的一些问题。
这使得 NAT 后面的客户端(例如 VoIP 电话)和 SIP 端点之间的信令和音频流量成为可能。
如果没有 SIP-ALG,您可能会在 VoIP 对话中获得单向音频(见下文)。
遗憾的是,许多路由器中的 SIP-ALG 实施不佳,造成的问题比它解决的问题还多。
如果您有其中一个问题路由器,建议禁用 SIP-ALG 并使用其他方法确保 VoIP 正常工作。
Gradwell 和其他提供商经常发现 SIP ALG 会以意想不到的方式修改 SIP 数据包,损坏数据包并使其无法读取。这可能会导致意外行为,例如电话无法注册和来电失败。
来源什么是 SIP ALG,为什么 Gradwell 建议我关闭它?
SIP ALG 问题
主要问题是大部分商用路由器在SIP协议层面实现不佳,该技术只对拨出电话有用,对拨入电话无用:
- 缺少来电:当 UA 开启时,它会向代理发送 REGISTER 以便进行本地化并接收来电。此 REGISTER 由 ALG 功能修改(否则,代理将无法联系到用户,因为它在 REGISTER“联系人”标头中指示了私有 IP)。普通路由器只会将 UDP“连接”保持打开一段时间(30-60 秒),因此在此之后,端口转发将结束,路由器将丢弃传入数据包。许多 SIP 代理通过向 UA 发送 OPTIONS 或 NOTIFY 消息来保持 UDP 保持活动,但它们只会在注册期间检测到 UA 已进行 NAT 时才这样做。SIP ALG 路由器会重写 REGISTER 请求,因此代理不会检测到 NAT 并且不会保持保持活动(因此无法进行来电)。
- 破坏 SIP 信令:许多内置 SIP ALG 的常用路由器会错误地修改 SIP 标头和 SDP 主体,从而破坏 SIP 并使通信变得不可能。其中一些路由器会通过在所有 SIP 标头和主体中搜索私有地址并将其替换为路由器公共映射地址来进行整体替换(例如,如果私有地址出现在“Call-ID”标头中,则替换私有地址,这完全没有意义)。许多 SIP ALG 路由器在写入 SIP 消息时会破坏它(即在标头参数中遗漏了分号“;”)。在许多此类路由器中,写入大于 65536 的错误端口值也很常见。
- 不允许服务器端解决方案:即使您不需要客户端 NAT 解决方案(您的 SIP 代理为您提供了服务器 NAT 解决方案),如果您的路由器启用了 SIP ALG 而破坏了 SIP 信令,那么您与代理的通信也将变得不可能。
为什么会出现单向音频?
单向音频最常见的原因是路由器,因为许多路由器在设计时并未考虑 VoIP。大多数 ISP 都会为您提供一个 IP,即您在互联网上使用的地址,其他计算机可以通过该地址找到您。
当您将设备和计算机连接到路由器时,它必须在您的所有设备之间共享此 IP。因此,它使用一种称为网络地址转换 (NAT) 的技术。使用这种方法,您的每台设备都会获得自己的内部 IP 地址,以便您的路由器可以区分它们。
这不用于与互联网通信,而只是一个内部地址。当您的计算机或其他设备与互联网通信时,将使用您的互联网服务提供商提供给您的 IP 地址(有关此过程的更多信息,请参阅本文)。
在互联网上执行日常任务时这通常不是问题,因为您主要检索信息,而不是将其直接发送到您的计算机。
但是,电话通话是双向的。您通过互联网发送音频,对方将音频发送回给您。这会导致一个两难境地,因为音频上会有您的公共 IP 地址,但不会有您设备的内部地址。您的路由器会收到信息,但不知道如何处理。因此它会忽略它。这意味着对方听到了您的谈话,但无论他们说什么,您都听不到。他们的谈话内容根本无法传达。