Problemas al realizar un proxy transparente para máquinas virtuales

Problemas al realizar un proxy transparente para máquinas virtuales

Primero aquí está la topología básica:

  Internet
     |
  Gateway
     |
Workstation---eth0---virbr0
                       |
                       +-----+-----+
                       |     |     |
                      vm1   vm2   vm3 

Necesito probar un analizador de tráfico que se ejecuta en mi estación de trabajo, escuchando en algún puerto (digamos 8990) en eth0.

La regla [creo] que quiero es "cualquier paquete que salga de virbr0 y vaya al puerto 80 debe ir al puerto 8990 en eth0". Mi software que se ejecuta en el puerto 8990 realiza su propia verificación de la manipulación de paquetes NAT para enviar los paquetes después de inspeccionarlos.

Me he estado golpeando la cabeza con esto, con diferentes variantes de:

iptables -t nat -A PREROUTING -i virbr0 -p tcp --dport 80 -j DNAT \
    --to 10.0.0.10:8990

Y probé el método más genérico de usar la mangletabla con --set-marky ip rule add fwmark, pero no lo entiendo.

Supongo que lo que me confunde es que todo funciona en la misma caja.

Gracias por cualquier orientación.

Respuesta1

Resulta que esta pregunta es discutible. Tcpdump muestra que la subred de las VM, 192.168.122.0/24, ni siquiera aparece en la decisión de enrutamiento del kernel. Supongo que libvirtd maneja su propia red antes de pasarla a la pila de red del kernel.

De vuelta a la mesa de dibujo.

información relacionada