Uniendo dos interfaces mientras se desvía algo de tráfico

Uniendo dos interfaces mientras se desvía algo de tráfico

Objetivo

Estoy buscando hacer algo como esto:

ingrese la descripción de la imagen aquí

Donde el "mini enrutador" ayuda a controlar y proteger un sistema heredado que no se puede actualizar por razones complejas y reside en algún lugar "en la naturaleza". Esperamos modernizar los sistemas con un sistema económico y de bajo consumo (por ejemplo, 0,5 V y <100 mA). Hay varios miles de estos sistemas SCADA esparcidos por todas partes. Necesitamos hacer una modernización de sombrero blanco, pero alrededor del 15% al ​​30% de los entornos no podemos obtener una dirección IP (sin DHCP) para el "mini enrutador" y necesitamos compartir la IP del sistema Computadora/SCADA. Pensé que podríamos configurar un puente transparente (el br0 a continuación funciona como un puente):

root% ip link add name br0 type bridge
root% ip link set dev br0 up
root% ip link set dev eth0 master br0
root% ip link set dev eth1 master br0
root% ip address add 10.253.252.2 dev br0
root% sysctl -w net.ipv4.conf.all.forwarding=1

Y luego use ebtables/iptables/iproute2 para enrutar el tráfico desde el Servidor1 destinado a la Computadora para que podamos cifrar/descifrar SSL el tráfico entre ellos y/o "consumir" el tráfico entre el Servidor2 y la Computadora, ya que está destinado a configurar y controlar el "mini enrutador". ".

Como me gustaría que fuera un puente completamente transparente, eliminé las direcciones de eth0 y eth1:

root% ip address flush dev eth0
root% ip address flush dev eth1
root% ip address add 0.0.0.0 dev eth0
root% ip address add 0.0.0.0 dev eth1
root% ip link set dev eth0 up
root% ip link set dev eth1 up
root% ip link set dev eth0 promisc on
root% ip link set dev eth1 promisc on
root% ip link set dev br0 promisc on # Not sure if needed

Desafortunadamente, no puedo desviar el tráfico hacia/desde el servicio que manejará los mensajes de control.

NOTA: De hecho, puedo asignar una dirección no enrutable a br0 (por ejemplo, 169.254.1.2) y si el Servidor1 está en el segmento LAN local (por ejemplo, en el mismo conmutador), el método que se describe a continuación (Intentos versión 1) obras; sin embargo, los paquetes TCP/IP tienen un src o dst de 169.254.1.2, que no son enrutables y no pueden cruzar enrutadores o límites de LAN, pero al Servidor1 y al "mini enrutador" no parece importarles. Según lo anterior, no puedo simplemente obtener un DHCP en br0 (que también funciona), porque potencialmente más de mil "mini enrutadores" no podrán obtener una dirección DHCP.

Pregunta:

¿Cómo podría hacer esto? A continuación se muestran las cosas que he probado.

Intentos:

He buscado varias soluciones con poca suerte. Por ejemplo,"iptables - ¿Destino para enrutar el paquete a una interfaz específica?", sugiere que marcar paquetes y usar una tabla de enrutamiento diferente podría funcionar; sin embargo, los ejemplos no son un puente. He pasado bastante tiempo analizando losDocumentación de Netfiltere intuitivamente parece que debería poder ponerNAT de filtro de redentre br0 y eth1, pero nuevamente, no veo cómo.IPsec de LAN a LANo una solución VPN directa requiere conexiones persistentes entre puntos finales que no tendremos. La computadora solo necesita llamar periódicamente a casa o recibir información push, pero no necesita una conexión segura persistente. Debido a que la computadora/sistema SCADA también necesita comunicarse con otros sistemas, el mini enrutador no debe interferir con ningún tráfico existente entre la computadora y la LAN/enrutador.

Intentos versión 1

Primero limpié la pizarra con las reglas:

root% ip rule flush
root% ip rule add lookup default priority 32767
root% ip rule add lookup main priority 32766

Obtener tramas Ethernet entre el Servidor1 y la Computadora para "CAER" a la capa de red.

root% ebtables -t broute -A BROUTING -p IPv4 \
      --ip-source 5.6.7.1 --ip-destination 10.0.0.1 \
  -j redirect --redirect-target DROP
root% ebtables -t broute -A BROUTING -p IPv4 \
      --ip-source 10.0.0.1 --ip-destination 5.6.7.1 \
  -j redirect --redirect-target DROP

Redirigir el tráfico del servidor1<-->computador a la dirección br0

root% iptables -t nat -A PREROUTING -p tcp \
      -s 5.6.7.1 -d 10.0.0.1 \
  -j DNAT --to-destination 10.253.252.2
root% iptables -t nat -A POSTROUTING -p tcp \
      -d 10.253.252.2 \
  -j SNAT --to-source 10.0.0.1
root% iptables -t nat -A POSTROUTING -j MASQUERADE

Agregar una ruta al Servidor1 a través de br0

root% ip route add 5.6.7.2 via 10.253.252.2 dev br0

Y cruce los dedos, pero no funciona. Probé muchas permutaciones diferentes de esto.

Intentos versión 2

Más recientemente, probé una versión más cercana a la mencionada anteriormente con -j MARK para enrutamiento de paquetes sin éxito:

root% ip rule add fwmark 2 priority 1000 table 3
root% ip route add default via 10.0.0.1 table 3
root% ip route flush cache
root% ip route flush table 3
root% iptables -t mangle -A OUTPUT -p tcp -s 5.6.7.1 -j MARK --set-mark 2
root% iptables -t nat -A POSTROUTING -o br0 -j MASQUERADE
root% ip route add 0.0.0.0/1 via 10.253.252.2 dev br0 table 3

información relacionada