为下一代服务配置应用程序属性
要配置应用程序属性,请在[edit applications]
层次结构级别包含application
语句:
[edit applications] application application-name { application-protocol protocol-name; child-inactivity-timeout seconds; destination-port port-number; gate-timeout seconds; icmp-code value; icmp-type value; inactivity-timeout value; protocol type; rpc-program-number number; snmp-command command; source-port port-number; ttl-threshold value; uuid hex-value; }
您可以通过配置 application-set
语句对应用程序对象进行分组;有关更多信息,请参阅 配置应用程序集。
本节包括用于配置应用程序的以下任务:
配置应用程序协议
该application-protocol
语句允许您指定要在应用程序集中配置哪些受支持的应用程序协议 (ALG) 并将其包含在服务处理的应用程序集中。要配置应用程序协议,请在[edit applications application application-name]
层次结构级别包含语application-protocol
句:
[edit applications application application-name] application-protocol protocol-name;
表 1 显示了下一代服务支持的协议列表。有关特定协议的详细信息,请参阅 ALG 说明。
协议名称 |
CLI 值 |
评论 |
---|---|---|
自举协议 (BOOTP) |
|
支持 BOOTP 和动态主机配置协议 (DHCP)。 |
分布式计算环境 (DCE) 远程过程调用 (RPC) |
|
要求 |
DCE RPC 端口映射 |
|
要求 |
域名系统 (DNS) |
|
要求 |
执行 |
|
要求 |
FTP |
|
要求 |
H.323型 |
|
– |
互联网控制信息协议 (ICMP) |
|
要求 |
IP |
|
– |
登录 |
|
– |
NetBIOS |
|
要求 |
NetShow(网络显示) |
|
要求 |
真实音频 |
|
– |
实时流协议 (RTSP) |
|
要求 |
会话启动协议 |
|
– |
SNMP |
|
要求 |
SQLNet |
|
要求 |
谈话节目 |
|
|
跟踪路由 |
|
要求 |
简单 FTP (TFTP) |
|
要求 |
WinFrame |
|
– |
当同一服务集中配置两次 NAT 时,您可以为 ICMP 配置应用级网关 (ALG),并在有状态防火墙、NAT 或 CoS 规则下跟踪路由。这些 ALG 无法应用于由数据包网关控制器协议 (PGCP) 创建的流。TWICE NAT 不支持任何其他 ALG。NAT 仅应用 IP 地址和 TCP 或 UDP 报头,而不应用有效负载。
有关配置两次 NAT 的详细信息,请参阅 Junos Address Aware 网络寻址概述。
配置网络协议
该protocol
语句允许您指定在应用程序定义中匹配哪些受支持的网络协议。要配置网络协议,请在[edit applications application application-name]
层次结构级别包含语protocol
句:
[edit applications application application-name] protocol type;
将协议类型指定为数值;对于更常用的协议,命令行界面 (CLI) 中还支持文本名称。 表 2显示了支持的协议列表。
网络协议类型 |
CLI 值 |
评论 |
---|---|---|
外部网关协议 (EGP) |
|
– |
通用路由封装 (GR) |
|
– |
ICMP |
|
要求值 |
ICMPv6 |
|
要求值 |
互联网组管理协议 (IGMP) |
|
– |
TCP |
|
需要 |
UDP |
|
需要 |
有关可能的数值的完整列表,请参阅 RFC 1700,分配的编号(适用于 Internet 协议套件)。
在应用程序定义中,不支持将 IP 版本 6 (IPv6) 作为网络协议。
默认情况下,两次 NAT 功能可能会影响嵌入在 ICMP 错误消息有效负载中的 IP、TCP 和 UDP 报头。对于两次 NAT 配置,您可以在应用程序语句中包含 protocol tcp
和 protocol udp
语句。有关配置两次 NAT 的详细信息,请参阅 Junos Address Aware 网络寻址概述。
配置 ICMP 代码和类型
ICMP 代码和类型与网络协议一起为应用定义中的数据包匹配提供了附加规范。要配置 ICMP 设置,请在[edit applications application application-name]
层次结构级别包括 icmp-code
和 icmp-type
语句:
[edit applications application application-name] icmp-code value; icmp-type value;
您只能包含一个 ICMP 代码和类型值。语 application-protocol
句的值 icmp
必须为 。 表 3 显示了支持的 ICMP 值列表。
CLI 语句 |
描述 |
---|---|
|
此值或关键字提供比 要代替数值,可以指定以下文本同义词之一(也会列出字段值)。关键字按与之关联的 ICMP 类型进行分组: 参数问题: 重定向: 超时: 无法访问: |
|
通常,您会结合 要代替数值,可以指定以下文本同义词之一(也会列出字段值): |
如果使用包含拒绝操作的输入防火墙过滤器以及包含状态防火墙规则的服务集配置接口,则路由器将先执行输入防火墙过滤器,然后再对数据包运行状态防火墙规则。因此,当数据包转发引擎通过接口发出 ICMP 错误消息时,状态防火墙规则可能会丢弃数据包,因为在输入方向上看不到数据包。
可能的解决方法是包括一个转发表过滤器来执行拒绝操作,因为这种类型的过滤器是在输入方向上的状态防火墙之后执行的,或者包括一个输出服务过滤器,以防止本地生成的 ICMP 数据包进入状态防火墙服务。
配置源端口和目标端口
TCP 或 UDP 源端口和目标端口与网络协议一起为应用程序定义中的数据包匹配提供附加规范。要配置端口,请在[edit applications application application-name]
层次结构级别包括 destination-port
和 source-port
语句:
[edit applications application application-name] destination-port value; source-port value;
您必须定义一个源端口或目标端口。通常,您会结合 protocol
match 语句指定此匹配,以确定端口上使用的是哪种协议。
您可以指定数值,也可以指定 表 4 中列出的文本同义词之一。
端口名称 |
对应端口号 |
---|---|
|
|
|
|
有关匹配条件的详细信息,请参阅 《路由策略、防火墙过滤器和流量监管器用户指南》。
配置非活动超时期限
您可以为应用程序处于非活动状态指定超时期限。如果软件在这段时间内未检测到任何活动,则当计时器过期时,流将变为无效。要配置超时期限,请在[edit applications application application-name]
层次结构级别包含语inactivity-timeout
句:
[edit applications application application-name] inactivity-timeout seconds;
默认值为 14,400 秒。您为应用程序配置的值将覆盖在 [edit interfaces interface-name service-options]
层次结构级别上配置的任何全局值;有关更多信息,请参阅 配置服务接口的默认超时设置。
配置 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 地址转换取决于消息的类型和方向。消息可以是以下任何一项:
入站请求
出站响应
出站请求
入站响应
表 5 显示了在每种情况下如何执行 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 不支持超时设置从不。
不支持组播(分叉代理)。
配置用于数据包匹配的 SNMP 命令
您可以指定用于数据包匹配的 SNMP 命令设置。要配置 SNMP,请在[edit applications application application-name]
层级包含以下snmp-command
语句:
[edit applications application application-name] snmp-command value;
支持的值为 get
、 get-next
、 set
和 trap
。您只能配置一个匹配值。 application-protocol
层次结构级别的语句 [edit applications application application-name]
必须具有值 snmp
。