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 mangle
tabla con
--set-mark
y 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.