Enrutamiento con WireGuard. Tiene una solución que funciona pero se siente como un truco.

Enrutamiento con WireGuard. Tiene una solución que funciona pero se siente como un truco.

Estoy intentando enrutar el tráfico proveniente de una red acoplable... Tengo Wireguard en funcionamiento y, a diferencia de los ejemplos en los documentos que enrutan TODO el tráfico a través de la VPN según el destino, estoy tratando de enrutar solo PARTE del tráfico. basado en la red de origen, la política de enrutamiento y luego en el destino.

Básicamente, quiero que todo el tráfico proveniente de 10.30.0.0 (red Docker Bridge) pase por la interfaz wg0, excepto el tráfico que regresa a la misma red o a mi LAN. Básicamente, solo tráfico de Internet saliente.

Lo tengo funcionando... más o menos... usando rutas estáticas.

post-up ip rule add from 10.30.0.0/16 table 200
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200
post-up ip route add 192.168.0.0/16 via 192.168.0.1 table 200
post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200

Usando la tabla 200 para todo el tráfico proveniente de 10.30.0.0, la ruta predeterminada es a través de wg0. La ruta alternativa es un agujero negro, un interruptor de apagado en caso de que wg0 falle.

Las siguientes dos rutas se encargan de enrutar todo lo interno alrededor de wg0; de lo contrario, los contenedores no pueden comunicarse entre sí en las redes o no se puede acceder a ninguna webgui. Esto funciona perfectamente.

EXCEPTO que llamo a estas rutas en /etc/network/interfaces.d/wg0 para que las interfaces se creen y aparezcan en el arranque, con las rutas adecuadas. Todo está bien excepto esta ruta:

post-up ip route add 10.30.0.0/16 via 10.30.0.1 table 200

Falla porque el puente acoplable aún no está activo cuando aparece wg0, por lo que no puede crear la ruta porque falta la puerta de enlace. Por el momento, lo pirateé y usé "@reboot" en cron para abrir esta ruta después de que la red acoplable esté activa.

¿Existe una solución más elegante? Pensé en marcar todos los paquetes provenientes de 10.30.0.0 que no están destinados a 10.30.0.0 o 192.168.0.0 y (iptables -s 10.30.0.0/16 ! -d 192.168.0.0/16 etc etc) para evitar tener que usar esa ruta, pero no puedo resolverla por mi vida.

Agradezco cualquier ayuda

Respuesta1

Lo resolví llamando a la tabla principal para esas rutas locales en lugar de tener rutas en la tabla 200 para ellas.

post-up ip rule add from 10.30.0.0/16 table 200
post-up ip rule add from 10.30.0.0/16 to 192.168.0.0/16 table main
post-up ip rule add from 10.30.0.0/16 to 10.30.0.0/16 table main
post-up ip route add default via a.b.c.d metric 2 table 200
post-up ip route add blackhole default metric 3 table 200

información relacionada