SIP ALG
会话启动协议 (SIP) 是一种用于通过互联网启动、修改和终止多媒体会话的信令协议。SIP 支持单媒体和多媒体会话。
了解 SIP ALG
会话启动协议 (SIP) 是互联网工程任务组 (IETF) 标准协议,用于通过互联网启动、修改和终止多媒体会话。此类会话可能包括会议、电话或多媒体,具有即时消息和网络环境中的应用级移动性等功能。
Junos OS 支持 SIP 即服务,可根据您配置的策略允许和拒绝它。SIP 是 Junos OS 中的一项预定义服务,使用端口 5060 作为目的端口。
SIP 的功能之一是分发会话描述信息,并在会话期间协商和修改会话的参数。SIP 还用于终止多媒体会话、发出呼叫建立信号、提供故障指示以及提供端点注册方法。
会话描述信息包含在INVITE和200-OK消息或200-OK和ACK消息中,并指示会话的多媒体类型;例如,无论是语音还是视频。虽然 SIP 可以使用不同的描述协议来描述会话,但瞻博网络 SIP 应用层网关 (ALG) 仅支持会话描述协议 (SDP)。
SDP 提供系统可用于加入多媒体会话的信息。SDP 可能包括 IP 地址、端口号、时间和日期等信息。请注意,SDP报头中的IP地址和端口号(分别为c=和m=字段)是客户端要接收媒体流的地址和端口,而不是SIP请求的来源IP地址和端口号(尽管它们可以相同)。
SIP 消息包括从客户端到服务器的请求以及对从服务器到客户端的请求的响应,目的是建立会话(或呼叫)。用户代理 (UA) 是在呼叫端点上运行的应用程序,由两部分组成:
-
用户代理客户端 (UAC),代表用户发送 SIP 请求
-
用户代理服务器 (UAS),监听响应并在响应到达时通知用户
UAC 和 UAS 是根据特定代理在协商中所扮演的角色进行定义的。
UA 的示例包括 SIP 代理服务器和电话。
本主题包含以下部分:
SIP ALG 操作
SIP 流量有两种类型:信令和媒体流。SIP 信令流量由客户端和服务器之间的请求和响应消息组成,并使用 UDP 或 TCP 等传输协议。媒体流使用传输协议传输数据(例如音频数据)。
从 Junos OS 12.3X48-D25 版和 Junos OS 17.3R1 版开始,SIP ALG 支持 TCP。通过 SIP ALG 支持 TCP 无需频繁重新注册或刷新服务器,从而减少了服务器的流量。
默认情况下,Junos OS 支持在端口 5060 上发送 SIP 信令消息。您可以通过创建允许 SIP 服务的策略来配置端口,并且软件会像过滤任何其他类型的流量一样过滤 SIP 信令流量,允许或拒绝它。但是,媒体流使用动态分配的端口号,这些端口号在呼叫过程中可能会多次更改。如果没有固定端口,创建静态策略来控制媒体流量是不安全的。在这种情况下,设备将调用 SIP ALG。事先不知道用于媒体会话的设备传输端口;但是,用于 SIP 协商的端口是众所周知的(或预定义的)。ALG 记录对来自控制会话的数据包的兴趣(可以轻松将其与其他数据包区分开来),并检查用于媒体会话的传输信息(IP 地址和端口)的协商。
SIP ALG 在确定匹配的 IP、端口、传输地址和协议时创建针孔,这些 IP 、端口、传输地址和协议将使用针孔打开时已知的任何信息进行标识。
SIP ALG 监控 SIP 事务,并根据从这些事务中提取的信息动态创建和管理针孔。瞻博网络 SIP ALG 支持所有 SIP 方法和响应。您可以通过创建允许 SIP 服务的静态策略,允许 SIP 事务遍历瞻博网络防火墙。如果将策略配置为检查 SIP 流量(或者更恰当地说,如果策略将一些流量发送到 SIP ALG 进行检查),则允许的操作是允许流量(在这种情况下,打开相应的针孔)或拒绝流量。
SIP ALG 拦截包含 SDP 的 SIP 消息,并使用解析器提取创建针孔所需的信息。SIP ALG 检查数据包的 SDP 部分,解析器提取 IP 地址和端口号等信息,SIP ALG 将这些信息记录在针孔表中。SIP ALG 使用针孔表中记录的 IP 地址和端口号来打开针孔并允许媒体流遍历设备。
当设备执行 NAT 时,UA 采用的传输地址不正确。SIP ALG 根据转换网络地址设备分配的转换端口和地址修改传输地址。加密 SDP 后,设备无法提取或修改邮件内容,因此无法更正传输地址。为了提供解决方法,已经部署了 STUN 协议(要求 NAT 设备执行某种形式的锥体 NAT),该协议允许客户端确定转换后的地址并在 SDP 消息中使用这些新发现的地址。
有条件支持 NEC SIP 产品。
SDP 会话说明
SDP 会话描述是一种定义明确的格式,用于传达足够的信息以发现和参与多媒体会话。会话由一系列属性/值对描述,每行一个。属性名称为单个字符,后跟 = 和值。可选值用 =* 指定。值可以是 ASCII 字符串,也可以是用空格分隔的特定类型序列。属性名称仅在关联的语法结构中唯一,例如仅在会话、时间或媒体中。
在 SDP 会话说明中,介质级信息以 m= 字段开头。
在 SDP 说明中的众多字段中,有两个字段对 SIP ALG 特别有用,因为它们包含传输层信息。
-
c=有关连接信息此字段可以显示在会话或媒体级别。它以以下格式显示:
c=<network-type><address-type><connection-address>
Junos OS 仅支持将“IN”(用于互联网)作为网络类型,支持将“IPv4”作为地址类型,并支持将单播 IP 地址或域名作为目标(连接)IP 地址。从 Junos OS 15.1X49-D40 版和 Junos OS 17.3R1 版开始,还支持“IPv6”地址类型。
如果目标 IP 地址是单播 IP 地址,则 SIP ALG 使用介质描述字段 m= 中指定的 IP 地址和端口号创建针孔。
-
m=用于媒体发布此字段显示在介质级别,包含介质的说明。它以以下格式显示:
m=<media><port><transport><fmt list>
目前,Junos OS 支持“RTP”作为应用层传输协议。端口号表示媒体流的目的端口(源端口由远程 UA 分配)。格式列表 (fmt 列表) 提供有关媒体使用的应用层协议的信息。
软件仅为 RTP 和实时控制协议 (RTCP) 打开端口。每个 RTP 会话都有一个对应的 RTCP 会话。因此,每当媒体流使用 RTP 时,SIP ALG 都必须为 RTP 和 RTCP 流量保留端口(创建针孔)。默认情况下,RTCP 的端口号比 RTP 端口号高 1。
针孔创建
每个针孔(一个用于 RTP 流量,另一个用于 RTCP 流量)共享相同的目标 IP 地址。IP 地址来自 SDP 会话说明中的 c= 字段。由于 c= 字段可以出现在 SDP 会话描述的会话级别或介质级别部分,因此解析器根据以下规则确定 IP 地址(根据 SDP 约定):
-
首先,SIP ALG 解析器在介质级别查找包含 IP 地址的 c= 字段。如果有这样的字段,解析器将提取该 IP 地址,SIP ALG 使用该地址为介质创建针孔。
-
如果介质级别中没有 c= 字段,则 SIP ALG 解析器从会话级别的 c= 字段中提取 IP 地址,SIP ALG 使用该 IP 地址为介质创建针孔。如果会话描述在任一级别中都不包含 c= 字段,则表示协议堆栈中存在错误,设备将丢弃数据包并记录事件。
SIP ALG 还可以为信号流量打开针孔。这些信号针孔在上一个信号会话超时后很有用,对于发送到与上一个信号会话不匹配的第三方地址的信号流量也很有用。与仅指定目标 IP 和目标端口的 RTP 或 RTCP 针孔不同,SIP ALG 信号针孔永远不会老化。
如果需要,SIP ALG 会为以下接头打开信号针孔:
-
通过
-
联系我们
-
路由
-
记录路由
SIP ALG 需要提供以下信息才能创建针孔。此信息来自 SDP 会话说明或 SIP 报头(如上所示)。
-
协议 — UDP 或 TCP。
-
源 IP - 未知。
-
源端口 - 未知。
-
目标 IP — 解析器从介质或会话级别的 c= 字段中提取目标 IP 地址。
-
目标端口 — 解析器从媒体级别的 m= 字段中提取 RTP 的目标端口号,并使用以下公式计算 RTCP 的目标端口号:
RTP 端口号 + 1
-
生存期 — 此值表示针孔打开以允许数据包通过的时间长度(以秒为单位)。数据包必须在生存期到期前通过针孔。当生存期到期时,SIP ALG 将移除针孔。
当数据包在生存期内通过针孔时,SIP ALG 会立即移除数据包来源方向的针孔。
图 1 介绍了两个 SIP 客户端之间的呼叫设置,以及 SIP ALG 如何创建针孔以允许 RTP 和 RTCP 流量。该图假定设备具有允许 SIP 的策略,从而为 SIP 信令消息打开端口 5060。
图 1:SIP ALG 呼叫设置
当目标 IP 地址为 0.0.0.0 时,SIP ALG 不会为 RTP 和 RTCP 流量创建针孔,这表示会话处于暂停状态。例如,要在电话通信期间将会话置于保留状态,客户端 A 向客户端 B 发送目标 IP 地址为 0.0.0.0 的 SIP 消息。这样做会向客户端 B 指示,在另行通知之前不应发送任何媒体。如果客户端 B 仍然发送媒体,则设备将丢弃数据包。
- 了解 SIP ALG 的 IPv6 支持
- 了解基于 UDP 的 SIP ALG 的缩放忙灯字段支持
- 了解 SIP ALG 请求方法
- SIP ALG 配置概述
- 了解 SIP ALG DoS 攻击保护
- 了解 SIP ALG 未知消息类型
- 了解 SIP ALG 呼叫持续时间和超时
了解 SIP ALG 的 IPv6 支持
SIP ALG 支持 IPv6,同时支持 NAT-PT 模式和 NAT64 地址转换。
如果配置了 NAT,SIP ALG 处理 IPv6 地址的方式与处理 IPv4 地址的方式相同,以便更新有效负载并为将来的流量打开针孔。
对以下格式进行特殊处理:
-
IPv6 in SIP URIs— SIP URI 看起来与具有 IPv4 地址的 URI 相同。与所有 URI 一样,IPv6 地址用方括号括起来。IPv6 地址块用冒号分隔。在许多标记法中,冒号将主机名或 IP 地址与协议端口分隔开。要解析完整的 IPv6 地址并分离端口,地址会封装在方括号内
-
IPv6 in SDP— 会话描述协议 (SDP) 中的 IPv6 地址具有 IP6 标记。
-
支持 IPv6 的 SIP ALG 具有以下限制:
-
实施具有持久 NAT 的 NAT64 后,如果在记录地址 (AOR) 上配置了 NAT,则 SIP ALG 会将 NAT 转换添加到持久 NAT 绑定表中。由于持久 NAT 无法复制配置的地址,因此不支持在同一地址上配置的 NAT66 和 NAT64 共存。
仅为同一源 IP 地址创建一个绑定。
-
了解基于 UDP 的 SIP ALG 的缩放忙灯字段支持
忙灯字段 (BLF) 是 IP 电话上的指示灯,指示连接到同一专用交换机 (PBX) 的另一个分机是否忙。您可以使用 Web 界面手动配置 BLF。配置 BLF 后,电话将订阅 IP PBX 上可用的资源列表,以便收到其他分机的状态信息通知。BLF 通过会话启动协议 (SIP) 工作,并使用 SUBSCRIBE 和 NOTIFY 消息。通常,电话是用户,IP PBX 是通知程序。
当电话注册到 IP PBX 时,IP PBX 会通知电话资源列表的状态。例如,如果资源列表很大,那么 NOTIFY 消息的正文也会很大。由于 SIP ALG 仅支持 3000 字节的 SIP 消息,因此它会绕过巨大的 NOTIFY 消息。如果消息正文中 BLF 的实例过多,则不会更改有效负载,也不会打开门。
从 Junos OS 12.3X48-D15 版和 Junos OS 17.3R1 版开始,SIP ALG 支持 UDP 协议上 65,000 字节的 SIP 消息。在扩展 BLF 应用程序中,如果每个实例都在 500 字节左右,则 SIP ALG 在一条 SIP UDP 消息中支持 100 个实例。
对基于 UDP 的 SIP ALG 的 BLF 支持包括以下功能:
-
该设备可以发送和接收 65,000 字节的 SIP 消息。
-
SIP ALG 可以解析 65,000 字节的 SIP 消息,并在需要时打开针孔。
-
如果配置了 NAT 并且有效负载发生了变化,SIP ALG 将重新生成新的巨型 SIP 消息。
了解 SIP ALG 请求方法
会话启动协议 (SIP) 事务模型包括许多请求和响应消息,每个消息都包含一个 method 字段,表示消息的用途。
Junos OS 支持以下方法类型和响应代码:
-
INVITE - 用户发送 INVITE 请求以邀请其他用户参与会话。INVITE 请求的正文可以包含会话的描述。
-
ACK — 发出 INVITE 的用户发送 ACK 请求,以确认收到对 INVITE 请求的最终响应。如果原始 INVITE 请求不包含会话说明,则 ACK 请求必须包含它。
-
OPTIONS—用户代理 (UA) 获取有关 SIP 代理功能的信息。服务器响应有关它支持的方法、会话描述协议和消息编码的信息。
-
BYE — 用户发送 BYE 请求以放弃会话。任一用户发出的 BYE 请求会自动终止会话。
-
CANCEL - 用户发送 CANCEL 请求以取消挂起的 INVITE 请求。如果处理 INVITE 的 SIP 服务器在收到 CANCEL 之前已发送 INVITE 的最终响应,则 CANCEL 请求无效。
-
REGISTER—用户向SIP注册服务器发送REGISTER请求,以通知其用户的当前位置。SIP 注册器服务器记录它在 REGISTER 请求中收到的所有信息,并将此信息提供给任何尝试查找用户的 SIP 服务器。
-
信息 - 用于沿呼叫的信令路径传送会话中信令信息。
-
订阅 — 用于从远程节点请求当前状态和状态更新。
-
通知 - 发送以通知订阅者订阅者所订阅的状态的更改。
-
引用 — 用于通过请求中提供的联系信息将收件人(由请求 URI 标识)推荐给第三方。
例如,如果专用网络中的用户 A 将公共网络中的用户 B 推荐给同样在专用网络中的用户 C,则 SIP 应用层网关 (ALG) 会为用户 C 分配新的 IP 地址和端口号,以便用户 B 可以联系用户 C。但是,如果用户 C 已在注册商处注册,则其端口映射将存储在 ALG 网络地址转换 (NAT) 表中,并被重复用于执行转换。
-
更新 (Update) - 用于打开针孔以获取新的或更新的 SDP 信息。修改了 Via:、From:、To:、Call-ID:、Contact:、Route: 和 Record-Route: 标头字段。
-
1xx、202、2xx、3、4xxxx、5xx、6xx 响应代码 — 用于指示事务的状态。标头字段已修改。
SIP ALG 配置概述
默认情况下,SRX 设备上会禁用会话启动协议应用层网关 (SIP ALG),如果需要,应使用 CLI 启用该网关。在其他设备上,默认启用。要微调 SIP ALG 操作,请使用以下说明:
-
控制 SIP 呼叫活动。有关说明,请参阅 示例:设置 SIP ALG 呼叫持续时间和超时。
-
保护 SIP 代理服务器免受拒绝服务 (DoS) 泛洪攻击。有关说明,请参阅 示例:配置 SIP ALG DoS 攻击保护。
-
当会话处于网络地址转换 (NAT) 模式和路由模式时,允许传递未知消息。有关说明,请参阅 示例:允许未知的 SIP ALG 消息类型。
-
适应专用 SIP 呼叫流。有关说明,请参阅保留 SIP ALG 保留资源(CLI 过程)
了解 SIP ALG DoS 攻击保护
会话启动协议 (SIP) 代理服务器处理呼叫的能力可能会受到重复的 SIP INVITE 请求(最初被拒绝的请求)的影响。拒绝服务 (DoS) 保护功能使您能够将设备配置为监控 INVITE 请求和代理服务器对它们的回复。如果回复包含 401、407、487 和 488 以外的 3xx, 、4xx 或 5xx 响应代码,这些响应代码不是真正的失败响应,则不应阻止该请求。请参阅 了解 SIP ALG 和 NAT。ALG 将请求的源 IP 地址和代理服务器的 IP 地址存储在一个表中。随后,设备根据此表检查所有 INVITE 请求,并在可配置的秒数(默认为 3)内丢弃与表中的条目匹配的任何数据包。您可以将设备配置为监控和拒绝对所有代理服务器的重复 INVITE 请求,也可以通过指定目标 IP 地址来保护特定的代理服务器。SIP 攻击保护是全局配置的。
了解 SIP ALG 未知消息类型
通过此功能,您可以指定设备如何处理未识别的会话启动协议 (SIP) 消息。默认设置是丢弃未知(不受支持)的消息。
不建议允许未知消息,因为它们可能会危及安全性。但是,在安全测试或生产环境中,此命令可用于解决与不同供应商设备的互操作性问题。允许未知的 SIP 消息有助于让您的网络正常运行,以便以后可以分析 IP 语音 (VoIP) 流量,以确定某些消息被丢弃的原因。未知 SIP 消息类型功能允许您将设备配置为在网络地址转换 (NAT) 模式和路由模式下接受包含未知消息类型的 SIP 流量。
此选项仅适用于已接收的标识为受支持 VoIP 数据包的数据包。如果无法识别数据包,则始终将其丢弃。如果数据包被识别为受支持的协议,并且您已将设备配置为允许未知消息类型,则该消息将被转发而不进行处理。
了解 SIP ALG 呼叫持续时间和超时
呼叫持续时间和超时功能使您可以控制会话启动协议 (SIP) 呼叫活动并帮助您管理网络资源。
通常,当其中一个客户端发送 BYE 或 CANCEL 请求时,调用结束。SIP 应用层网关 (ALG) 拦截 BYE 或 CANCEL 请求,并删除该呼叫的所有媒体会话。可能存在原因或问题阻止呼叫中的客户端发送 BYE 或 CANCEL 请求,例如电源故障。在这种情况下,呼叫可能会无限期地持续,从而耗费设备上的资源。
呼叫可以有一个或多个语音通道。每个语音通道有两个会话(或两个媒体流),一个用于实时传输协议 (RTP) 流量,一个用于实时控制协议 (RTCP) 信令。管理会话时,设备会将每个语音通道中的会话视为一个组。超时和通话持续时间设置适用于组,而不是每个会话。
以下参数控制 SIP 呼叫活动:
-
inactive-media-timeout— 此参数表示呼叫可以在组内没有任何媒体(RTP 或 RTCP)流量的情况下保持活动状态的最长时间(以秒为单位)。每次呼叫中出现 RTP 或 RTCP 数据包时,此超时都会重置。当不活动时间超过此设置时,SIP ALG 为媒体打开的防火墙中的临时开口(针孔)将关闭。默认设置为 120 秒,范围为 10 到 2550 秒。请注意,超时后,媒体资源(会话和针孔)将被删除,如果此呼叫的所有媒体资源都已删除,设备上的 SIP 呼叫也将终止。 -
maximum-call-duration- 此参数设置呼叫的绝对最大长度。当呼叫超过此参数设置时,SIP ALG 将中断呼叫并释放媒体会话。默认设置为 720 分钟,范围为 3 到 720 分钟。 -
t1-interval- 此参数指定端点之间事务的往返时间估计(以秒为单位)。默认设置为 500 毫秒。由于许多 SIP 计时器随 t1 间隔进行扩展(如 RFC 3261 中所述),因此当您更改 t1 间隔计时器的值时,这些 SIP 计时器也会调整。 -
t4-interval- 此参数指定消息在网络中保留的最长时间。默认值为 5 秒,范围为 5 到 10 秒。由于许多 SIP 计时器会随 t4 间隔进行扩展(如 RFC 3261 中所述),因此当您更改 t4 间隔计时器的值时,这些 SIP 计时器也会进行调整。 -
c-timeout—此参数指定代理处的INVITE事务超时,以分钟为单位;默认值为 3。由于 SIP ALG 位于中间,因此 SIP ALG 不使用 INVITE 事务计时器值 B(即 (64 * T1) = 32 秒),而是从代理获取其计时器值。
了解 SIP ALG 保留资源
当用户将呼叫置于保持状态时,会话启动协议应用层网关 (SIP ALG) 会释放会话描述协议 (SDP) 媒体资源,例如针孔和转换上下文。当用户恢复呼叫时,INVITE 请求消息将协商新的 SDP 要约和应答,SIP ALG 会为媒体流重新分配资源。即使媒体描述与之前的描述相同,这也可能导致介质描述具有新的转换 IP 地址和端口号。这符合 RFC 3264,具有会话描述协议 (SDP) 的要约/应答模型。
某些专用 SIP 实施已设计呼叫流,以便用户代理 (UA) 模块忽略新的 SDP INVITE 产品/服务,并继续使用上一次协商的 SDP 产品/服务。若要容纳此功能,您必须将设备配置为保留呼叫时保留 SDP 媒体资源,以便在呼叫恢复时重复使用。
保留 SIP ALG 保留资源(CLI 过程)
要适应专用 SIP 呼叫流:
user@host# set security alg sip retain-hold-resource
了解 SIP、ALG 和 NAT
网络地址转换 (NAT) 协议使专用子网中的多个主机能够共享单个公共 IP 地址以访问互联网。对于传出流量,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 ALG 支持 IPv6,同时支持 NAT-PT 模式和 NAT64 地址转换。
本主题包含以下部分:
- 去电
- 来电
- 呼叫转移
- 呼叫终止
- 呼叫重新邀请消息
- 呼叫会话计时器
- 呼叫取消
- 分叉
- SIP 消息
- SIP 报头
- SIP 正文
- SIP NAT 方案
- SIP 响应类别
- 用于 SIP IPv6 ALG 的纯 IPv6 模式 (NAT66) 中的 NAT 模式
- NAT-PT
- NAT64
- STUN 和 SIP ALG
去电
当 SIP 呼叫发起时,有来自内部网络到外部网络的 SIP 请求消息,NAT 将替换 SDP 中的 IP 地址和端口号,并将 IP 地址和端口号绑定到瞻博网络防火墙。Via、Contact、Route 和 Record-Route SIP 报头字段(如果存在)也绑定到防火墙 IP 地址。ALG 存储这些映射,用于重传和 SIP 响应消息。
然后,SIP ALG 会打开防火墙中的针孔,允许介质通过根据 SDP 以及 Via、Contact 和 Record-Route 标头字段中的信息协商的动态分配端口上的设备。针孔还允许传入数据包到达接触、通过和记录路由 IP 地址和端口。处理返回流量时,ALG 会将原始联系人、Via、路由和记录路由 SIP 字段插入回数据包中。
来电
传入呼叫从公共网络发起到公共静态 NAT 地址或设备上的接口 IP 地址。静态 NAT 是静态配置的指向内部主机的 IP 地址;接口 IP 地址由 ALG 动态记录,因为它会监控内部主机发送到 SIP 注册器的 REGISTER 消息。当设备收到传入的 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 消息时,它会像转换任何其他消息一样转换标头字段。但是,由于接收方必须通过 200 OK 确认 BYE 消息,因此 ALG 会将调用拆解延迟 5 秒,以便有时间传输 200 OK。
呼叫重新邀请消息
重新邀请消息可将新的媒体会话添加到呼叫中并删除现有媒体会话。将新的媒体会话添加到呼叫中时,防火墙中将打开新的针孔并创建新的地址绑定。该过程与原始呼叫设置相同。从呼叫中删除所有媒体会话或媒体针孔后,当收到 BYE 消息时,呼叫将被删除。
呼叫会话计时器
作为预防措施,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.5SIP/2.0 Via: SIP/2.0/UDP10.150.20.3:5434 From: alice@10.150.20.3To: bob@10.150.20.5Call-ID: a12abcde@10.150.20.3Contact: 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.3c=IN IP410.150.20.3m=audio43249RTP/AVP 0
SIP 消息可以包含多个媒体流。其概念类似于将多个文件附加到电子邮件中。例如,从 SIP 客户端发送到 SIP 服务器的 INVITE 消息可能具有以下字段:
c=IN IP410.123.33.4m=audio33445RTP/AVP 0 c=IN IP410.123.33.4m=audio33447RTP/AVP 0 c=IN IP410.123.33.4m=audio33449RTP/AVP 0
Junos OS 支持为每个方向协商多达 6 个 SDP 通道,因此每次调用总共 12 个通道。有关更多信息,请参阅 了解 SIP ALG。
SIP NAT 方案
图 2 和 图 3 显示了 SIP 呼叫 INVITE 和 200 OK。在 图 2 中,ph1 向 ph2 发送 SIP INVITE 消息。请注意设备如何转换标头字段中的 IP 地址(以粗体显示)。
INVITE 消息的 SDP 部分指示呼叫方愿意接收媒体的位置。请注意,介质针孔包含两个端口号,52002 和 52003,用于 RTCP 和 RTP。通孔/触点针孔提供用于 SIP 信令的端口号 5060。
观察在 图 3 的 200 OK 响应消息中,INVITE 消息中执行的转换是如何反转的。此消息中的 IP 地址是公共的,不会被转换,但会打开门以允许媒体流访问专用网络。
SIP 响应类别
SIP 响应提供有关 SIP 事务的状态信息,并包括响应代码和原因短语。SIP 响应分为以下几类:
-
信息性(100 到 199)—已收到请求,继续处理请求。
-
成功(200 到 299)——成功接收、理解和接受操作。
-
重定向(300 到 399) - 完成请求所需的进一步操作。
-
客户端错误(400 到 499) — 请求包含错误的语法或无法在此服务器上完成。
-
服务器错误(500 到 599)—服务器未能满足看似有效的请求。
-
全局故障(600 到 699)—请求无法在任何服务器上实现。
表 2 提供了当前 SIP 响应的完整列表。
|
信息性 |
100 试用 |
180 响铃 |
181 呼叫正在转接中 |
|
182 排队 |
183 会话进度 |
|
|
|
成功 |
200 确定 |
202 已接受 |
|
|
重定向 |
300 多个选择 |
301 永久搬迁 |
302 暂时搬迁 |
|
305 使用代理 |
380 替代服务 |
|
|
|
客户端错误 |
400 错误请求 |
401 未经授权 |
402 需要付款 |
|
403 禁忌 |
404 未找到 |
405 不允许使用 |
|
|
406 不可接受 |
407 需要代理身份验证 |
408 请求超时 |
|
|
409 冲突 |
410 不见了 |
411 所需长度 |
|
|
413 请求实体太大 |
414 请求 URL 过大 |
415 不支持的介质类型 |
|
|
420 扩展错误 |
480 暂时不可用 |
481 调用段/交易不存在 |
|
|
检测到 482 环路 |
483 跳跃过多 |
484 地址不完整 |
|
|
485 不明确 |
486 这里很忙 |
487 请求已取消 |
|
|
488 这里不可接受 |
|
|
|
|
服务器错误 |
500 服务器内部错误 |
501 未实施 |
502 网关故障 |
|
502 服务不可用 |
504 网关超时 |
不支持 505 SIP 版本 |
|
|
全局故障 |
600 处处繁忙 |
603 下降 |
604 在任何地方都不存在 |
|
606 不可接受 |
|
|
用于 SIP IPv6 ALG 的纯 IPv6 模式 (NAT66) 中的 NAT 模式
SIP IPv6 ALG 支持 NAT66,就像 NAT44 一样。NAT66 (IPv6 NAT) 提供源 NAT 和静态 NAT 功能,类似于 NAT44 (IPv4 NAT)。
NAT-PT
网络地址转换协议转换 (NAT-PT) (RFC 2766) 是一种协议转换机制,允许通过 IPv4 和 IPv6 数据报的协议无关转换在仅支持 IPv6 和仅支持 IPv4 的节点之间进行通信,不需要会话的状态信息。
NAT-PT 由从 IPv6 地址到 IPv4 地址的普通 NAT 实现,反之亦然。SIP ALG 在有效负载中处理这些地址转换,就像在正常 NAT 中处理地址一样。
NAT-PT 将 IPv6 网络中的地址与 IPv4 网络中的地址进行绑定(反之亦然),以便为在地址域之间遍历的数据报提供透明路由。
NAT-PT 的主要优点是终端设备和网络可以运行 IPv4 地址或 IPv6 地址,并且流量可以从任何一端启动。
NAT64
NAT64 是一种允许 IPv6 主机与 IPv4 服务器通信的机制。需要 NAT64 来保留 IPv6 到 IPv4 的地址映射。此类地址映射可以由系统管理员静态配置(无状态转换),或者更频繁地在来自 IPv6 网络的第一个数据包达到要转换的 NAT64(状态)时自动创建。
NAT64 使用持久 NAT 在设备上实施NAT。当第一个 SIP 请求消息(第一个数据包应仅来自 IPv6)穿越 DUT 时,将创建地址绑定,然后数据包可以双向流动。
NAT64 机制将 IPv6 数据包转换为 IPv4 数据包,反之亦然,这使得 IPv6 客户端可以使用单播 UDP、TCP 或 ICMP 与 IPv4 服务器进行通信。NAT-PT 和 NAT64 的行为看起来相似,但这些机制的实现方式不同。
实施具有持久 NAT 的 NAT64 时,如果在记录地址上配置了 NAT,则支持 IPv6 的 SIP ALG 会将 NAT 转换添加到持久 NAT 绑定表中。由于持久 NAT 无法复制配置的地址,因此不支持在同一地址上配置的 NAT66 和 NAT64 共存。
仅为同一源 IP 地址创建一个绑定。
STUN 和 SIP ALG
NAT 会话遍历公用事业 (STUN) 是一种使 VoIP 通过 NAT 和防火墙工作的解决方案。
以前,STUN 可以在没有 SIP ALG 的情况下工作。这意味着,配置持久 NAT 时,SIP ALG 未参与。
STUN 可以与 SIP ALG 共存,并且在配置持久性 NAT 时涉及 SIP ALG。
了解使用 SIP 注册器和 NAT 的传入 SIP ALG 呼叫支持
会话启动协议 (SIP) 注册提供了一种发现功能,SIP 代理和位置服务器可以通过该功能识别要联系的用户的一个或多个位置。用户通过向注册商发送 REGISTER 消息来注册一个或多个联系人位置。REGISTER 消息中的“收件人”和“联系人”字段包含记录地址统一资源标识符 (URI) 和一个或多个联系人 URI,如下图所示。注册在定位服务中创建绑定,该绑定将记录地址与一个或多个联系人地址相关联。
设备监控传出 REGISTER 消息,对这些地址执行网络地址转换 (NAT),并将信息存储在传入 NAT 表中。然后,当从网络外部收到 INVITE 消息时,设备将使用传入 NAT 表来识别要将 INVITE 消息路由到哪个内部主机。您可以通过在设备的出口接口上配置接口源 NAT 或 NAT 池来利用 SIP 代理注册服务来允许传入呼叫。接口源 NAT 足以处理小型办公室的传入呼叫,而我们建议为大型网络或企业环境设置源 NAT 池。
仅 SIP 和 H.323 服务支持使用接口源 NAT 或源 NAT 池的来电支持。对于传入呼叫,Junos OS 当前仅支持 UDP 和 TCP。目前也不支持域名解析;因此,URI 必须包含 IP 地址,如下图所示。
示例:设置 SIP ALG 呼叫持续时间和超时
此示例说明如何设置通话时长和媒体不活动超时。
要求
开始之前,请查看用于控制 SIP 呼叫活动的呼叫持续时间和超时功能。请参阅 了解 SIP ALG 呼叫持续时间和超时。
概述
呼叫持续时间和非活动媒体超时功能可帮助您节省网络资源并最大限度地提高吞吐量。
该 maximum-call-duration 参数设置呼叫可以处于活动状态的最大允许时间长度。当超过持续时间时,SIP ALG 将中断呼叫并释放媒体会话。默认设置为 720 分钟,范围为 3 到 720 分钟。此设置还可以在呼叫无法正确终止的情况下释放带宽。
该 inactive-media-timeout 参数表示呼叫可以在组内没有任何媒体(RTP 或 RTPC)流量的情况下保持活动状态的最长时间(以秒为单位)。每次呼叫中出现 RTP 或 RTCP 数据包时,此超时都会重置。当不活动时间超过此设置时,防火墙中介质的 SIP ALG 临时开口(针孔)将关闭。默认设置为 120 秒,范围为 10 到 2550 秒。超时时,虽然删除了媒体资源(会话和针孔),但不会终止呼叫。
在此示例中,呼叫持续时间设置为 36000 秒,媒体非活动超时设置为 90 秒。
配置
过程
GUI 快速配置
分步程序
要设置 SIP ALG 呼叫持续时间和媒体不活动超时:
-
选择配置>安全性>ALG。
-
选择 SIP 选项卡。
-
在最长通话持续时间字段中,键入
600。 -
在“非活动介质超时”字段中,输入
90。 -
单击确定以检查您的配置并将其保存为候选配置。
-
如果完成设备配置,请单击“提交选项”>“提交”。
分步程序
要设置 SIP ALG 呼叫持续时间和媒体不活动超时:
-
配置 SIP ALG 呼叫持续时间。
[edit] user@host# set security alg sip maximum-call-duration 600
-
配置 SIP ALG 非活动介质超时。
[edit] user@host# set security alg sip inactive-media-timeout 90
-
如果完成设备配置,请提交配置。
[edit] user@host# commit
验证
要验证配置是否工作正常,请输入 show security alg sip 命令。
示例:配置 SIP ALG DoS 攻击保护
此示例说明了如何配置 DoS 攻击保护功能。
要求
在开始之前,请查看用于控制 SIP 呼叫活动的 DoS 攻击保护功能。请参阅 了解 SIP ALG DoS 攻击保护。
概述
SIP 代理服务器处理呼叫的能力可能会受到重复 SIP INVITE 请求(服务器最初拒绝的请求)的影响。DoS 保护功能使您能够将设备配置为监控 INVITE 请求和代理服务器对它们的回复。
在此示例中,设备配置为保护单个 SIP 代理服务器 (10.1.1.3) 免受已拒绝服务的重复 INVITE 请求的影响。丢包时间为 5 秒,之后设备会恢复转发来自这些源的 INVITE 请求。
配置
过程
GUI 快速配置
分步程序
要配置 SIP ALG DoS 攻击保护:
-
选择 配置>安全性>ALG。
-
选择 SIP 选项卡。
-
在“启用攻击防护”区域中,单击 “选定的服务器” 选项。
-
在目标 IP 框中,输入
10.1.1.3并单击 添加。 -
单击确定以检查您的配置并将其保存为候选配置。
-
完成设备配置后,单击 提交选项>提交。
分步程序
要配置 SIP ALG DoS 攻击保护:
-
配置设备以保护单个 SIP 代理服务器。
[edit] user@host# set security alg sip application-screen protect deny destination-ip 10.1.1.3
注意:SIP ALG 支持 IPv6,同时支持网络地址转换协议转换 (NAT-PT) 模式和 NAT64 地址转换。
<destination-ip-address> 的类型从 IPv4 地址更改为 IP 前缀,以支持所有类型的 IP 地址,相应地支持一个前缀以允许多个 IP 地址。
-
为拒绝超时期间配置设备。
[edit] user@host# set security alg sip application-screen protect deny timeout 5
-
如果完成设备配置,请提交配置。
[edit] user@host# commit
验证
要验证配置是否工作正常,请输入 show security alg sip 命令。
示例:允许未知的 SIP ALG 消息类型
此示例说明如何允许未知消息类型。
要求
开始之前,请查看设备如何处理未识别的 SIP 消息。请参阅 了解 SIP ALG 未知消息类型。
概述
在此示例中,您将设备配置为在 NAT 模式和路由模式下的 SIP 流量中允许未知消息类型。默认设置是丢弃未知(不受支持)的消息。
配置
过程
GUI 快速配置
分步程序
要允许未知的 SIP ALG 消息类型:
-
选择 Configure>安全性>ALG。
-
选择 SIP 选项卡。
-
选中启用允许 应用的 NAT 复选框。
-
选中 “启用允许路由” 复选框。
-
单击确定以检查您的配置并将其保存为候选配置。
-
完成设备配置后,单击 提交选项>提交。
分步程序
要允许未知的 SIP ALG 消息类型:
-
配置设备以允许 SIP 流量中的未知消息类型。
[edit] user@host# set security alg sip application-screen unknown-message permit-nat-applied permit-routed
-
如果完成设备配置,请提交配置。
[edit] user@host# commit
验证
要验证配置是否工作正常,请输入 show security alg sip 命令。
示例:为传入 SIP 呼叫配置接口源 NAT
此示例说明如何在公共区域接口上配置源 NAT 规则,以允许将 NAT 用于传入 SIP 呼叫。
要求
开始之前,请了解 NAT 如何与 SIP ALG 配合使用。请参阅 了解 SIP ALG 和 NAT。
概述
在 SIP 代理服务器位于外部区域的双区域场景中,您可以通过在公共区域或外部区域的接口上配置源 NAT 规则来对传入呼叫使用 NAT。
在此示例中(参见 图 5),phone1 位于专用区域的 ge-0/0/0 接口上,phone2 和代理服务器位于公共区域的 ge-0/0/2 接口上。在公共接口 ge-0/0/2.0 上配置源 NAT 规则。
拓扑结构
图 5 显示了传入 SIP 呼叫的源 NAT。
的源 NAT
在此示例中,创建名为专用和公共的区域并将其分配给接口后,您可以配置要在源 NAT 规则集中使用的地址簿。然后,通过定义名为 sip-phones 的规则集和名为 phone1 的规则来配置源 NAT,该规则与来自源地址 10.1.1.2/32 的任何数据包匹配。
最后,创建安全策略以允许专用区域和公共区域之间的所有 SIP 流量。
配置
过程
CLI 快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后从配置模式进入。commit
set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24 set security zones security-zone private address-book address phone1 10.1.1.2/32 set security zones security-zone private interfaces ge-0/0/0.0 set security zones security-zone public address-book address proxy 172.16.1.3/32 set security zones security-zone public address-book address phone2 172.16.1.2/32 set security zones security-zone public interfaces ge-0/0/2.0 set security nat source rule-set sip-phones from zone private set security nat source rule-set sip-phones to zone public set security nat source rule-set sip-phones rule phone1 match source-address 10.1.1.2/32 set security nat source rule-set sip-phones rule phone1 then source-nat interface set security policies from-zone private to-zone public policy outgoing match source-address phone1 set security policies from-zone private to-zone public policy outgoing match destination-address phone2 set security policies from-zone private to-zone public policy outgoing match destination-address proxy set security policies from-zone private to-zone public policy outgoing match application junos-sip set security policies from-zone private to-zone public policy outgoing then permit set security policies from-zone public to-zone private policy incoming match source-address phone2 set security policies from-zone public to-zone private policy incoming match destination-address phone1 set security policies from-zone public to-zone private policy incoming match source-address proxy set security policies from-zone public to-zone private policy incoming match application junos-sip set security policies from-zone public to-zone private policy incoming then permit
分步程序
下面的示例要求您在各个配置层级中进行导航。有关如何执行此操作的说明,请参阅《CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要在公共区域接口上配置源 NAT 规则,请执行以下操作:
-
配置接口。
[edit] user@host# set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 user@host# set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24
-
配置区域并将其分配给接口。
[edit security zones] user@host# set security-zone private interfaces ge-0/0/0.0 user@host# set security-zone public interfaces ge-0/0/2.0
-
配置地址簿和创建地址。
[edit security zones] user@host# set security-zone private address-book address phone1 10.1.1.2/32 user@host# set security-zone public address-book address proxy 172.16.1.3/32 user@host# set security-zone public address-book address phone2 172.16.1.2/32
-
配置源 NAT 规则集。
[edit security nat source] user@host# set rule-set sip-phones from zone private user@host# set rule-set sip-phones to zone public user@host# set rule-set sip-phones rule phone1 match source-address 10.1.1.2/32 user@host# set rule-set sip-phones rule phone1 then source-nat interface
-
启用持久源 NAT 转换。
[edit security nat source] user@host# set address-persistent -
配置安全策略以允许传出 SIP 流量。
[edit security policies from-zone private to-zone public policy outgoing] user@host# set match source-address phone1 user@host# set match destination-address phone2 user@host# set match destination-address proxy user@host# set match application junos-sip user@host# set then permit
-
配置安全策略以允许传入 SIP 流量。
[edit security policies from-zone public to-zone private policy incoming] user@host# set match source-address phone2 user@host# set match destination-address phone1 user@host# set match source-address proxy user@host# set match application junos-sip user@host# set then permit
结果
在配置模式下,输入 show interfaces、 show security zones、 show security policies和 show security nat 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit]
user@host# show interfaces
ge-0/0/0 {
unit 0 {
family inet {
address 10.1.1.1/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 172.16.1.1/24;
}
}
}
[edit]
user@host# show security zones
security-zone private {
address-book {
address phone1 10.1.1.2/32;
}
interfaces {
ge-0/0/0.0;
}
}
security-zone public {
address-book {
address proxy 172.16.1.3/32;
address phone2 172.16.1.2/32;
}
interfaces {
ge-0/0/2.0;
}
}
[edit]
user@host# show security nat
source {
rule-set sip-phones {
from zone private;
to zone public;
rule phone1 {
match {
source-address 10.1.1.2/32;
}
then {
source-nat {
interface;
}
}
}
}
}
[edit]
user@host# show security policies
from-zone private to-zone public {
policy outgoing {
match {
source-address phone1;
destination-address [ phone2 proxy ];
application junos-sip;
}
then {
permit;
}
}
}
from-zone public to-zone private {
policy incoming {
match {
source-address [ phone2 proxy ];
destination-address phone1 ;
application junos-sip;
}
then {
permit;
}
}
}
如果完成设备配置,请从配置模式进入。commit
验证
要确认配置工作正常,请执行以下任务:
验证源 NAT 规则使用情况
目的
验证是否存在与源 NAT 规则匹配的流量。
行动
在操作模式下,输入命令 show security nat source rule all 。查看“翻译命中”字段,检查与规则匹配的流量。
user@host> show security nat source rule all
source NAT rule: phone1 Rule-set: sip-phones
Rule-Id : 1
Rule position : 1
From zone : private
To zone : public
Match
Source addresses : 0.0.0.0 - 255.255.255.255
Destination port : 0 - 0
Action : interface
Persistent NAT type : N/A
Persistent NAT mapping type : address-port-mapping
Inactivity timeout : 0
Max session number : 0
Translation hits : 0
Successful sessions : 0
Failed sessions : 0
Number of sessions : 0
意义
该 Translation hits 字段显示,没有与源 NAT 规则匹配的流量。
验证 SIP ALG 状态
目的
验证系统上是否已启用 SIP ALG。
行动
在操作模式下,输入命令 show security alg status 。
user@host> show security alg status ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Enabled SQL : Enabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 SIP ALG 状态,如下所示:
-
已启用 — 显示 SIP ALG 已启用。
-
已禁用 — 显示 SIP ALG 已禁用。
示例:通过为传入 SIP 呼叫配置源 NAT 池来降低网络复杂性
此示例说明如何通过在外部接口上配置源 NAT 池来为传入 SIP 呼叫启用 NAT,从而降低网络复杂性。
要求
开始之前,请了解 NAT 如何与 SIP ALG 配合使用。请参阅 了解 SIP ALG 和 NAT。
概述
在 SIP 代理服务器位于外部或公共区域的双区域场景中,您可以通过在公共区域的接口上配置 NAT 池来对传入呼叫使用 NAT。
在此示例中(参见 图 6),phone1 位于专用区域中,phone2 和代理服务器位于公共区域中。您可以将源 NAT 池配置为执行 NAT。您还可以创建一个允许从专用区域到公共区域的 SIP 流量的策略。这使得专用区域中的 phone1 能够向公共区域中的代理服务器注册,并且还允许从公共区域到专用区域的来电。
拓扑结构
图 6 显示了传入呼叫的源 NAT 池。
的源 NAT 池
在此示例中,您可以按如下方式配置源 NAT:
-
定义名为 sip-nat-pool 的源 NAT 池,以包含从 172.16.1.20/32 到 172.16.1.40/32 的 IP 地址范围。
-
使用规则 sip-r1 创建名为 sip-nat 的源 NAT 规则集,以匹配从专用区域到源 IP 地址为 10.1.1.3/24 的公共区域的数据包。对于匹配数据包,源地址将转换为 sip-nat-pool 中的其中一个 IP 地址。
-
为接口 ge-0/0/2.0 上的地址 172.16.1.20/32 到 172.16.1.40/32 配置代理 ARP。这样系统就可以响应接口上收到的这些地址的 ARP 请求。
配置
过程
CLI 快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后从配置模式进入。commit
set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24 set security zones security-zone private address-book address phone1 10.1.1.3/32 set security zones security-zone private interfaces ge-0/0/0.0 set security zones security-zone public address-book address proxy 172.16.1.3/32 set security zones security-zone public address-book address phone2 172.16.1.4/32 set security zones security-zone public interfaces ge-0/0/2.0 set security nat source pool sip-nat-pool address 172.16.1.20/32 to 172.16.1.40/32 set security nat source address-persistent set security nat source rule-set sip-nat from zone private set security nat source rule-set sip-nat to zone public set security nat source rule-set sip-nat rule sip-r1 match source-address 10.1.1.3/24 set security nat source rule-set sip-nat rule sip-r1 then source-nat pool sip-nat-pool set security nat proxy-arp interface ge-0/0/2.0 address 172.16.1.20/32 to 172.16.1.40/32 set security policies from-zone private to-zone public policy outgoing match source-address phone1 set security policies from-zone private to-zone public policy outgoing match destination-address any set security policies from-zone private to-zone public policy outgoing match application junos-sip set security policies from-zone private to-zone public policy outgoing then permit set security policies from-zone public to-zone private policy incoming match source-address phone2 set security policies from-zone public to-zone private policy incoming match destination-address phone1 set security policies from-zone public to-zone private policy incoming match application junos-sip set security policies from-zone public to-zone private policy incoming then permit
分步程序
下面的示例要求您在各个配置层级中进行导航。有关如何执行此操作的说明,请参阅《CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要为传入呼叫配置源 NAT 池:
-
配置接口。
[edit] user@host# set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 user@host# set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24
-
配置区域并为其分配接口。
[edit security zones] user@host# set security-zone private interfaces ge-0/0/0.0 user@host# set security-zone public interfaces ge-0/0/2.0
-
配置地址簿。
[edit security zones] user@host# set security-zone private address-book address phone1 10.1.1.3/32 user@host# set security-zone public address-book address proxy 172.16.1.3/32 user@host# set security-zone public address-book address phone2 172.16.1.4/32
-
配置源 NAT 池。
[edit security nat] user@host# set source pool sip-nat-pool address 172.16.1.20/32 to 172.16.1.40/32
-
使用规则配置源 NAT 规则集。
[edit security nat source rule-set sip-nat] user@host# set from zone private user@host# set to zone public user@host# set rule sip-r1 match source-address 10.1.1.3/24 user@host# set rule sip-r1 then source-nat pool sip-nat-pool
-
启用持久 NAT。
[edit security nat] user@host# set source address-persistent
-
配置代理 ARP。
[edit security nat] user@host# set proxy-arp interface ge-0/0/2.0 address 172.16.1.20/32 to 172.16.1.40/32
-
配置安全策略以允许传出 SIP 流量。
[edit security policies from-zone private to-zone public policy outgoing] set match source-address phone1 set match destination-address any set match application junos-sip set then permit
-
配置安全策略以允许传入 SIP 流量。
[edit security policies from-zone public to-zone private policy incoming] set match source-address phone2 set match destination-address phone1 set match application junos-sip set then permit
结果
在配置模式下,输入 show interfaces、 show security zones、 show security nat和 show security policies 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit]
user@host# show interfaces
ge-0/0/0 {
unit 0 {
family inet {
address 10.1.1.1/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 172.16.1.1/24;
}
}
}
[edit]
user@host# show security zones
security-zone private {
address-book {
address phone1 10.1.1.3/32;
}
interfaces {
ge-0/0/0.0;
}
}
security-zone public {
address-book {
address proxy 172.16.1.3/32;
address phone2 172.16.1.4/32;
}
interfaces {
ge-0/0/2.0;
}
}
user@host# show security nat
source {
pool sip-nat-pool {
address {
172.16.1.20/32 to 172.16.1.40/32;
}
}
address-persistent;
rule-set sip-nat {
from zone private;
to zone public;
rule sip-r1 {
match {
source-address 10.1.1.3/24;
}
then {
source-nat {
pool {
sip-nat-pool;
}
}
}
}
}
}
proxy-arp {
interface ge-0/0/2.0 {
address {
172.16.1.20/32 to 172.16.1.40/32;
}
}
}
[edit]
user@host# show security policies
from-zone private to-zone public {
policy outgoing {
match {
source-address phone1;
destination-address any;
application junos-sip;
}
then {
permit;
}
}
}
from-zone public to-zone private {
policy incoming {
match {
source-address phone2;
destination-address phone1;
application junos-sip;
}
then {
permit;
}
}
}
如果完成设备配置,请从配置模式进入。commit
验证
要确认配置工作正常,请执行以下任务:
验证源 NAT 池使用情况
目的
验证是否存在使用源 NAT 池中的 IP 地址的流量。
行动
在操作模式下,输入命令 show security nat source pool all 。
user@host> show security nat source pool all
Total pools: 1
Pool name : sip-nat-pool
Pool id : 4
Routing instance : default
Host address base : 0.0.0.0
Port : [1024, 63487]
port overloading : 1
Total addresses : 21
Translation hits : 0
Address range Single Ports Twin Ports
172.16.1.20 - 172.16.1.40 0 0
意义
该 Translation hits 字段显示源 NAT 池中的 IP 地址没有使用任何流量。
验证源 NAT 规则使用情况
目的
验证是否存在与源 NAT 规则匹配的流量。
行动
在操作模式下,输入命令 show security nat source rule all 。
user@host> show security nat source rule all
source NAT rule: sip-r1 Rule-set: sip-nat
Rule-Id : 1
Rule position : 1
From zone : private
To zone : public
Match
Source addresses : 0.0.0.0 - 255.255.255.255
Destination port : 0 - 0
Action : interface
Persistent NAT type : N/A
Persistent NAT mapping type : address-port-mapping
Inactivity timeout : 0
Max session number : 0
Translation hits : 0
Successful sessions : 0
Failed sessions : 0
Number of sessions : 0
意义
该 Translation hits 字段显示,没有与源 NAT 规则匹配的流量。
验证 SIP ALG 状态
目的
验证系统上是否已启用 SIP ALG。
行动
在操作模式下,输入命令 show security alg status 。
user@host> show security alg status
ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Enabled SQL : Enabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 SIP ALG 状态,如下所示:
-
•已启用 - 显示已启用 SIP ALG。
-
•已禁用 - 显示 SIP ALG 已禁用。
验证 SIP ALG 的安全性策略
目的
验证是否已设置公共区域和专用区域之间的源 NAT。
行动
在操作模式下,输入命令 show security policies 。
user@host> show security policies
from-zone private to-zone public {
policy outgoing {
match {
source-address phone1;
destination-address any;
application junos-sip;
}
then {
permit;
}
}
from-zone public to-zone private {
policy incoming {
match {
source-address phone2;
destination-address phone1;
application junos-sip;
}
then {
permit;
}
}
意义
示例输出显示,已设置公共区域和专用区域之间的源 NAT。
示例:为传入 SIP 呼叫配置静态 NAT
此示例说明如何配置静态 NAT 映射,以允许专用区域中的呼叫者向公共区域中的代理服务器注册。
要求
开始之前,请了解 NAT 如何与 SIP ALG 配合使用。请参阅 了解 SIP ALG 和 NAT。
概述
当SIP代理服务器位于外部或公共区域时,您可以在公共接口上配置静态NAT,使专用区域中的呼叫者能够向代理服务器注册。
在此示例中(参见 图 7),phone1 位于专用区域的 ge-0/0/0 接口上,phone2 和代理服务器位于公共区域的 ge-0/0/2 接口上。您可以使用名为 phone1 的规则创建一个名为 incoming-sip 的静态 NAT 规则集,以匹配来自公共区域的数据包与目标地址为 172.16.1.3/32。对于匹配数据包,目标 IP 地址将转换为专用地址 10.1.1.3/32。您还可以在接口 ge-0/0/2.0 上为地址 172.16.1.3/32 创建代理 ARP。这样系统就可以响应接口上收到的这些地址的 ARP 请求。最后,创建一个名为“传入”的安全策略,用于允许从公共区域到专用区域的 SIP 流量。
为来电 SIP 呼叫配置静态 NAT 时,请确保为私有区域中的每个私有地址配置一个公共地址。
配置
过程
CLI 快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后从配置模式进入。commit
set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24 set security zones security-zone private interfaces ge-0/0/0.0 set security zones security-zone private address-book address phone1 10.1.1.5/32 set security zones security-zone public interfaces ge-0/0/2.0 set security zones security-zone public address-book address proxy 172.16.1.3/32 set security zones security-zone public address-book address phone2 172.16.1.4/32 set security nat static rule-set incoming-sip from zone public set security nat static rule-set incoming-sip rule phone1 match destination-address 172.16.1.3/32 set security nat static rule-set incoming-sip rule phone1 then static-nat prefix 10.1.1.3/32 set security nat proxy-arp interface ge-0/0/2.0 address 172.16.1.3/32 set security policies from-zone public to-zone private policy incoming match source-address phone2 set security policies from-zone public to-zone private policy incoming match source-address proxy set security policies from-zone public to-zone private policy incoming match destination-address phone1 set security policies from-zone public to-zone private policy incoming match application junos-sip set security policies from-zone public to-zone private policy incoming then permit set security policies from-zone private to-zone public policy outgoing match source-address phone1 set security policies from-zone private to-zone public policy outgoing match destination-address phone2 set security policies from-zone private to-zone public policy outgoing match destination-address proxy set security policies from-zone private to-zone public policy outgoing match application junos-sip set security policies from-zone private to-zone public policy outgoing then permit
分步程序
下面的示例要求您在各个配置层级中进行导航。有关如何执行此操作的说明,请参阅《CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要为传入呼叫配置静态 NAT:
-
配置接口。
[edit] user@host# set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 user@host# set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24
-
创建安全区域。
[edit security zones] user@host# set security-zone private interfaces ge-0/0/0.0 user@host# set security-zone public interfaces ge-0/0/2.0
-
为安全区域分配地址。
[edit security zones] user@host# set security-zone private address-book address phone1 10.1.1.5/32 user@host# set security-zone public address-book address proxy 172.16.1.3/32 user@host# set security-zone public address-book address phone2 172.16.1.4/32
-
使用规则创建静态 NAT 规则集。
[edit security nat static rule-set incoming-sip] user@host# set from zone public user@host# set rule phone1 match destination-address 172.16.1.3/32 user@host# set rule phone1 then static-nat prefix 10.1.1.3/32
-
配置代理 ARP。
[edit security nat] user@host# set proxy-arp interface ge-0/0/2.0 address 172.16.1.3/32
-
定义安全策略以允许传入 SIP 流量。
[edit security policies from-zone public to-zone private policy incoming] user@host# set match source-address phone2 user@host# set match source-address proxy user@host# set match destination-address phone1 user@host# set match application junos-sip user@host# set then permit
-
定义安全策略以允许传出 SIP 流量。
[edit security policies from-zone private to-zone public policy outgoing] user@host# set match source-address phone1 user@host# set match destination-address phone2 user@host# set match destination-address proxy user@host# set match application junos-sip user@host# set then permit
结果
在配置模式下,输入 show interfaces、 show security zones、 show security nat和 show security policies 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit]
user@host# show interfaces
ge-0/0/0 {
unit 0 {
family inet {
address 10.1.1.1/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 172.16.1.1/24;
}
}
}
[edit]
user@host# show security zones
security-zone private {
address-book {
address phone1 10.1.1.5/32;
}
interfaces {
ge-0/0/0.0;
}
}
security-zone public {
address-book {
address proxy 172.16.1.3/32;
address phone2 172.16.1.4/32;
}
interfaces {
ge-0/0/2.0;
}
}
[edit]
user@host# show security nat
static {
rule-set incoming-sip {
from zone public;
rule phone1 {
match {
destination-address 172.16.1.3/32;
}
then {
static-nat prefix 10.1.1.3/32;
}
}
}
}
proxy-arp {
interface ge-0/0/2.0 {
address {
172.16.1.3/32;
}
}
}
[edit]
user@host# show security policies
from-zone public to-zone private {
policy incoming {
match {
source-address phone2;
destination-address phone1;
application junos-sip;
}
then {
permit;
}
}
}
from-zone private to-zone public {
policy outgoing {
match {
source-address phone1;
destination-address [phone2 proxy];
application junos-sip;
}
then {
permit;
}
}
}
如果完成设备配置,请从配置模式进入。commit
验证
要确认配置工作正常,请执行以下任务:
验证静态 NAT 配置
目的
验证是否存在与静态 NAT 规则集匹配的流量。
行动
在操作模式下,输入命令 show security nat static rule all 。
user@host> show security nat static rule all
Static NAT rule: phone1 Rule-set: incoming-sip Rule-Id : 1 Rule position : 1 From zone : public Destination addresses : 172.16.1.3 Host addresses : 172.16.1.4 Netmask : 24 Host routing-instance : N/A Translation hits : 4 Successful sessions : 4 Failed sessions : 0 Number of sessions : 4
意义
该 Translation hits 字段显示存在与静态 NAT 规则集匹配的流量。
验证 SIP ALG 状态
目的
验证系统上是否已启用 SIP ALG。
行动
在操作模式下,输入命令 show security alg status 。
user@host> show security alg status
ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Enabled SQL : Enabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 SIP ALG 状态,如下所示:
-
•已启用 - 显示已启用 SIP ALG。
-
•已禁用 - 显示 SIP ALG 已禁用。
验证 SIP ALG 的安全性策略
目的
验证是否设置了公共区域和专用区域之间的静态 NAT。
行动
在操作模式下,输入命令 show security policies 。
user@host> show security policies
from-zone public to-zone private {
policy incoming {
match {
source-address [ phone2 proxy ];
destination-address phone1;
application junos-sip;
}
then {
permit;
}
}
}
from-zone private to-zone public {
policy outgoing {
match {
source-address phone1;
destination-address [ phone2 proxy ];
application junos-sip;
}
then {
permit;
}
}
}
意义
示例输出显示已设置公共区域和专用区域之间的静态 NAT。
示例:在专用区域中配置 SIP 代理,在公共区域配置 NAT
此示例说明如何在专用区域中配置 SIP 代理服务器,在公共区域中配置静态 NAT,以允许公共区域中的呼叫者向代理服务器注册。
要求
开始之前,请了解 NAT 如何与 SIP ALG 配合使用。请参阅 了解 SIP ALG 和 NAT。
概述
使用专用区域中的 SIP 代理服务器,您可以在外部或公共接口上配置静态 NAT,以允许公共区域中的呼叫者向代理服务器注册。
在此示例中(参见 图 8),phone1 和 SIP 代理服务器位于专用区域的 ge-0/0/0 接口上,phone2 位于公共区域的 ge-0/0/2 接口上。您可以为代理服务器配置静态 NAT 规则,以允许 phone2 向代理服务器注册,然后创建一个名为 outgoing 的策略,允许从公共区域到专用区域的 SIP 流量,使公共区域中的呼叫者能够向代理服务器注册。您还可以配置一个名为“从专用区域到公共区域传入”的策略,以允许 phone1 呼出。
拓扑结构
图 8 显示了在专用区域中配置 SIP 代理,在公共区域中配置 NAT。
中配置 NAT
在此示例中,您可以按如下方式配置 NAT:
-
使用名为 incoming-sip 的规则集在代理服务器的 ge-0/0/2 接口上配置静态 NAT,其中包含名为 proxy 的规则,以便匹配来自公共区域的数据包与目标地址为 172.16.1.2/32。对于匹配数据包,目标 IP 地址将转换为专用地址 10.1.1.5/32。
-
将第二个名为 sip-phones 的规则集配置为名为 phone1 的规则,以启用从 phone1 到 phone2 的通信的接口 NAT。
配置
过程
CLI 快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后从配置模式进入。commit
set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24 set interfaces ge-0/0/2 unit 0 proxy-arp set security zones security-zone private address-book address phone1 10.1.1.3/32 set security zones security-zone private address-book address proxy 10.1.1.5/32 set security zones security-zone private interfaces ge-0/0/0.0 set security zones security-zone public address-book address phone2 172.16.1.4/32 set security zones security-zone public interfaces ge-0/0/2.0 set security nat source rule-set sip-phones from zone private set security nat source rule-set sip-phones to zone public set security nat source rule-set sip-phones rule phone1 match source-address 10.1.1.3/32 set security nat source rule-set sip-phones rule phone1 then source-nat interface set security nat static rule-set incoming-sip from zone public set security nat static rule-set incoming-sip rule proxy match destination-address 172.16.1.2/32 set security nat static rule-set incoming-sip rule proxy then static-nat prefix 10.1.1.5/32 set security nat proxy-arp interface ge-0/0/2.0 address 172.16.1.2/32 set security policies from-zone private to-zone public policy outgoing match source-address any set security policies from-zone private to-zone public policy outgoing match destination-address phone2 set security policies from-zone private to-zone public policy outgoing match application junos-sip set security policies from-zone private to-zone public policy outgoing then permit set security policies from-zone public to-zone private policy incoming match source-address phone2 set security policies from-zone public to-zone private policy incoming match destination-address proxy set security policies from-zone public to-zone private policy incoming match application junos-sip set security policies from-zone public to-zone private policy incoming then permit
分步程序
下面的示例要求您在各个配置层级中进行导航。有关如何执行此操作的说明,请参阅《CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要为传入呼叫配置静态 NAT:
-
配置接口。
[edit] user@host# set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 user@host# set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24 user@host# set interfaces ge-0/0/2 unit 0 proxy-arp
-
配置安全区域。
[edit security zones] user@host# set security-zone private interfaces ge-0/0/0.0 user@host# set security-zone public interfaces ge-0/0/2.0
-
为安全区域分配地址。
[edit security zones] user@host# set security-zone private address-book address phone1 10.1.1.3/32 user@host# set security-zone private address-book address proxy 10.1.1.5/32 user@host# set security-zone public address-book address phone2 172.16.1.4/32
-
为静态 NAT 创建规则集并为其分配规则。
[edit security nat static rule-set incoming-sip] user@host# set from zone public user@host# set rule proxy match destination-address 172.16.1.2/32 user@host# set rule proxy then static-nat prefix 10.1.1.5/32
-
为 172.16.1.2/32 地址配置 proxy-arp。
[edit security nat] user@host# proxy-arp interface ge-0/0/2.0 address 172.16.1.2/32
-
配置第二个规则集并为其分配规则。
[edit security nat source rule-set sip-phones] user@host# set from zone private user@host# set to zone public user@host# set rule phone1 match source-address 10.1.1.3/32 user@host# set rule phone1 then source-nat interface
-
为传出流量配置安全策略。
[edit security policies from-zone private to-zone public policy outgoing] user@host# set match source-address any user@host# set match destination-address phone2 user@host# set match application junos-sip user@host# set then permit
-
为传入流量配置安全策略。
[edit security policies from-zone public to-zone private policy incoming] user@host# set match source-address phone2 user@host# set match destination-address proxy user@host# set match application junos-sip user@host# set then permit
结果
在配置模式下,输入 show interfaces、 show security zones、 show security nat和 show security policies 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit]
user@host# show interfaces
ge-0/0/0 {
unit 0 {
family inet {
address 10.1.1.1/24;
}
}
}
ge-0/0/2 {
unit 0 {
proxy-arp;
family inet {
address 172.16.1.1/24;
}
}
}
[edit]
user@host# show security zones
security-zone private {
address-book {
address phone1 10.1.1.3/32;
address proxy 10.1.1.5/32;
}
interfaces {
ge-0/0/0.0;
}
}
security-zone public {
address-book {
address phone2 172.16.1.4/32;
}
interfaces {
ge-0/0/2.0;
}
}
[edit]
user@host# show security nat
source {
rule-set sip-phones {
from zone private;
to zone public;
rule phone1 {
match {
source-address 10.1.1.3/32;
}
then {
source-nat {
interface;
}
}
}
}
}
static {
rule-set incoming-sip {
from zone public;
rule proxy {
match {
destination-address 172.16.1.2/32;
}
then {
static-nat prefix 10.1.1.5/32;
}
}
}
proxy-arp {
interface ge-0/0/2.0 {
address {
172.16.1.2/32;
}
}
}
}
[edit]
user@host# show security policies
from-zone private to-zone public {
policy outgoing {
match {
source-address any;
destination-address phone2;
application junos-sip;
}
then {
permit;
}
}
}
from-zone public to-zone private {
policy incoming {
match {
source-address phone2;
destination-address proxy;
application junos-sip;
}
then {
permit;
}
}
}
如果完成设备配置,请从配置模式进入。commit
验证
要确认配置工作正常,请执行以下任务:
验证静态 NAT 配置
目的
验证是否存在与静态 NAT 规则集匹配的流量。
行动
在操作模式下,输入命令 show security nat static rule all 。查看“翻译命中”字段,检查与规则匹配的流量。
user@host> show security nat static rule all
Total static-nat rules: 1
Total referenced IPv4/IPv6 ip-prefixes: 2/0
Static NAT rule: proxy Rule-set: incoming-sip
Rule-Id : 2
Rule position : 1
From zone : public
Destination addresses : 172.16.1.2
Host addresses : 10.1.1.5
Netmask : 32
Host routing-instance : N/A
Translation hits : 23
Successful sessions : 23
Failed sessions : 0
Number of sessions : 0
意义
该 Translation hits 字段显示,有 23 个流量与静态 NAT 规则匹配。
验证 SIP ALG 状态
目的
验证系统上是否已启用 SIP ALG。
行动
在操作模式下,输入命令 show security alg status 。
user@host> show security alg status ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Enabled SQL : Enabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 SIP ALG 状态,如下所示:
-
已启用 — 显示 SIP ALG 已启用。
-
已禁用 — 显示 SIP ALG 已禁用。
验证源 NAT 规则
目的
验证源 NAT 规则配置。
行动
在操作模式下,输入命令 show security nat source rule all 。
user@host> show security nat source rule all
Total referenced IPv4/IPv6 ip-prefixes: 1/0
source NAT rule: phone1 Rule-set: sip-phones
Rule-Id : 1
Rule position : 1
From zone : private
To zone : public
Match
Source addresses : 10.1.1.3 - 10.1.1.3
Action : interface
Persistent NAT type : N/A
Persistent NAT mapping type : address-port-mapping
Inactivity timeout : 0
Max session number : 0
Translation hits : 88
Successful sessions : 88
Failed sessions : 0
Number of sessions : 0
意义
该 Translation hits 字段显示,有 88 个流量与源 NAT 规则匹配。
验证安全性流会话
目的
验证 NAT 转换 phone1 到 phone2。
行动
在操作模式下,输入命令 run show security flow session 。
user@host> run show security flow session Session ID: 169, Policy name: allow-all/4, Timeout: 2, Valid In: 10.1.1.3/4 --> 172.16.1.4/52517;icmp, Conn Tag: 0x0, If: ge-0/0/0.0, Pkts: 1, Bytes: 84, Out: 172.16.1.4/52517 --> 172.16.1.1/25821;icmp, Conn Tag: 0x0, If: ge-0/0/1.0, Pkts: 1, Bytes: 84,
意义
输出显示 phone1 到 phone2 的 NAT 转换。
示例:配置三区域 SIP ALG 和 NAT 方案
此示例说明如何在专用区域中配置 SIP 代理服务器,在公共区域中配置静态 NAT,以允许公共区域中的呼叫者向代理服务器注册。
要求
开始之前,请了解 NAT 如何与 SIP ALG 配合使用。请参阅 了解 SIP ALG 和 NAT。
概述
在三区域 SIP 配置中,SIP 代理服务器通常与主叫和被叫系统位于不同的区域中。这种情况需要额外的地址和区域配置以及策略,以确保所有系统都可以相互访问代理服务器。
在此示例中,phone1 位于专用区域的 ge-0/0/0.0 接口上,phone2 位于公共区域的 ge-0/0/2.0 接口上,代理服务器位于停火区的 ge-0/0/1.0 接口上。在专用区域中为 phone1 配置静态 NAT 规则。然后,您可以为从专用区域到停火区、从停火区到专用区域、从公共区域到停火区、从停火区到公共区域以及从专用区域到公共区域的流量创建策略。 图 9 中的箭头显示了当公共区域中的 phone2 向专用区域中的 phone1 发出呼叫时,SIP 信令流量的流。会话启动后,数据将直接在电话 1 和电话 2 之间流动。
在此示例中,您可以按如下方式配置 NAT:
-
使用规则 phone1 配置名为 incoming-sip 的静态 NAT 规则集,以匹配来自公共区域的数据包与目标地址为 10.1.2.3/32。对于匹配数据包,目标 IP 地址将转换为专用地址 10.1.1.3/32。
-
为接口 ge-0/0/1.0 上的地址 10.1.2.3/32 配置代理 ARP,以便系统响应在接口上收到的此地址的 ARP 请求。
-
使用规则 r1 配置第二个名为 sip-phones 的规则集,以启用从 phone1 到代理服务器以及从 phone1 到 phone2 的通信的接口 NAT。
配置
过程
CLI 快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层次结构级别的 [edit] CLI 中,然后从配置模式进入。commit
set security nat static rule-set sip-phone from zone private set security nat static rule-set sip-phone from zone public set security nat static rule-set sip-phone rule phone1 match destination-address 10.1.2.3/32 set security nat static rule-set sip-phone rule phone1 then static-nat prefix 10.1.1.3/32 set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 set interfaces ge-0/0/1 unit 0 family inet address 10.1.2.2/24 set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24 set security zones security-zone private address-book address phone1 10.1.1.3/32 set security zones security-zone private interfaces ge-0/0/0.0 set security zones security-zone public address-book address phone2 172.16.1.4/32 set security zones security-zone public interfaces ge-0/0/2.0 set security zones security-zone dmz address-book address proxy 10.1.2.4/32 set security zones security-zone dmz interfaces ge-0/0/1.0 set security nat source rule-set sip-phones from zone private set security nat source rule-set sip-phones to zone dmz set security nat source rule-set sip-phones rule r1 match source-address 10.1.1.3/32 set security nat source rule-set sip-phones rule r1 then source-nat interface set security policies from-zone private to-zone dmz policy private-to-proxy match source-address phone1 set security policies from-zone private to-zone dmz policy private-to-proxy match destination-address proxy set security policies from-zone private to-zone dmz policy private-to-proxy match application junos-sip set security policies from-zone private to-zone dmz policy private-to-proxy then permit set security policies from-zone public to-zone dmz policy public-to-proxy match source-address phone2 set security policies from-zone public to-zone dmz policy public-to-proxy match destination-address proxy set security policies from-zone public to-zone dmz policy public-to-proxy match application junos-sip set security policies from-zone public to-zone dmz policy public-to-proxy then permit set security policies from-zone public to-zone private policy public-to-private match source-address phone2 set security policies from-zone public to-zone private policy public-to-private match destination-address phone1 set security policies from-zone public to-zone private policy public-to-private match application junos-sip set security policies from-zone public to-zone private policy public-to-private then permit set security policies from-zone private to-zone public policy private-to-public match source-address phone1 set security policies from-zone private to-zone public policy private-to-public match destination-address phone2 set security policies from-zone private to-zone public policy private-to-public match application junos-sip set security policies from-zone private to-zone public policy private-to-public then permit set security policies from-zone dmz to-zone private policy proxy-to-private match source-address proxy set security policies from-zone dmz to-zone private policy proxy-to-private match destination-address phone1 set security policies from-zone dmz to-zone private policy proxy-to-private match application junos-sip set security policies from-zone dmz to-zone private policy proxy-to-private then permit set security policies from-zone dmz to-zone public policy proxy-to-public match source-address proxy set security policies from-zone dmz to-zone public policy proxy-to-public match destination-address phone2 set security policies from-zone dmz to-zone public policy proxy-to-public match application junos-sip set security policies from-zone dmz to-zone public policy proxy-to-public then permit
分步程序
下面的示例要求您在各个配置层级中进行导航。有关如何执行此操作的说明,请参阅《CLI 用户指南》中的在配置模式下使用 CLI 编辑器。
要在专用区域中配置 SIP 代理服务器,在公共区域中配置静态 NAT:
-
为静态 NAT 创建规则集并为其分配规则。
[edit security nat static rule-set] user@host# sip-phone from zone private user@host# sip-phone from zone public user@host# sip-phone rule phone1 match destination-address 10.1.2.3/32 user@host# phone1 then static-nat prefix 10.1.1.3/32
-
配置接口。
[edit] user@host# set interfaces ge-0/0/0 unit 0 family inet address 10.1.1.1/24 user@host# set interfaces ge-0/0/1 unit 0 family inet address 10.1.2.2/24 user@host# set interfaces ge-0/0/2 unit 0 family inet address 172.16.1.1/24
-
配置安全区域。
[edit security zones] user@host# set security-zone private interfaces ge-0/0/0.0 user@host# set security-zone public interfaces ge-0/0/2.0 user@host# set security-zone dmz interfaces ge-0/0/1.0
-
为安全区域分配地址。
[edit security zones] user@host# set security-zone private address-book address phone1 10.1.1.3/32 user@host# set security-zone public address-book address phone2 172.16.1.4/32 user@host# set security-zone dmz address-book address proxy 10.1.2.4/32
-
配置从 phone1 到代理的通信的接口 NAT。
[edit security nat source rule-set sip-phones] user@host# set from zone private user@host# set to zone dmz user@host# set rule r1 match source-address 10.1.1.3/32 user@host# set rule r1 then source-nat interface
-
配置安全策略以允许从专用区域到区域停火区的流量。
[edit security policies from-zone private to-zone dmz policy private-to-proxy] user@host# set match source-address phone1 user@host# set match destination-address proxy user@host# set match application junos-sip user@host# set then permit
-
配置安全策略以允许从公共区域到停火区区域的流量。
[edit security policies from-zone public to-zone dmz policy public-to-proxy] user@host# set match source-address phone2 user@host# set match destination-address proxy user@host# set match application junos-sip user@host# set then permit
-
配置安全策略以允许从专用区域到公共区域的流量。
[edit security policies from-zone private to-zone public policy private-to-public] user@host# set match source-address phone1 user@host# set match destination-address phone2 user@host# set match application junos-sip user@host# set then permit
-
配置安全策略以允许从公共区域到专用区域的流量。
[edit security policies from-zone public to-zone private policy public-to-private] user@host# set match source-address phone2 user@host# set match destination-address phone1 user@host# set match application junos-sip user@host# set then permit
-
配置安全策略以允许从区域停火区到专用区域的流量。
[edit security policies from-zone dmz to-zone private policy proxy-to-private] user@host# set match source-address proxy user@host# set match destination-address phone1 user@host# set match application junos-sip user@host# set then permit
-
配置安全策略以允许从区域停火区到公共区域的流量。
[edit security policies from-zone dmz to-zone public policy proxy-to-public] user@host# set match source-address proxy user@host# set match destination-address phone2 user@host# set match application junos-sip user@host# set then permit
结果
在配置模式下,输入 show interfaces、 show security zones、 show security nat和 show security policies 命令以确认您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit]
user@host# show interfaces
ge-0/0/0 {
unit 0 {
family inet {
address 10.1.1.1/24;
}
}
}
ge-0/0/1 {
unit 0 {
family inet {
address 10.1.2.2/24;
}
}
}
ge-0/0/2 {
unit 0 {
family inet {
address 172.16.1.1/24;
}
}
}
[edit]
user@host# show security zones
security-zone private {
address-book {
address phone1 10.1.1.3/32;
}
interfaces {
ge-0/0/0.0;
}
}
security-zone public {
address-book {
address phone2 172.16.1.4/32;
}
interfaces {
ge-0/0/2.0;
}
}
security-zone dmz {
address-book {
address proxy 10.1.2.4/32;
}
interfaces {
ge-0/0/1.0;
}
}
[edit]
user@host# show security nat
static {
rule-set sip-phone {
from zone [ private public ];
rule phone1 {
match {
destination-address 10.1.2.3/32;
}
then {
static-nat {
prefix {
10.1.1.3/32;
}
}
}
}
}
}
source {
rule-set sip-phones {
from zone private;
to zone dmz;
rule r1 {
match {
source-address 10.1.1.3/32;
}
then {
source-nat {
interface;
}
}
}
}
}
proxy-arp {
interface ge-0/0/1.0 {
address {
10.1.2.3/32;
}
}
}
[edit]
user@host# show security policies
from-zone private to-zone dmz {
policy private-to-proxy {
match {
source-address phone1;
destination-address proxy;
application junos-sip;
}
then {
permit;
}
}
}
from-zone public to-zone dmz {
policy public-to-proxy {
match {
source-address phone2;
destination-address proxy;
application junos-sip;
}
then {
permit;
}
}
}
from-zone public to-zone private {
policy public-to-private {
match {
source-address phone2;
destination-address phone1;
}
then {
permit;
}
}
}
from-zone private to-zone public {
policy private to-zone public {
match {
source-address phone1;
destination-address phone2;
}
then {
permit;
}
}
}
from-zone dmz to-zone private {
policy proxy-to-private {
match {
source-address proxy;
destination-address phone2;
application junos-sip;
}
then {
permit;
}
}
}
如果完成设备配置,请从配置模式进入。commit
验证
要确认配置工作正常,请执行以下任务:
验证源 NAT 规则使用情况
目的
验证是否存在与源 NAT 规则匹配的流量。
行动
在操作模式下,输入命令 show security nat source rule all 。查看“翻译命中”字段,检查与规则匹配的流量。
user@host> show security nat source rule all
source NAT rule: r1 Rule-set: sip-phones
Rule-Id : 1
Rule position : 1
From zone : private
To zone : public
Match
Source addresses : 0.0.0.0 - 255.255.255.255
Destination port : 0 - 0
Action : interface
Persistent NAT type : N/A
Persistent NAT mapping type : address-port-mapping
Inactivity timeout : 0
Max session number : 0
Translation hits : 0
Successful sessions : 0
Failed sessions : 0
Number of sessions : 0
意义
显示 Translation hits field 没有与源 NAT 规则匹配的流量。
验证静态 NAT 规则的使用情况
目的
验证是否存在与静态 NAT 规则匹配的流量。
行动
在操作模式下,输入命令 show security nat static rule all 。查看“翻译命中”字段,检查与规则匹配的流量。
user@host> show security nat static rule all
Total static-nat rules: 1
Total referenced IPv4/IPv6 ip-prefixes: 2/0
Static NAT rule: phone1 Rule-set: sip-phone
Rule-Id : 1
Rule position : 1
From zone : private
: public
Destination addresses : 10.1.2.3
Host addresses : 10.1.2.4
Netmask : 32
Host routing-instance : N/A
Translation hits : 127
Successful sessions : 127
Failed sessions : 0
Number of sessions : 0
意义
该 Translation hits 字段显示与静态 NAT 规则匹配的流量。
验证 SIP ALG 状态
目的
验证系统上是否已启用 SIP ALG。
行动
在操作模式下,输入命令 show security alg status 。
user@host> show security alg status ALG Status : DNS : Enabled FTP : Enabled H323 : Disabled MGCP : Disabled MSRPC : Enabled PPTP : Enabled RSH : Disabled RTSP : Disabled SCCP : Disabled SIP : Enabled SQL : Enabled SUNRPC : Enabled TALK : Enabled TFTP : Enabled IKE-ESP : Disabled
意义
输出显示 SIP ALG 状态,如下所示:
-
已启用 — 显示 SIP ALG 已启用。
-
已禁用 — 显示 SIP ALG 已禁用。
变更历史表
是否支持某项功能取决于您使用的平台和版本。使用 功能资源管理器 确定您的平台是否支持某个功能。
