我正在尝试在ebtables中创建IP-MAC配对规则。教程和相关问题[1]很少,但是我有一些特定的设置。
环境: 我有很多物理主机。每个主机只有很少的以太网卡,它们绑定在一起并用作桥的从属。每个主机(kvm,qemu,libvirt)上有许多虚拟机。每个虚拟机通过称为vnet [0-9] +的新端口连接到其物理主机的网桥。没有NAT。网络工作正常,所有物理主机均可ping通,所有虚拟机也均可。每个虚拟机都有自己的IP地址和MAC地址。
问题:在虚拟机内部,可以将IP地址更改为另一个。
解决方案: ebtables站点上有一个已知的解决方案[2],但是仅使用一个主机时,该解决方案才适用。它允许所有流量,并且如果来自IP的数据包与另一个MAC超出允许范围,则数据包将被丢弃。如果主机不止一个,则需要在所有主机上注册所有现有的IP-MAC对。需要反向策略解决方案。
制作的解决方案:我尝试以倒置方式使用ebtables。这是我尝试的示例。
例1
Bridge table: filter
Bridge chain: INPUT, entries: 2, policy: DROP
-i bond0 -j ACCEPT
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT
Bridge chain: FORWARD, entries: 0, policy: ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
例子2
Bridge table: filter
Bridge chain: INPUT, entries: 0, policy: ACCEPT
Bridge chain: FORWARD, entries: 1, policy: DROP
-p IPv4 -s 54:52:0:98:d7:b6 --ip-src 192.168.11.122 -j ACCEPT
Bridge chain: OUTPUT, entries: 0, policy: ACCEPT
我想要的核心是具有默认策略DROP,并且仅允许来自在给定主机上部署了正确IP-MAC对的虚拟机的流量。但是,这些解决方案不起作用。
问题:如何仅对正在运行的虚拟机的指定IP-MAC对允许网桥上的流量,并丢弃来自端口vnet [0-9] +的所有未知IP-MAC对?
非常感谢您提供任何答案。