在linux上透明网桥的ARP问题

我一直试图通过将它们放置在具有2个接口的透明桥上,一个在前面,一个在后面,来保护我的虚拟机在我的esx服务器上。

我的意图是把所有的防火墙规则放在一个地方(而不是在每个虚拟服务器上)。

我一直在使用一个基于arch linux的空白新虚拟机(但是我怀疑它与哪个品牌的linux无关)。

我有两个虚拟交换机(因此两个虚拟networking,VN_front和VN_back),每个都有两种types的端口(交换/分开或promiscious /机器可以看到所有的数据包)。

在我的桥接器上,我已经设置了两个虚拟网卡,一个在VN_front上,另一个在VN_back上,都处于promisc模式。

我已经创build了一个两个网卡的桥梁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 

(我使用promisc模式,因为我不确定我能否离开,认为可能数据包没有到达网卡)

然后,我把我的一台虚拟服务器安装在VN_front上,并将其插入到VN_back中(这是我正在考虑的一个很好的用例,只需改变插入的VN就可以移动我的服务器,而不需要改变任何东西在configuration中)。

然后我使用brctl showmacs br0查看了我的无地址桥“看到”的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在两边(就像一个透明的开关 – 除了这是一个隐藏的前锋)。

打开/closuresstp似乎对我的问题没有任何影响。

就好像arp数据包在通过网桥的时候,用错误的数据破坏了另一端…我试图在每个接口上使用-arp ,br0,front,back …它完全打破了这个事情。 。我怀疑这和双方在同一个子网上有什么关系。

我想过把我所有的机器放在fw后面,以便在后面拥有完全相同的子网…但是我的供应商的网关与我的子网的一部分站在一起(实际上是3个设备路由整个子网),所以我会永远有ips从两边同一子网,无论我做什么…(我在我的委托子网上使用固定的前端IP)。

我很茫然…… -_-“Thx为你的帮助。

(正如任何人从ESXi内部尝试这样的?)

(这不仅仅是一个特技,其思想是在某些服务器上运行fail2ban之类的东西,将被禁止的IP发送到bridge / fw,这样也可以禁止它们 – 一次性保存来自同一攻击者的所有其他服务器,允许一些蜜jar,从任何适当的响应触发fw和这种东西…

我知道我可以使用类似snort的东西,但它以完全不同的方式解决了一些完全不同的问题…)

如果我理解正确,你想要的networking是:

  +----------+ +-----+ +---------+ <--inet--+ VN_front +--+ br0 +--+ VN_back | +--+-------+ +-----+ +------+--+ | | | | +--+----------+ +----------+--+ | VM | | VM | | 10.0.1.2/24 | | 10.0.1.3/24 | +-------------+ +-------------+ 

通过互联网网关通过左边的箭头?

你在网桥上使用ebtables或iptables来防火墙的“后面”部分是什么?

我确信这可以起作用,但我不会这样做。 这是一个复杂而不寻常的设置。 就像程序员说的那样,总有两个人会debugging你创build的任何东西 – 你和你在六个月之内忘了这一切。

所有你看过的有两个子网的例子(大概是简单得多的防火墙)是有原因的 – 这是他们第一次工作,他们很明显的configuration,更改,维护和排除故障。

简单就是联网的一切。 避免build立一个复杂的networking。 以您训练有素的猴子(甚至是MCSE)可以运行的简单而稳定的networking为荣。 让你的老板给你KPI关于你没有产生certificate的票数,并给予稳定的激励。

(如果您的MAC出现在错误的桥接端口后面,那是因为您已经创build了一个networking环路,并且ARP请求正在广播到网桥的两个接口,并且最后接收到的接口获知了MAC的位置。后来的评论,这听起来像你已经做到了。)