桥接和 iptables SNAT 冲突

桥接和 iptables SNAT 冲突

我正在这里进行设置,除了一个小例外,它已经正常工作了。

我的网桥一侧的设备没有通过 SNAT 连接到互联网。


图表/概述:

                Primary_Network (Site_A)
                        |
                        |
Internet ------- Linux_Bridge_GW (GW)
                        |
                        |
                 Secondary/CoLo Site (Site_B)

设置如下:

  1. Site_A 拥有所有生产服务器和工作站。
  2. Site_B 有一组服务器,我们希望将其作为故障转移服务器,同时也为我们的面向互联网的服务提供支持。
  3. GW 有两个接口,它们是中继的并且承载着适当的 VLAN 流量(允许站点之间的第 2 层流量传播)//这一切都运行良好。
  4. 遇到的问题是,Site_B 的主机在 Site_A(同一子网)有其默认 GW,而 GW 在传递的 VLAN 上没有 IP。
  5. Site_A 上的所有主机都可以毫无问题地访问互联网。
  6. GW 在子网上有一个地址,该地址仅用于 Internet 目的流量。(这样做是为了让 Websense 不必解析不必要的流量。我们使用此 VLAN 作为 Websense 所在交换机上的监视端口源)。

我认为正在发生的情况是:

  1. 数据包/帧从 Site_B 的 physdev 进入,目的地为 Internet。
  2. 内核看到数据包,并将其从桥的另一端转发到该主机的默认网关 (GW)。
  3. Site_A(包含核心网络的默认网关)看到该数据包的目的地是它不知道的主机,因此它将其发送到其默认网关(Linux 桥接器,因为它与互联网绑定)。
  4. 内核说“嘿,我以前见过你”,因此不对数据包进行 SNAT,而是将其发送到互联网,在那里它被黑洞化。

我认为发生这种情况的原因如下:

  1. 面向互联网的 NIC 上的 tcpdump 显示数据包离开以私有地址为源的接口。

我想要的是:

  1. 对数据包进行 SNAT。
  2. 下面这样的东西就太棒了
    • 数据包来自 Site_B
    • 内核发现数据包不是发往自身或任何私有地址
    • 内核说“好的,既然你要访问互联网,我将通过这个接口将你发送出去,而不是将你转发到远在那边的正常默认网关。”
    • 数据包来自互联网,并根据其目的地主机所在的站点,通过适当的桥接物理设备发送出去。

答案1

如果数据包正在被桥接,iptables 当然永远不会看到它们。

解决方案?使用 ebtables 将互联网绑定数据包重定向到机器,以便它们获得 SNAT 处理(我会使用 -j REDIRECT 进行 MAC 处理)

相关内容