数据包转换和 GRE 隧道
数据包转换和 GRE 隧道 - 概述
MX 路由器在部署为企业边缘路由器时,构成了公共云计算平台的一部分。企业边缘路由器将从客户 VPN 接收的 IPv4 流量沿隧道传输到路由网关节点。路由网关执行 IPv4 到 IPv6 的转换,并将转换后的数据包发送至平台即服务 (PaaS) 服务器。PaaS 是云中一个完整的开发和部署环境,其资源使企业能够交付从简单的基于 云 的应用到支持云的复杂企业应用,各种应用。
从 Junos OS 21.2R1 版开始,作为 PaaS 服务升级客户网络的一部分,我们支持增强您的企业边缘路由器(MX 路由器)。您可以将边缘路由器配置为通过 JET API 对转换后的数据包启用转换(IPv4 到 IPv6 和 IPv6 到 IPv4)和 GRE 隧道。边缘路由器现在提供对以平台即服务 (PaaS) 形式提供的专用链路服务的访问,绕过数据中心网关。
有关准备网关设备以与 JET API 交互的完整信息,请参阅 JET API 指南。
企业边缘路由器数据包转换和 GRE 隧道的优势
- 绕过数据中心网关
- 封装和解封装方面的非对称隧道
- 通过分离的转换和隧道封装,客户将来可以选择不同的封装,同时尽量减少软件更改,还可以单独探测转发路径
封装过程(边缘路由器到 PaaS 服务器)
图 1 展示了从边缘路由器到 PaaS 服务器的数据包流。
根据控制器通过 PRPD API 为每个目标 IPv4 前缀定义的转换规则,IPv4 数据包将转换为 IPv6(IPv4 标头替换为新的 IPv6 标头)。将查找客户 VRF inet 表以进行转换的 IPv4 目标。
GRE 隧道封装配置文件由控制器通过 PRPD API 为转换后的 IPv6 数据包定义。转换后的 IPv6 目的在客户 VRF inet6 表中查找,以便进行隧道封装。多个前缀可以使用同一隧道。
GRE 隧道封装后,在主实例 inet.0 表中查找外部 IP 隧道目标,以进行下一跃点 L2 封装。.
以下部分将详细介绍该过程。
了解配置文件和配置文件的分离
边缘路由器根据转换配置文件中定义的参数转换数据包。参数包括转换类型(IPv4 到 IPv6 或 IPv6 到 IPv4)、算法类型、前缀和其他相关信息。
数据包根据隧道封装配置文件中定义的参数进行封装。
为了实现配置文件的解耦,数据控制器添加了两个单独的路由,用于转换和隧道封装:
- IPv4 RouteAdd() 或 RouteUpdate() 对 VRF inet 表中的目标路由进行编程,作为 translate。
- IPv6 RouteAdd() 或 RouteUpdate() 对 VRF inet6 表中转换后的 IPv6 路由进行编程,作作为 GRE 封装(外部 IPv4 隧道标头和 GRE 标头)
了解转发路径
边缘路由器对每个 IPv4 数据包执行 3 次路由查找。
-
VRF inet 表中的路由查找 — IPv4 报头转换为 IPv6 报头。控制器将添加 IPv4 路由。
-
VRF inet6 表中的路由查找 — 查找转换后的 IPv6 目的地址以获取隧道封装配置文件,该配置文件将在内部 IPv6 报头之上添加 GRE 和隧道 IPv4 报头。控制器将添加 IPv6 路由。
-
在主实例中查找路由 — 查找主实例 inet 表,以便将隧道数据包路由到隧道目标。IGP 将添加路由。
IPv4 到 IPv6 的转换
翻译详情如下:
-
如果 IPv4 已分段或具有 IP 选项,则将其丢弃。
-
数据包类型从 IPv4 更改为 IPv6。
-
将复制 ToS/DSCP 字段。
-
IPv6 跃点限制设置为 IPv4 TTL。
-
复制有效负载协议(不进行错误/不一致检查)。
-
IPv6 数据包目的地址设置为 TranslationDestinationIPv6。
-
IPv6 数据包源地址的 96 个最高有效位设置为 TranslationSourceIPv6Prefix。
-
IPv6 数据包源地址的 32 个最低有效位设置为原始数据包 IPv4 地址
转换后的 IPv6 数据包如图 2 所示
GRE 封装
控制器通过 PRPD API 为转换后的 IPv6 目标定义 GRE 隧道封装配置文件。边缘路由器在客户 VRF inet6 表中查找转换后的 IPv6 目标,以便进行隧道封装。具体如下:
-
添加了外部 GRE IPv4 隧道标头
-
GRE 密钥设置为 GREKey,可由用户配置
-
IPv4 目标设置为 TunnelDestinationIPv4
-
IPv4 源设置为 TunnelSourceIPv4
-
注意:
隧道封装配置文件的数量可以小于或等于转换规则的数量。默认情况下,您可以在多个最终客户 VRF 之间共享一个 GRE 隧道。在 PFE 中,可能有许多 GRE 封装路由使用相同的配置文件参数,因此使用相同的隧道下一跃点。但是,许多转换路由可能不会使用相同的 GRE 路由。
封装后,边缘路由器上的数据包格式如图 3 所示
后的数据包格式
解封装过程(PaaS 服务器到边缘路由器)
从 PaaS 服务器到边缘路由器的数据包流包括 GRE 解封装和反向转换,如 图 4 所示。
从 PaaS 服务器接收的 GRE 封装 IPv6 数据包会经过隧道终止查找,从而对 GRE 或 IPv4 标头进行解封,并指向进行反向转换后续查找的 VRF。根据控制器为每个目标 IPv6 前缀定义的转换规则,对 IPv6 有效负载进行转换(IPv6 报头替换为 IPv4)。反向转换后,将在最终客户 VRF inet 表中查找转换后的地址,以获取面向最终客户网络的 L2 封装。
了解配置文件和配置文件的分离
解封装和反向转换配置文件的解耦至关重要。控制器通过单独的 GRPC 调用添加两个单独的路由,用于反向转换和隧道解封装。
-
FlexibleTunnelAdd() 对隧道终止进行编程,使其指向全局转换 VRF。
- IPv6 RouteAdd() 或 RouteUpdate() 对全局转换 VRF 的 VRF inet6 表中的内部目标 IPv6 路由进行编程,作为反向转换,并将 VRF 作为最终客户 VRF。
-
转换后的 IPv4 地址的最终客户 VRF inet 路由由 BGP 协议编程。
了解转发路径
从 PaaS 服务器接收的 GRE 封装 IPv6 数据包会进行隧道终止查找,从而对 GRE 或 IPv4 标头进行解封,并指向进行反向转换后续查找的 VRF。
-
GRE 隧道终止查找和隧道解封装
-
解封装属性形成查找密钥 GRE 密钥、隧道目标 IPv4 地址、隧道源 IPv4 前缀。
-
隧道终止查找可识别客户 VPN 实例并移除隧道标头(外部 IPv4 标头和 GRE 标头)。
-
从 PaaS 服务器接收的 GRE 标头将设置密钥位和一个 32 位 GRE 密钥值。转发查找包括 GRE 密钥以及其他查找密钥。
-
数据包被定向到目标 VRF,即全局转换 VRF。
-
-
反向转换和最终客户 VRF 识别
-
隧道解封装后,需要将流量路由到最终客户 VRF。此路由是使用对全局转换 VRF 中的 InnerDestinationIPv6 地址进行转换路由查找来完成的,这是客户为保存 IPv6 转换路由而创建的路由实例。
您可以使用 InnerDestinationIPv6 地址作为识别最终客户 VRF 的区分符。
-
在转换路由 (InnerDestinationIPv6) 查找中,反向转换配置文件将 IPv6 报头转换为 IPv4 报头,并指向最终客户 VRF。IPv6 地址的较低 32 位构成转换后的 IPv4 地址。
-
-
在最终客户 VRF inet 表中查找路由
-
在 VRF inet 表中查找转换后的 IPv4 地址,以便将数据包路由到客户网络。
-
了解 InnerIPv6Src 地址
FlexibleTunnelAdd API 还支持可选参数 InnerSourceIPv6 字段。您可以使用此可选参数包含 InnerSourceIPv6 地址,用于终止 GRE 隧道并识别客户 VRF。
当使用 InnerSourceIPv6 地址作为区分器时,您可以通过在 FlexibleTunnelAdd API 中将最终客户 VRF 作为目标 VRF 传递来配置隧道终止查找指向最终客户 VRF。在这种情况下,转换路由 (InnerDestinationIPv6) 可编程到相应的最终客户 VRF 表中。但是,启用可选的 InnerSourceIPv6 并不限制将解封装流与全局转换 VRF 配合使用。
进行解封装
GRE 解封装
GRE 解封装过程包括以下步骤:
-
使用之前定义的查找键确定隧道查找和 TargetVRF 实例。
-
外部 GRE 报头将被丢弃。
IPv6 到 IPv4 转换
翻译细节说明如下:
-
内部数据包类型从 IPv6 更改为 IPv4。如果内部数据包类型不是 IPv6,则丢弃数据包,并且错误计数器递增。
-
复制有效负载协议字段时,不会进行错误或不一致检查。
-
TC 字段将复制到 DSCP 字段中
-
IPv4 TTL 设置为内部 IPv6 跃点限制
- 数据包的 IPv4 目的地址派生自内部 IPv6 目的地址的 32 个最低有效位
-
数据包的 IPv4 源地址源自内部 IPv6 源地址的 32 个最低有效位
边缘路由器接收的数据包结构如图 7 所示。