新一代服务应用层网关
本主题介绍 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
语句:[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
句:[edit applications application application-name] sip-call-hold-timeout seconds;
默认值为 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 地址,使其对外部网络隐藏。
INVITE bob@10.150.20.5
SIP/2.0 Via: SIP/2.0/UDP10.150.20.3
:5434 From: alice@10.150.20.3
To: bob@10.150.20.5
Call-ID: a12abcde@10.150.20.3
Contact: alice@10.150.20.3
:5434 Route: <sip:netscreen@10.150.20.3
:5060> Record-Route: <sip:netscreen@10.150.20.3
:5060>
如何执行 IP 地址转换取决于消息的类型和方向。消息可以是以下任何一项:
入站请求
出站响应
出站请求
入站响应
表 1 显示了在每种情况下如何执行 NAT。请注意,对于多个标头字段,ALG 确定的不仅仅是邮件是来自网络内部还是外部。它还必须确定哪个客户端发起了呼叫,以及消息是请求还是响应。
入站请求 (从公共到私有) |
自: |
将域替换为本地地址 |
从: |
没有 |
|
呼叫 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 部分,显示了为资源分配转换的字段。
o=user 2344234 55234434 IN IP410.150.20.3
c=IN IP410.150.20.3
m=audio43249
RTP/AVP 0
SIP 消息可以包含多个媒体流。这个概念类似于将多个文件附加到一封电子邮件。例如,从 SIP 客户端发送到 SIP 服务器的 INVITE 消息可能包含以下字段:
c=IN IP410.123.33.4
m=audio33445
RTP/AVP 0 c=IN IP410.123.33.4
m=audio33447
RTP/AVP 0 c=IN IP410.123.33.4
m=audio33449
RTP/AVP 0
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 不支持超时设置从不。
不支持组播(分叉代理)。