我正在这里进行设置,除了一个小例外,它已经正常工作了。
我的网桥一侧的设备没有通过 SNAT 连接到互联网。
图表/概述:
Primary_Network (Site_A)
|
|
Internet ------- Linux_Bridge_GW (GW)
|
|
Secondary/CoLo Site (Site_B)
设置如下:
- Site_A 拥有所有生产服务器和工作站。
- Site_B 有一组服务器,我们希望将其作为故障转移服务器,同时也为我们的面向互联网的服务提供支持。
- GW 有两个接口,它们是中继的并且承载着适当的 VLAN 流量(允许站点之间的第 2 层流量传播)//这一切都运行良好。
- 遇到的问题是,Site_B 的主机在 Site_A(同一子网)有其默认 GW,而 GW 在传递的 VLAN 上没有 IP。
- Site_A 上的所有主机都可以毫无问题地访问互联网。
- GW 在子网上有一个地址,该地址仅用于 Internet 目的流量。(这样做是为了让 Websense 不必解析不必要的流量。我们使用此 VLAN 作为 Websense 所在交换机上的监视端口源)。
我认为正在发生的情况是:
- 数据包/帧从 Site_B 的 physdev 进入,目的地为 Internet。
- 内核看到数据包,并将其从桥的另一端转发到该主机的默认网关 (GW)。
- Site_A(包含核心网络的默认网关)看到该数据包的目的地是它不知道的主机,因此它将其发送到其默认网关(Linux 桥接器,因为它与互联网绑定)。
- 内核说“嘿,我以前见过你”,因此不对数据包进行 SNAT,而是将其发送到互联网,在那里它被黑洞化。
我认为发生这种情况的原因如下:
- 面向互联网的 NIC 上的 tcpdump 显示数据包离开以私有地址为源的接口。
我想要的是:
- 对数据包进行 SNAT。
- 下面这样的东西就太棒了
- 数据包来自 Site_B
- 内核发现数据包不是发往自身或任何私有地址
- 内核说“好的,既然你要访问互联网,我将通过这个接口将你发送出去,而不是将你转发到远在那边的正常默认网关。”
- 数据包来自互联网,并根据其目的地主机所在的站点,通过适当的桥接物理设备发送出去。
答案1
如果数据包正在被桥接,iptables 当然永远不会看到它们。
解决方案?使用 ebtables 将互联网绑定数据包重定向到机器,以便它们获得 SNAT 处理(我会使用 -j REDIRECT 进行 MAC 处理)