
Actualmente estoy intentando desarrollar una aplicación de enrutador que aplica/elimina contenedores de seguridad a paquetes entre dos interfaces. El protocolo es BACnet y se ejecuta sobre UDP. El diseño se puede ver en la imagen aquí:
En su mayor parte, todo funciona bien. La aplicación del enrutador puede comunicarse perfectamente con el controlador y el simulador del dispositivo. Mi problema surge cuando el enrutador transmite paquetes de difusión (estos son requeridos por la especificación BACnet). Todos los paquetes enviados a 192.168.56.255 se reciben en 192.168.39.4 y todos los paquetes enviados a 192.168.39.255 se reciben en 192.168.56.101.
Este no es el comportamiento que sospechaba, ya que están en subredes diferentes, por lo que supongo que el kernel de Linux está realizando algún enrutamiento secreto debajo de mis narices, ya que no puedo ver nada en Wireshark en la interfaz enp0s8, enp0s9 o lo. simplemente vea cómo llegan los paquetes a la capa de aplicación de la aplicación del enrutador.
Deshabilité el reenvío de ipv4 (net.ipv4.ip_forward = 0 en sysctl) e intenté alterar el reenvío de iptables, pero no funcionó. También ejecuté "ip route show table local" y eliminé las rutas locales pertenecientes a mis dos interfaces; esto impidió que los paquetes de transmisión se recibieran en la otra interfaz, pero evitó toda comunicación con mi máquina host.
¿Existe una forma sencilla de bloquear todo el tráfico de red entre dos interfaces?