Tengo un servidor Ubuntu 16.04 sin sistema operativo con KVM y 3 NIC que están conectados mediante puentes br1, br2 y br3 a una máquina virtual invitada que también ejecuta el servidor Ubuntu 16.04.
La primera NIC, br1, está conectada a Internet y la dirección de su enrutador está definida como la puerta de enlace predeterminada para el invitado.
Tengo un código ejecutándose en mi invitado que necesita escuchar los paquetes recibidos por br2 y br3, el código debe escuchar solo 1 NIC,
Intenté reenviar el tráfico desde en2 (el nombre de la NIC invitada que está conectada mediante un puente a través de br2) a en3 (lo mismo con br3) mediantesiguiendo esto:
sudo nano /etc/sysctl.conf
uncomment net.ipv4.ip_forward = 1
sudo sysctl -p
sudo iptables -t nat -A POSTROUTING --out-interface en3 -j MASQUERADE
sudo iptables -A FORWARD --in-interface en2 --out-interfac en3 -j ACCEPT
Sin embargo, no se registra nada al usar sudo tpcdump -i en3
y enviar un mensaje de ping a NIC2 (aunque si ejecuto sudo tpcdump -i en2
puedo ver los mensajes de ping)
¿Que me estoy perdiendo aqui? ¿Existe una mejor manera de obtener el resultado deseado (que mi código escuche 1 NIC y obtenga el tráfico de ambas NIC)?
Respuesta1
Para escuchar específicamente el tráfico reenviado, es mejor crear una nflog
regla/interfaz.
Tomando volcados de tráfico en Linux
Entonces crearás una nflog
interfaz:
sudo iptables -t filter -I FORWARD -j NFLOG --nflog-group 6
y luego escúchalo:
sudo tcpdump -s 0 -n -i nflog:6
La solución al problema es utilizar la interfaz nflog en el marco de iptables para obtener exactamente los paquetes que nos interesan.
Las reglas de nflog se registran en un grupo de multidifusión interno del kernel, que se identifica mediante un número entero en el rango 0 - 2^16-1. Solo se capturará la parte del datagrama que ve el marco. Para iptables, es un paquete IPv4.
El uso de nflog para volcar paquetes le obliga a utilizar una sintaxis de interfaz especial para tcpdump y wirehark. Debes utilizar nflog:groupnumber como interfaz.
Debido a que las reglas de nflog son reglas normales de iptables, las reglas necesitan una coincidencia adecuada y una parte objetivo para que usted obtenga exactamente el tráfico que desea. También debes colocar la regla en el lugar correcto para que obtenga los paquetes que te interesan.