Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
本页内容
 

新一代服务应用层网关

本主题介绍 Junos OS 支持的下一代服务应用层网关 (ALG)。ALG 支持包括管理受支持 ALG 的针孔和父子关系。

RTSP

实时流协议 (RTSP) 控制具有实时属性(如音频和视频)的数据传输。RTSP控制的流可以使用RTP,但不是必需的。媒体可以在同一 RTSP 控制流上传输。这是一种基于文本的类似 HTTP 的协议,但客户端和服务器维护会话信息。使用 SETUP 消息建立会话,并使用 TEARDOWN 消息终止会话。传输(介质协议、地址和端口号)在设置和设置响应中协商。

要支持状态防火墙和 NAT 服务,您需要为 TCP 端口 554 配置 RTSP ALG。

ALG 监视控制连接,动态打开媒体 (RTP/RTSP) 流的流,并执行 NAT 地址和端口重写。

会话初始化协议 (SIP) 是一种应用层协议,可以建立、维护和终止媒体会话。它是一种广泛使用的 IP 语音 (VoIP) 信令协议。SIP ALG 监控 SIP 流量,并动态创建和管理信令和介质路径上的针孔。ALG 仅允许具有正确权限的数据包。SIP ALG 还执行以下功能:

  • 管理父子会话关系。

  • 实施安全策略。

  • 管理 VoIP 流量的针孔。

SIP ALG 支持以下功能:

  • 状态式防火墙

  • 静态源 NAT

  • 仅动态地址 源 NAT

  • 网络地址端口转换 (NAPT)

注意:

SIP 会话限制为 12 小时(720 分钟),用于在 MS-MIC 和 MS-MPC 接口卡上进行 NAT 处理。MS-DPC 上的 SIP 会话没有时间限制。

配置 SIP

会话初始化协议 (SIP) 是一种通用协议,用于在电话、传真、视频会议、即时消息和文件交换等互联网服务中涉及的端点之间进行通信。

Junos OS 根据 RFC 3261 SIP:会话初始协议中所述的标准提供 ALG 服务。Junos OS 下的 SIP 流如 RFC 3665 会话初始协议 (SIP) 基本呼叫流示例中所述。

注意:

在实施 Junos OS SIP ALG 之前,应熟悉某些限制,如 Junos OS SIP ALG 限制中所述

将 NAT 与 SIP ALG 结合使用会导致 SIP 报头字段由于地址转换而发生更改。有关这些转换的说明,请参阅 SIP ALG 与网络地址转换的交互

要在自适应服务接口上实施 SIP,请 application-protocol[edit applications application application-name] 层次结构级别使用值 sip配置语句。此外,您还可以配置另外两个语句来修改 SIP 的实现方式:

  • 您可以让路由器接受 NAT 防火墙后面的端点设备的任何传入 SIP 呼叫。当防火墙后面的设备向防火墙外部的代理注册时,AS 或多服务 PIC 将保持注册状态。 learn-sip-register 启用语句后,路由器可以使用此信息接受入站呼叫。如果未配置此语句,则不接受入站呼叫;只有防火墙后面的设备才能调用防火墙外的设备。

    要配置 SIP 注册,请在[edit applications application application-name]层次结构级别包含learn-sip-register语句:

    注意:

    learn-sip-register 语句不适用于新一代服务 MX-SPC3。

    您也可通过发出 show services stateful-firewall sip-register 命令来手动检查 SIP 寄存器;有关更多信息,请参阅 Junos OS System Basics and Services Command Reference。下一代服务不支持命令 show services stateful-firewall sip-register

  • 您可以为处于保留状态的 SIP 呼叫的持续时间指定超时期限。当呼叫处于保留状态时,没有任何活动,并且在配置 inactivity-timeout 的时间段到期后,流量可能会超时,从而导致呼叫状态崩溃。为避免这种情况,当呼叫处于暂停状态时,流量计时器将重置为 sip-call-hold-timeout 周期,以保持呼叫状态和流量的时间超过该 inactivity-timeout 周期。

    注意:

    sip-call-hold-timeout 语句不适用于新一代服务 MX-SPC3。

    要配置超时期限,请在[edit applications application application-name]层次结构级别包含语sip-call-hold-timeout句:

    默认值为 7200 秒,范围为 0 到 36,000 秒(10 小时)。

SIP ALG 与网络地址转换的交互

网络地址转换 (NAT) 协议使专用子网中的多个主机能够共享一个公共 IP 地址以访问 Internet。对于传出流量,NAT 会将私有子网中主机的私有 IP 地址替换为公有 IP 地址。对于传入流量,公共 IP 地址将转换回私有地址,并将消息路由到私有子网中的相应主机。

将 NAT 与会话初始协议 (SIP) 服务结合使用会更加复杂,因为 SIP 消息在 SIP 报头和 SIP 正文中包含 IP 地址。将 NAT 与 SIP 服务一起使用时,SIP 报头包含有关呼叫方和接收方的信息,设备会转换此信息以将其隐藏在外部网络中。SIP 正文包含会话描述协议 (SDP) 信息,其中包括用于传输媒体的 IP 地址和端口号。设备转换 SDP 信息,以便分配资源以发送和接收介质。

如何替换 SIP 消息中的 IP 地址和端口号取决于消息的方向。对于传出消息,客户端的专用 IP 地址和端口号将替换为瞻博网络防火墙的公共 IP 地址和端口号。对于传入消息,防火墙的公共地址将替换为客户端的专用地址。

通过防火墙发送 INVITE 消息时,SIP 应用层网关 (ALG) 会将消息标头中的信息收集到调用表中,用于将后续消息转发到正确的端点。当新消息到达时(例如 ACK 或 200 OK),ALG 会将“From:、To: 和 Call-ID:”字段与调用表进行比较,以识别消息的调用上下文。如果到达与现有呼叫匹配的新 INVITE 消息,ALG 会将其作为 REINVITE 处理。

当包含 SDP 信息的消息到达时,ALG 会分配端口并在这些端口与 SDP 中的端口之间创建 NAT 映射。由于 SDP 需要实时传输协议 (RTP) 和实时控制协议 (RTCP) 通道的顺序端口,因此 ALG 提供连续的偶数奇数端口。如果找不到一对端口,则会丢弃 SIP 消息。

本主题包含以下部分:

拨出电话

当使用从内部网络到外部网络的 SIP 请求消息发起 SIP 呼叫时,NAT 会替换 SDP 中的 IP 地址和端口号,并将 IP 地址和端口号绑定到瞻博网络防火墙。Via、Contact、Route 和 Record-Route SIP 报头字段(如果存在)也绑定到防火墙 IP 地址。ALG 存储这些映射,以便在重新传输和 SIP 响应消息中使用。

然后,SIP ALG 会在防火墙上打开针孔,以允许媒体通过根据 SDP 以及 Via、Contact 和 Record-Route 标头字段中的信息协商的动态分配端口上的设备。针孔还允许传入数据包到达联系人、通过和记录路由 IP 地址和端口。处理回传流量时,ALG 会将原始的“联系人”、“通过”、“路由”和“记录路由 SIP”字段插入回数据包中。

来电

从公共网络向公共静态 NAT 地址或设备上的接口 IP 地址发起来电。静态 NAT 是静态配置的 IP 地址,指向内部主机;ALG 在监控内部主机发送给 SIP 注册器的 REGISTER 消息时动态记录接口 IP 地址。当设备收到传入的 SIP 数据包时,它会建立会话并将数据包的有效负载转发到 SIP ALG。

ALG 检查 SIP 请求消息(最初是 INVITE),并根据 SDP 中的信息为传出媒体打开大门。当 200 OK 响应消息到达时,SIP ALG 对 IP 地址和端口执行 NAT,并在出站方向上打开针孔。(打开的门的生存时间很短,如果未快速收到 200 OK 响应消息,它们就会超时。

当 200 OK 响应到达时,SIP 代理会检查 SDP 信息并读取每个媒体会话的 IP 地址和端口号。设备上的 SIP ALG 会对地址和端口号执行 NAT,为出站流量打开针孔,并刷新入站方向上的网关超时。

当 ACK 到达 200 OK 时,它也会通过 SIP ALG。如果消息包含 SDP 信息,则 SIP ALG 确保 IP 地址和端口号与之前的 INVITE 相比没有更改 - 如果更改,ALG 会删除旧的针孔并创建新的针孔以允许媒体通过。ALG 还会监控 Via、Contact 和 Record-Route SIP 字段,并在确定这些字段已更改时打开新的针孔。

转接来电

例如,转接呼叫是指网络外的用户 A 呼叫网络内的用户 B,并且用户 B 将呼叫转接给网络外的用户 C。SIP ALG 将来自用户 A 的 INVITE 作为正常传入呼叫进行处理。但是,当 ALG 检查从网络外部的 B 到 C 的转发呼叫并注意到使用相同的接口到达 B 和 C 时,它不会在防火墙上打开针孔,因为介质将直接在用户 A 和用户 C 之间流动。

呼叫终止

BYE 消息将终止呼叫。当设备收到 BYE 消息时,它会像转换任何其他消息一样转换标头字段。但是,由于 BYE 消息必须由接收方以 200 OK 确认,因此 ALG 会将呼叫拆卸延迟 5 秒钟,以便有时间传输 200 OK。

呼叫重新邀请消息

重新邀请消息:将新的媒体会话添加到通话中,并删除现有媒体会话。将新媒体会话添加到通话中时,将在防火墙中打开新的针孔并创建新的地址绑定。该过程与原始呼叫设置相同。从通话中删除一个或多个媒体会话时,针孔将关闭并释放绑定,就像 BYE 消息一样。

呼叫会话计时器

如果未收到 Re-INVITE 或 UPDATE 消息,SIP ALG 使用 Session-Expires 值使会话超时。ALG 从对 INVITE 的 200 OK 响应中获取 Session-Expires 值(如果存在),并将此值用于信号超时。如果 ALG 在会话超时之前收到另一个 INVITE,它会将所有超时值重置为此新的 INVITE 或默认值,并重复该过程。

作为预防措施,SIP ALG 使用硬超时值来设置呼叫可以存在的最大时间。这可确保在发生以下事件之一时设备受到保护:

  • 通话期间终端系统崩溃,且未收到 BYE 消息。

  • 恶意用户从不发送 BYE 以尝试攻击 SIP ALG。

  • SIP 代理的不良实现无法处理 Record-Route,并且从不发送 BYE 消息。

  • 网络故障会阻止接收 BYE 消息。

呼叫取消

任何一方都可以通过发送 CANCEL 消息来取消呼叫。收到 CANCEL 消息后,SIP ALG 会通过防火墙关闭针孔(如果已打开),并释放地址绑定。在释放资源之前,ALG 会将控制通道的淘汰时间延迟约 5 秒,以便为最终的 200 OK 留出时间。当 5 秒超时到期时,无论到达 487 还是非 200 响应,呼叫都将终止。

分 叉

分叉使 SIP 代理能够同时向多个目标发送一条 INVITE 消息。当单个呼叫的多个 200 OK 响应消息到达时,SIP ALG 会使用收到的前 200 条 OK 消息解析并更新呼叫信息。

SIP 消息

SIP 消息格式由 SIP 标头部分和 SIP 正文组成。在请求消息中,标头部分的第一行是请求行,其中包括方法类型、请求 URI 和协议版本。在响应消息中,第一行是状态行,其中包含状态代码。SIP 报头包含用于信令的 IP 地址和端口号。SIP 正文与标头部分之间用空行分隔,用于存储会话说明信息,这是可选的。Junos OS 目前仅支持 SDP。SIP 正文包含用于传输介质的 IP 地址和端口号。

SIP 报头

在以下示例 SIP 请求消息中,NAT 将替换标头字段中的 IP 地址,使其对外部网络隐藏。

如何执行 IP 地址转换取决于消息的类型和方向。消息可以是以下任何一项:

  • 入站请求

  • 出站响应

  • 出站请求

  • 入站响应

表 1 显示了在每种情况下如何执行 NAT。请注意,对于多个标头字段,ALG 确定的不仅仅是邮件是来自网络内部还是外部。它还必须确定哪个客户端发起了呼叫,以及消息是请求还是响应。

表 1:使用 NAT 表请求消息

入站请求

(从公共到私有)

自:

将域替换为本地地址

从:

没有

呼叫 ID:

没有

通过:

没有

请求 URI:

将 ALG 地址替换为本地地址

联系:

没有

记录路由:

没有

路线:

没有

出站响应

(从私人到公共)

自:

将 ALG 地址替换为本地地址

从:

没有

呼叫 ID:

没有

通过:

没有

请求 URI:

不适用

联系:

将本地地址替换为 ALG 地址

记录路由:

将本地地址替换为 ALG 地址

路线:

没有

出站请求

(从私人到公共)

自:

没有

从:

将本地地址替换为 ALG 地址

呼叫 ID:

没有

通过:

将本地地址替换为 ALG 地址

请求 URI:

没有

联系:

将本地地址替换为 ALG 地址

记录路由:

将本地地址替换为 ALG 地址

路线:

将 ALG 地址替换为本地地址

出站响应

(从公共到私有)

自:

没有

从:

将 ALG 地址替换为本地地址

呼叫 ID:

没有

通过:

将 ALG 地址替换为本地地址

请求 URI:

不适用

联系:

没有

记录路由:

将 ALG 地址替换为本地地址

路线:

将 ALG 地址替换为本地地址

SIP 正文

SIP 正文中的 SDP 信息包括 ALG 用于为媒体流创建通道的 IP 地址。SDP 部分的转换还会分配资源,即发送和接收介质的端口号。

以下摘录自示例 SDP 部分,显示了为资源分配转换的字段。

SIP 消息可以包含多个媒体流。这个概念类似于将多个文件附加到一封电子邮件。例如,从 SIP 客户端发送到 SIP 服务器的 INVITE 消息可能包含以下字段:

Junos OS 支持针对每个方向协商最多 6 个 SDP 通道,每次呼叫总共 12 个通道。

Junos OS SIP ALG 限制

以下限制适用于 SIP ALG 的配置:

  • 仅支持 RFC 3261 中描述的方法。

  • 仅支持 SIP 版本 2。

  • 不支持将 TCP 作为 MS-MPC 的信令消息传输机制,但支持新一代服务。

  • 使用 STUN 时,请勿配置 SIP ALG。 如果客户端使用 STUN/TURN 检测呼叫方与响应方或代理之间的防火墙或 NAT 设备,客户端将尝试最好地猜测 NAT 设备的行为并采取相应行动来发出呼叫。

  • 在 MS-MPC 上,请勿将与端点无关的映射 NAT 池选项与 SIP ALG 结合使用。 将导致错误。这不适用于新一代服务。

  • MS-MPC 不支持 IPv6 信令数据,但新一代服务支持 IPv6 信令数据。

  • 不支持身份验证。

  • 不支持加密消息。

  • MS-MPC 不支持 SIP 分片,但新一代服务支持 SIP。

  • 假定包含 SIP 消息的最大 UDP 数据包大小为 9 KB。不支持大于此值的 SIP 消息。

  • 假定 SIP 消息中的最大媒体通道数为 6 个。

  • 关键字段不支持完全限定域名 (FQDN)。

  • 不支持 QoS。SIP 支持 DSCP 重写。

  • 不支持高可用性,但热备用除外。

  • SIP 或 NAT 不支持超时设置从不。

  • 不支持组播(分叉代理)。