Tenemos un puente configurado en Ubuntu para vincular nuestra LAN a nuestra puerta de enlace que está en la misma subred. Necesitamos esto para poder controlar el tráfico y actualmente no estamos en condiciones de cambiar las subredes, por lo que no podemos simplemente enrutarlo.
La puerta de enlace se controla a través de nuestro ISP, que proporciona MPLS a otras subredes /24 dentro de 192.168.0.0/16.
La configuración actual es la siguiente:
192.168.10.1 (gw) <-> eth0 <-> br0 (192.168.10.3) <-> eth1 <-> LAN (192.168.10.0/24)
br0 Link encap:Ethernet HWaddr ..
inet addr:192.168.10.3 Bcast:192.168.10.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
...
eth0 Link encap:Ethernet HWaddr ..
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
eth1 Link encap:Ethernet HWaddr ..
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
Esto funciona bien y no causa ningún problema.
También tenemos una VPN Tinc para la infraestructura de nuestro centro de datos en el mismo servidor (192.168.10.3) que no forma parte del puente. es decir:
tincvpn Link encap:Ethernet HWaddr ..
inet addr:192.168.10.3 Bcast:192.168.255.255 Mask:255.255.0.0
...
Nos gustaría anular el enrutamiento de los paquetes que pasan a través del puente desde la LAN para ciertos destinos (por ejemplo, 192.168.5.0/24) para que pasen a través de tinc. es decir: 192.168.10.x en LAN a 192.168.5.x debe ir a través de tinc y no a la puerta de enlace.
Nos gustaría que esto funcione para todas las máquinas en la LAN sin tener que configurar nada, pero por ahora hemos encontrado una solución que es agregar la siguiente ruta estática a cada PC/Servidor en la LAN:
route add -net 192.168.5.0/24 via 192.168.10.3 dev eth0
Para que funcione la ruta estática, también tuvimos que habilitar proxy_arp para todas las interfaces en 192.168.10.3.
Probamos la siguiente configuración pero no funcionó:
ip rule add fwmark 20 lookup 20
ip route add 192.168.0.0/16 dev tincvpn table 20
ebtables -t broute -I BROUTING -i eth1 -p ipv4 --ip-dst 192.168.5.0/24 -j REDIRECT --redirect-target DROP
iptables -t mangle -I PREROUTING -i eth1 -d 192.168.5.0/24 -j MARK --set-mark 20
Con esta configuración, los paquetes llegaron a la regla de mangle y se marcaron, pero no se enrutaron a la interfaz tincvpn.
Entendimos que necesitábamos eliminar los paquetes del puente usando ebtables y luego usar el enrutamiento basado en políticas para hacer que los paquetes pasaran por tinc. ¿Es correcto este entendimiento?
Si alguien tiene alguna idea de por qué esto no funcionó, se lo agradecería.
Muchas gracias,
Tomás