我一直尝试通过将虚拟机放在具有 2 个接口(一个在前面,一个在后面)的透明桥后面来保护我的 esx 服务器上的虚拟机。
我的目的是将所有防火墙规则放在一个地方(而不是放在每个虚拟服务器上)。
我一直在使用基于 arch linux 的新空白虚拟机作为桥接器(但我怀疑它是哪个品牌的 linux 并不重要)。
我有 2 个虚拟交换机(因此有两个虚拟网络,VN_front 和 VN_back),每个交换机有 2 种类型的端口(交换/分离或混杂/机器可以看到所有数据包)。
在我的桥接机器上,我设置了 2 个虚拟 NIC,一个在 VN_front 上,一个在 VN_back 上,都处于混杂模式。
我已经创建了一个包含两个 NIC 的网桥 br0:
brctl addbr br0
brctl stp br0 off
brctl addif br0 front_if
brctl addif br0 back_if
然后提出来:
ifconfig front_if 0.0.0.0 promisc
ifconfig back_if 0.0.0.0 promisc
ifconfig br0 0.0.0.0
(我使用混杂模式,因为我不确定我是否可以不用它,因为我认为数据包可能无法到达 NIC)
然后我把位于 VN_front 上的一个虚拟服务器插入到 VN_back 上(这是我正在考虑的一个巧妙的用例,只需更改服务器所插入的 VN 即可移动服务器,而无需更改配置中的任何内容)。
然后我查看了我的无地址桥接器所“看到”的 mac brctl showmacs br0
,它确实从两侧显示了我的服务器:
我得到了如下结果:
port no mac addr is local? ageing timer
2 00:0c:29:e1:54:75 no 9.27
1 00:0c:29:fd:86:0c no 9.27
2 00:50:56:90:05:86 no 73.38
1 00:50:56:90:05:88 no 0.10
2 00:50:56:90:05:8b yes 0.00 << FRONT VN
1 00:50:56:90:05:8c yes 0.00 << BACK VN
2 00:50:56:90:19:18 no 13.55
2 00:50:56:90:3c:cf no 13.57
问题是插在前面/后面的服务器没有显示在正确的端口上。
我怀疑 ARP 世界正在发生一些可怕的事情... :-/
如果我从前端虚拟服务器 ping 后端虚拟服务器,则只有后端机器 ping 前端的某个机器时,我才能看到后端机器。一旦我停止从后端机器 ping,从前端机器 ping 就无法通过...
我注意到,如果后面的机器 ping 通,那么它在桥上的端口就是正确的......
我尝试使用 /proc/sys 的 arp_ 开关,但对最终结果没有明显影响... /proc/sys/net/ipv4/ip_forward 在使用网桥时似乎没有任何用处(似乎所有工作都由 brctl 处理)/proc/sys/net/ipv4/conf//arp_似乎也没有太大变化......(尝试将 arp_announce 设置为 2 或 8 - 就像其他地方建议的那样 - 并将 arp_ignore 设置为 0 或 1 )
我见过的所有例子两边都有不同的子网,如 10.0.1.0/24 和 10.0.2.0/24 ...就我而言,我希望两边都有 10.0.1.0/24(就像一个透明交换机 - 除了它是一个隐藏的 fw)。
打开/关闭 stp 似乎对我的问题没有任何影响。
就好像 arp 数据包通过网桥,用虚假数据破坏了另一端...我尝试-arp
在每个接口上使用它,br0,前面,后面...它把整个事情都破坏了...我怀疑这与双方都在同一个子网上有关......
我曾考虑过将我的所有机器都放在fw后面,以便将所有相同的子网放在后面...但我的提供商网关与我的子网的一部分一起位于前面(实际上是3个设备来路由整个子网),所以无论我做什么,我总是会在两侧拥有来自同一子网的ips......(我在委托的子网上使用固定的前端IP)。
我很茫然...-_-''谢谢你的帮助。
(有人尝试过这样的事情吗?在 ESXi 内部?)
(这不仅仅是一个噱头,其想法是在某些服务器上运行类似 fail2ban 的东西,将其被禁止的 IP 发送到网桥/防火墙,以便它也可以禁止它们 - 一次性拯救所有其他服务器免受同一攻击者的攻击,允许一些蜜罐通过任何合适的响应触发防火墙,诸如此类的事情......
我知道我可以使用像 snort 这样的东西,但它以完全不同的方式解决了一些完全不同的问题......)
答案1
如果我理解正确的话,您想要的网络是:
+----------+ +-----+ +---------+
<--inet--+ VN_front +--+ br0 +--+ VN_back |
+--+-------+ +-----+ +------+--+
| |
| |
+--+----------+ +----------+--+
| VM | | VM |
| 10.0.1.2/24 | | 10.0.1.3/24 |
+-------------+ +-------------+
通过左边的箭头进入互联网网关?
您在桥接器上使用 ebtables 或 iptables 来防火墙,那么网络“后端”部分是什么?
我确信这可以实现,但我不会这样做。这是一个复杂且不常见的设置。就像程序员说的那样,总有两个人会调试你创建的任何内容 - 你和六个月后你已经忘记了所有内容的你。
您所见过的所有具有两个子网(并且大概是更简单的防火墙)的示例都是常见的做法,原因在于 - 它们第一次就能起作用,而且配置、更改、维护和排除故障都很明显。
简单是网络的一切。避免构建复杂的网络。为你的简单而稳定的网络感到自豪,一个训练有素的猴子(甚至是 MCSE)都可以运行。让你的老板给你提供关于你收到的票数的 KPI不产生并证明这种稳定性并提供激励。
(如果您的 MAC 地址出现在错误的桥接端口后面,那是因为您创建了网络循环,并且 ARP 请求被广播到桥接器的两个接口,而最后接收的接口会了解 MAC 地址的位置。从您后来的评论来看,听起来您就是这么做的。)