Estoy tratando de crear reglas de emparejamiento IP-MAC en ebtables . Hay pocos tutoriales y preguntas relacionadas [1] disponibles, pero tengo una configuración específica.
ENTORNO: Tengo muchos anfitriones físicos . Cada host tiene pocas tarjetas de ethernet, unidas en enlace y usadas como esclavas para bridge. Hay muchas máquinas virtuales en cada host (kvm, qemu, libvirt). Cada máquina virtual está conectada a un puente de su host físico a través de un nuevo puerto llamado vnet [0-9] +. No hay NAT. La conexión en red funciona bien, todos los hosts físicos pueden ser fijados, también todas las máquinas virtuales. Cada máquina virtual tiene su propia dirección IP y dirección MAC.
PROBLEMA: Dentro de una máquina virtual, la dirección IP se puede cambiar a otra.
SOLUCIÓN ENCONTRADA: Existe una solución conocida en el sitio de ebtables [2], pero esta solución es aplicable cuando solo se utiliza un host. Permite todo el tráfico y si hay un paquete de IP con otro MAC que el permitido, el paquete se descarta. Si hay más de un host, requiere que todos los pares de IP-MAC existentes estén registrados en todos los hosts. Hay necesidad de una solución de política inversa.
SOLUCIÓN CREADA: He intentado usar ebtables de manera invertida. Aquí hay un ejemplo de lo que probé.
EJEMPLO 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
EJEMPLO 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
El núcleo de lo que quiero es tener DROP de política predeterminada y solo permitir el tráfico de máquinas virtuales con el par IP-MAC correcto implementado en un host dado. Sin embargo, esas soluciones no funcionan.
PREGUNTA: ¿Cómo permitir el tráfico en el puente solo para pares de IP-MAC específicos de máquinas virtuales en ejecución y descartar todos los pares de IP-MAC desconocidos que provienen de los puertos vnet [0-9] +?
Muchas gracias por cualquier respuesta.