如何使用动态 NAT 允许来自客户 RFC1918 子网的访问以访问 Internet 和 LAN?

网络工程 思科 路由 纳特 服务提供者
2022-02-27 23:29:25

我目前正在为一个 SP 做一个项目,他们的一个要求让我很难过。

背景 : 在此处输入图像描述

客户想要迁移到供应商的 WAN 解决方案,对于底层,我们正在使用 DMVPN。DMVPN 隧道的端点是 CPE。客户路由器,遗憾的是主要是 EOS,不支持 DMVPN 阶段 3。对于服务,客户需要

  1. 网络连接
  2. 中心站点和分支机构之间的 LAN 访问

问题

由于公共 IP 数量有限(2x/30),我们必须使用动态 NAT。满足要求 2 被证明是具有挑战性的。我理解的数据包流是这样的:

  • DC 的客户端(例如 10.1.1.1/32)尝试访问 Branch 的客户端(例如 10.20.1.1)

  • 数据包遵循默认路由到客户路由器,其中它被 NATTed 到公共 IP。外部全局条目设置为 10.20.1.1,内部全局和本地为 :port 和 10.1.1.1:port

  • 数据包通过 DMVPN 隧道路由到 10.20.1.1(建立 CPE 之间的路由)。

  • 10.20.1.1 用自己的地址回复 10.20.1.1
  • 10.20.1.1 在分支机构客户路由器上被 NAT 到连接的公共 IP
  • 此数据包通过隧道到达 DC CPE,该隧道尝试在 NAT 表中执行查找,但在全局外部与本地条目内部未找到任何匹配项(请记住,回复的来源已在步骤 5 中确定)

什么已经尝试过

  • 我正在考虑一个解决方案,其中 NAT 在 CPE 上完成,我们使用 VRF 分离流量。CPE-PE 位于 VRF INET 中,用作 DMVPN 的底层。EIGRP over DMVPN 允许客户从全局 RIB 访问 LAN。到 INET vrf 的默认路由以及 INET 和全局之间的一些泄漏允许访问 Internet。这里的挑战是外部接口将位于 VRF 中,这不是 VRF AWARE NAT 的典型情况(源位于 VRF 中)。我尝试在 EVE 上运行它,但无法让它工作。

  • 我也听说过双 NAT,但无法将其包含在解决我的问题中

很感谢任何形式的帮助。

1个回答

我相信从您的问题描述中已经掌握了这一点:

  • 新 SP 提供的 WAN 服务恰好在“上游某处”有一个互联网出口。
  • CPE-CE 链路必须是 publicIPv4 /30,如新 SP 所给
  • 为了允许访问公共 Internet(通过 SP 的新 WAN),SP 要求 CE 使用上述 /30 空间执行 SourceNAT/Overload。
  • 因此,CE 路由器需要有一条指向新 SP 的 CPE 的默认路由。
  • 您仍然需要运行覆盖以允许连接到您站点的数据中心。

那么这应该可行,我认为:

  • 确保覆盖集线器可从所有辐条站点访问;这可能需要您将数据中心连接到同一个 SP 的 WAN 服务,就好像它是该 WAN 的第 (n+1) 个站点一样。否则,您可能必须将覆盖的集线器连接到公共互联网。
  • 在 CE 上,通过面向 SP 的接口有一个静态默认路由点
  • 让 CE 的 LAN 接口为“nat inside”,让面向 SP 的接口为“nat outside”。
  • 使用 NAT 过载语句,使用拒绝RFC1918 目标的 ACL(或覆盖覆盖网络、其他站点和 DC 的 RFC1918“超网”),并在末尾有明确的“允许任何”。
  • 确保隧道接口不是“nat outside”,并且它明确使用面向 SP 的接口作为“隧道源”。
  • 确保通过 VTI 隧道(可能通过动态路由协议获知)指向的路由与 ACL 中从 NAT 中排除的 IP 空间相匹配。
  • 在隧道上运行动态路由协议时(我假设您这样做),不要将默认路由通告给 CE 路由器。

如果您对高级 NAT 设置(全局到 VRF 等)感到满意,请考虑如下设置:

  • 将面向 SP 的接口放入 VRF“INET”
  • 通过 SP 在 VRF“INET”中保留默认路由。
  • 通过 VRF "INET" 在全局路由表 (GRT) 中保留默认路由
  • 在 CE 的 GRT 中保留 VTI 隧道接口和 LAN 接口
  • 使用隧道接口下的“tunnel vrf INET”命令。
  • 确保隧道源(由 IP 或接口名称给出)实际上是 VRF“INET”的一部分。
  • 执行从 GRT 到 VRF“INET”的 NAT 魔术(您可能仍需使用源 ACL)