桥接和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有两个接口是中继,并承载适当的VLANstream量(允许站点之间的stream量二层传播)/ /这一切都工作得很好。
  4. 正在遇到的问题是,来自Site_B的主机在Site_A(同一个子网)上的默认GW在传递的VLAN上没有IP。
  5. Site_A的所有主机都可以正常访问Internet。
  6. GW在一个子网上有一个地址,仅用于因特网指定的stream量。 (这样做是为了让Websense不必分析不必要的stream量,我们使用这个VLAN作为Websense所在交换机的监控端口源。

我认为正在发生:

  1. 数据包/帧来自Site_B的physdev,目的地是Internet。
  2. 内核看到数据包,并将它从网桥的另一端转发到该主机的默认网关。
  3. Site_A(包含核心networking的Default-GW)看到这个数据包是发往一个不知道的主机,所以它把它发送给它的默认网关(Linux网桥,因为它是Internet绑定的)。
  4. 内核说:“嘿,我以前见过你”,因此不会对包进行SNAT操作,并将它发送到互联网,这是黑洞。

为什么我认为这是发生:

  1. 面向NIC的互联网上的tcpdump显示了数据包离开接口的私有地址,因为它是源代码。

我想要什么:

  1. 有SNAT的数据包。
  2. 像下面的东西会很棒
    • 数据包来自Site_B
    • 内核认为数据包不是为自己或任何私人地址的目的地
    • 内核说:“好吧,既然你注定要上网,我会把你送出这个界面,而不是把你转到正常的默认GW,WAAAY那里。
    • 数据包来自互联网,并根据其目的主机所在的站点发送出适当的网桥physdev。

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

解? 使用ebtablesredirect到networking绑定的数据包,以便他们将得到SNAT治疗(我会使用-j REDIRECT for MAC mangling)