GGSN 概述
网关 GPRS 支持节点 (GGSN) 通过服务网关 GPRS 支持节点 (SGSN) 转换来自移动用户的传入数据流量,并将其转发到相关网络,反之亦然。GGSN 和 SGSN 共同构成 GPRS 支持节点 (GSN)。
了解 GGSN 重定向
Junos OS 支持 GPRS 隧道协议 (GTP) 流量和网关 GPRS 支持节点 (GGSN) 重定向。GGSN (X) 可以发送 create-pdp-context 响应,其中可以为后续 GTP-C 和 GTP-U 消息指定不同的 GGSN IP 地址(GGSN Y 和 GGSN Z)。因此,SGSN 会将后续 GGSN 隧道协议、控制 (GTP-C) 和 GGSN 隧道协议、用户平面 (GTP-U) 消息发送至 GGSN Y 和 Z,而非 X。
GGSN 池方案概述
通用分组无线服务 (GPRS) 隧道协议 (GTP) 在隧道创建过程中支持不同的网关 GPRS 支持节点 (GGSN) IP 地址。有两种 GGSN 池方案支持服务 GPRS 支持节点 (SGSN) 漫游。
了解场景 1 的 GGSN 池
在 图 1 中,GTP 隧道创建过程中,数据包数据协议 (PDP) 上下文请求将从 SGSN A 发送到 GGSN B。发送 PDP 上下文请求消息后,GGSN D 会记录请求信息,并使用与请求数据包的目标 IP 地址不同的目标 IP 地址将响应消息发送至 SGSN A。
在这种情况下,两条 GTP 数据包消息会通过中心点发送到服务处理单元 1 (SPU1) 和 SPU2,并由 SPU1 和 SPU2 分别处理这些消息。会话在每个 GTP 数据包的 SPU1 和 SPU 2 上创建。SPU1 记录请求数据包信息,SPU2 记录响应数据包信息。
由于缺少请求信息,从 GGSN D 发送到 SGSN A 的 PDP 响应消息被丢弃。因此无法建立 GTP 隧道。
SPU2 无法从 SPU1 检索请求信息。
将请求信息安装到远程 SPU
在这种情况下,由于缺少请求信息,PDP 响应数据包被丢弃,并且 GTP 隧道未建立。通过在正确的 SPU 上安装请求信息,即可解决此问题。
在 图 2 中,创建隧道时,响应数据包的 GGSN IP 地址发生变化,从而触发新会话,中心点将消息分发到其他 SPU。
响应数据包始终发送至请求数据包的源地址至 SPU。这有助于将请求信息安装到远程 SPU,以接收下一个响应数据包。
在处理请求数据包时,将请求信息安装到可预测的 SPU、HASH(req-src-ip) 功能中。通过 PDP 请求消息的源 IP 地址计算预期 SPU 编号 (哈希 (10.1.1.1) = SPU2)之后,请求信息将通过瞻博网络消息传递接口 (JMPI) 安装在远程 SPU2 中。
现在,请求信息已安装在本地 SPU1 和远程 SPU2 上,因此允许 PDP 响应消息。
场景 1 的应对方案
在场景 1 中,从 SGSN A 发送的 PDP 上下文请求消息到达 Junos OS 默认应用程序 junos-gprs-gtp
,并且已为 PDP 上下文请求消息启用 GTP 检查。但是,从 GGSN D 发送的 PDP 上下文响应消息无法访问 Junos OS 默认应用程序 junos-gprs-gtp
。因此,GTP 模块不会对数据包进行检测。
作为应对方案,您需要通过配置自定义策略和应用程序,为 PDP 上下文响应消息启用 GTP 检查。请参阅 配置 GGSN 自定义策略/应用程序。
了解场景 2 的 GGSN 池
在 图 3 中,GTP 隧道创建过程中,数据包数据协议 (PDP) 上下文请求将从 SGSN A 发送至 GGSN B。收到 PDP 上下文请求消息后,GGSN B 将 PDP 上下文响应消息发送至 SGSN A。接收 PDP 上下文响应消息后,在 SGSN C 和 GGSN D 之间创建 GTP-C 隧道。然后,SGSN C 使用与请求数据包的 IP 报头不同的源和目标 IP 地址,向 GGSN D 发送更新 PDP 上下文请求消息。
在场景 2 中,SGSN A 会创建第一个 GTP 上下文请求,并通过中心点将其发送至 SPU。为 SPU1 上的请求数据包创建会话。从 GGSN B 发送到 SGSN A 的响应数据包会正确到达会话。
从 SGSN A 发送的请求数据包表示 GTP-C 建立在控制 IP 10.1.1.2 上,而 GTP-U 基于数据 IP 10.1.1.3 建立。同样,从 GGSN 发送的响应消息表示 GTP-C 建立在控制 IP 10.2.2.3 上,GTP-U 基于数据 IP 10.2.2.4 建立。
建立所有端点后,GTP-C 和 GTP-U 隧道将在本地 SPU1 上创建。但是,未在 SPU 2 上建立隧道,因此从 SPU2 接收的 PDP 更新请求消息将被删除。
将隧道信息安装到远程 SPU
在场景 2 中,由于缺少隧道信息,更新请求数据包被丢弃。在处理请求和响应数据包后,将隧道信息安装到正确的 SPU,可以解决此问题。接收响应数据包的 SPU 将隧道信息安装在本地或远程 SPU 上。
在 图 4 中,建立隧道后,控制消息会发送到控制隧道端点。所有控制消息的目标 IP 地址应为控制隧道的 GGSN 端点 IP 地址。这有助于提前计算后续控制消息的远程 SPU 编号。
将隧道信息安装到可预测的 SPU 中。通过控制隧道 GGSN 端点 IP 计算 SPU 编号后,隧道信息将通过 JMPI 安装在远程 SPU 中。
现在,隧道信息已安装在远程 SPU2 上,因此允许 PDP 更新响应消息。
示例:配置 GGSN 自定义策略和应用程序
此示例说明如何配置网关 GPRS 支持节点 (GGSN) 自定义策略和应用程序以支持 GGSN 池场景 1。
要求
此示例使用以下硬件和软件组件:
SRX5400 设备
一台 PC
Junos OS 12.1X44-D10 版
配置
配置 GGSN 自定义策略
概述
此示例说明如何为 GTP 流量配置安全策略,使流量在发生 GTP 池时发挥作用。当启用 GTP 分布功能(无论是否进行 GTP 检查)时,此示例也将使 GTP 流量正确流动。我们在这里做的就是在两个方向上配置安全策略,镜像。在这两个方向上,我们使用相同的地址对象和相同的应用程序。除了常规 GTP 应用 junos-gprs-gtp 之外,我们还创建自定义反向 GTP 应用程序,名为 reverse-junos-gprs-gtp。此反向 GTP 应用将使 GTP 数据包与安全策略匹配,即使其源 UDP 端口是众所周知的 GTP 端口也是如此。这样,所有 GTP 流量都将与策略匹配,并作为 GTP 流量得到正确处理。
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层级的 [edit]
CLI 中,然后从配置模式进入 commit 。
如果使用 GTP 分布功能而不进行 GTP 检查,请勿创建 GTP 配置文件,也不要将应用程序服务 gtp 配置文件应用于安全策略。
set security address-book global address local_GSN_range 10.1.1.0/24 set security address-book global address remote_GSN_range 10.2.2.0/24 set security gtp profile GTP-Profile set security policies from-zone trust to-zone untrust policy t-u match source-address local_GSN_range set security policies from-zone trust to-zone untrust policy t-u match destination-address remote_GSN_range set security policies from-zone trust to-zone untrust policy t-u match application junos-gprs-gtp set security policies from-zone trust to-zone untrust policy t-u match application reverse-junos-gprs-gtp set security policies from-zone trust to-zone untrust policy t-u then permit application-services gtp-profile GTP-Profile set security policies from-zone untrust to-zone trust policy u-t match source-address remote_GSN_range set security policies from-zone untrust to-zone trust policy u-t match destination-address local_GSN_range set security policies from-zone untrust to-zone trust policy u-t match application reverse-junos-gprs-gtp set security policies from-zone untrust to-zone trust policy u-t match application junos-gprs-gtp set security policies from-zone untrust to-zone trust policy u-t then permit application-services gtp-profile GTP-Profile
逐步过程
要配置 GGSN 自定义策略:
配置源地址。
[edit security] user@host# set security policies from-zone trust to-zone untrust policy t-u match source-address local_GSN_range
配置目标地址。
[edit security] user@host# set security policies from-zone trust to-zone untrust policy t-u match destination-address remote_GSN_range
配置策略应用程序。
[edit security] user@host#set security policies from-zone trust to-zone untrust policy t-u match application junos-gprs-gtp user@host#set security policies from-zone trust to-zone untrust policy t-u match application reverse-junos-gprs-gtp
-
配置活动类型并指定 GTP 配置文件名称。
[edit security]user@host# set security policies from-zone trust to-zone untrust policy t-u then permit application-services gtp-profile GTP-Profile
在没有 GTP 检查的情况下使用 GTP 分布功能时:
[edit security] user@host# set security policies from-zone trust to-zone untrust policy t-u then permit
-
再次配置相同,反转安全区域信任和不信任。
结果
在配置模式下,输入命令以确认 show security policies
您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明,以便进行更正。
[edit] user@host# show security policies from-zone trust to-zone untrust { policy t-u { match { source-address local_GSN_range; destination-address remote_GSN_range; application [ junos-gprs-gtp reverse-junos-gprs-gtp ]; } then { permit { application-services { gtp-profile GTP-Profile; } } } } } from-zone untrust to-zone trust { policy u-t { match { source-address remote_GSN_range; destination-address local_GSN_range; application [ reverse-junos-gprs-gtp junos-gprs-gtp ]; } then { permit { application-services { gtp-profile GTP-Profile; } } } } }
在提交配置之前,我们需要配置反向 GTP 应用程序。
配置反向 GTP 应用程序
使用 GTP 分布 功能时,流会话将设置为单向。将它们设置为单向的此操作由 GTP ALG 执行(即使在不使用 GTP 检查时也是如此)。因此,需要将 GTP ALG 应用于所有 GTP 流量。
预定义的应用程序 junos-gprs-gtp 配置了 GTP ALG。但是,在某些情况下,GTP 流量可能与此应用程序不匹配,而当使用与标准 GTP UDP 端口不同的源端口时,将会出现返回流量的情况。在这种情况下,反向会话翼可以有一个随机目标端口和标准 GTP 端口作为源端口。为了确保在这种情况下将 GTP ALG 应用于此反向 GTP 流量,需要将以下“反向”GTP 应用程序添加到所有 GTP 安全策略中。
CLI 快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以便与网络配置匹配,将命令复制并粘贴到层级的 [edit]
CLI 中,然后从配置模式进入 commit 。
set applications application reverse-junos-gprs-gtp-c term t1 alg gprs-gtp-c set applications application reverse-junos-gprs-gtp-c term t1 protocol udp set applications application reverse-junos-gprs-gtp-c term t1 source-port 2123 set applications application reverse-junos-gprs-gtp-c term t1 destination-port 0-65535 set applications application reverse-junos-gprs-gtp-u term t1 alg gprs-gtp-u set applications application reverse-junos-gprs-gtp-u term t1 protocol udp set applications application reverse-junos-gprs-gtp-u term t1 source-port 2152 set applications application reverse-junos-gprs-gtp-u term t1 destination-port 0-65535 set applications application reverse-junos-gprs-gtp-v0 term t1 alg gprs-gtp-v0 set applications application reverse-junos-gprs-gtp-v0 term t1 protocol udp set applications application reverse-junos-gprs-gtp-v0 term t1 source-port 3386 set applications application reverse-junos-gprs-gtp-v0 term t1 destination-port 0-65535 set applications application-set reverse-junos-gprs-gtp application reverse-junos-gprs-gtp-c set applications application-set reverse-junos-gprs-gtp application reverse-junos-gprs-gtp-u set applications application-set reverse-junos-gprs-gtp application reverse-junos-gprs-gtp-v0
验证
确认配置工作正常。
验证配置
目的
验证 GGSN 自定义策略配置是否正确。
行动
提交配置并退出。在操作模式下,输入 show security policies
命令。
示例输出
命令名称
[edit] user@host# show applications application reverse-junos-gprs-gtp-c { term t1 alg gprs-gtp-c protocol udp source-port 2123 destination-port 0-65535; } application reverse-junos-gprs-gtp-u { term t1 alg gprs-gtp-u protocol udp source-port 2152 destination-port 0-65535; } application reverse-junos-gprs-gtp-v0 { term t1 alg gprs-gtp-v0 protocol udp source-port 3386 destination-port 0-65535; } application-set reverse-junos-gprs-gtp { application reverse-junos-gprs-gtp-c; application reverse-junos-gprs-gtp-u; application reverse-junos-gprs-gtp-v0; } [edit] user@host# commit and-quit commit complete Exiting configuration mode user@host> show security policies Default policy: deny-all Default policy log Profile ID: 0 Pre ID default policy: permit-all From zone: trust, To zone: untrust Policy: t-u, State: enabled, Index: 6, Scope Policy: 0, Sequence number: 1, Log Profile ID: 0 Source vrf group: any Destination vrf group: any Source addresses: local_GSN_range Destination addresses: remote_GSN_range Applications: junos-gprs-gtp, reverse-junos-gprs-gtp Source identity feeds: any Destination identity feeds: any Action: permit, application services From zone: untrust, To zone: trust Policy: u-t, State: enabled, Index: 7, Scope Policy: 0, Sequence number: 1, Log Profile ID: 0 Source vrf group: any Destination vrf group: any Source addresses: remote_GSN_range Destination addresses: local_GSN_range Applications: reverse-junos-gprs-gtp, junos-gprs-gtp Source identity feeds: any Destination identity feeds: any Action: permit, application services
此输出显示策略配置摘要。