使用 NVA 进行 SNAT 时回复流量丢失

使用 NVA 进行 SNAT 时回复流量丢失

我正在尝试在实验室订阅中实现以下内容,如下所述https://learn.microsoft.com/en-us/azure/architecture/guide/networking/ipv4-exhaustion#implement-snat-via-third-party-nvas (方法 1:不可路由的登陆区辐射虚拟网络/出站依赖项/通过第三方 NVA 实现 SNAT)

具有可路由中心的多个着陆区

在这个阶段,这对我来说纯粹是一个学习练习,但最终的目标是支持与一系列现有的本地资产的互连,其中每个资产的 VPN 将建立到 VPN 网关或(更可能)到指定的 VNET 中的第三方 NVA可路由的集线器

在最终的设置中将会有很多着陆区以及自治(阅读:政治的)原因,我将不会监督每个LZ 辐条因此,我希望使用每个区域将来自这些分支的出站流量集中到我可以管理的地址空间中可路由的 LZ 集线器VNET(我控制)作为中介。

在实验室中,我成功建立了:

  • 本地和可路由的集线器 (A),使用第三方 NVA
  • VNET 对等连接可路由的集线器(A)及可路由的 LZ 集线器 (二)
    • (B)中存在一个路由表,用于通过 NVA 路由本地子网
    • (B) 中的 VM 可以 ping 通 (A) 中的 NVA
    • (B) 中的虚拟机可以 ping 本地设备,通过 NVA 进行路由
  • VNET 对等连接可路由的 LZ 集线器(乐队LZ说了 (C)
    • (B) 中的虚拟机可以通过默认路由 ping (C) 中的虚拟机
    • (C) 中的虚拟机可以通过默认路由 ping (B) 中的虚拟机

我现在正尝试应用出站依赖项其中 (C) 中的虚拟机可能需要访问本地设备。因此,我添加了:

  • NVA 设备到 (B),具体来说是 Azure 市场上的单臂 pfSense VM
  • 路由表 (C),通过 pfSense 路由本地子网
  • 我已经配置了一个出站 NATpfSense 上的规则将(C)地址空间中的任何内容转换为(B)地址空间中的 pfSense 地址。

有了这个,我可以看到:

  • 来自(C)虚拟机的流量到达 pfSense
  • pfSense 将 SNAT 应用于其地址,并发送到(B)的默认网关
  • (A)中的 NVA 使用 pfSense 的源地址接受来自(B)的流量
  • NVA 通过 VPN 发送,针对本地设备
  • 目标本地设备看到流量、接受并回复
  • (A)中的 NVA 接收回复流量并转发到(B)中的 pfSense,pfSense 接受该流量
  • (B)中的 pfSense 反转 SNAT 并转发到(C)中 VM 的地址

但回复流量从未出现在(C)中的虚拟机上。

下面是我所说的我所能看到的一些“证据”:

pfSense 界面上的数据包跟踪可视化 从中心的 NVA 登录

  • VM IP 为 10.0.16.254;它存在于(C),子网 10.0.16.0/20
  • pfSense IP 为 172.23.2.6;它存在于(B),子网 172.23.2.0/24
  • 目标本地设备 IP 为 172.18.4.80;子网 172.18.0.0/16(通过 VPN)

如果我理解正确的话,pfSense 正确地对流量进行了 SNAT 和 un-SNAT,但是在回复过程中,流量在(B)中的 pfSense 和(C)中的 VM 之间的某个地方被丢弃。

那里pfSense 和 VM 接口上的 NSG,但我相信这些是正确的——因为它们都有一条规则,允许从 172.18.0.0/16 到虚拟网络在三个默认规则之前的某个时间点。

(我认识到,在核供应国集团内部,虚拟网络不包括本地子网,因为它不与任何 VNET 直接关联,但我相信应该包括所有对等的 VNET 子网。

其他值得注意的事情(但可能是转移注意力的话题):

  • (C) 中的虚拟机配置为记录所有接受和阻止的数据包
  • 从 (B) 中的 pfSense 到 (C) 中的虚拟机上的有效服务的 tcpping 似乎到达了虚拟机并被记录下来
  • 从 pfSense 到 VM 上无效服务的 tcpping 似乎未被记录(但可能是日志刷新延迟)

我肯定我错过了一些简单的事情,但是还有什么在 (B) 中的 pfSense 取消 SNAT 之后,可能会阻止回复流量到达 (C) 中的 VM……?

PS. 请注意,由于这对我来说和其他任何事情一样都是一次学习练习,因此我目前特别感兴趣的是微软所绘制的模型,而不是任何其他模型——包括同一页上的替代图表

PPS。还请注意,虽然目标图显示两个 SNAT NVA 具有前端负载均衡器 IP,但我目前只有一个 SNAT NVA,没有 LB IP——我只是试图让原则最初发挥作用,稍后再研究高可用性。如果 LB IP 提供了拼图中缺失的部分,请提供建议。

答案1

看来,为了让未经过 SNAT 的数据包离开 pfSense,分配给 pfSense VM 的 NIC 必须配置为启用 IP 转发选项。

启用此选项可禁用 Azure 内部限制,该限制可防止虚拟机使用与分配给它的私有地址不同的源 IP 地址发送网络流量。如果虚拟机充当 NAT 设备,这一点至关重要。

这似乎是我们从 Azure 市场安装的 pfSense 防火墙中的一个错误,因为它不会在它创建的 NIC 上自动启用此设置。

启用此选项后,所有流量均按图表所述流动。

相关内容