¿Cómo configuro una interfaz Wireguard para conectarme a un par remoto a través de una interfaz de red específica?

¿Cómo configuro una interfaz Wireguard para conectarme a un par remoto a través de una interfaz de red específica?

Supongamos que tengo dos servidores, gatewayque son públicamente visibles en Internet y appserverque están ocultos detrás de un nat/firewall. Supongamos también que cada uno de estos dos servidores tienedosinterfaces conectadas a enlaces ascendentes de Internet completamente separados (consulte el diagrama a continuación).

Quiero configurar dos túneles Wireguard independientes entre los dos servidores con el objetivo de mantener los servidores conectados si uno de ellos falla:

                   |     Internet     |        
[ gateway ]        |                  |        [appserver]
                   |                  | 
   (wg0) <-----> (ens1) < - - - - > (ens1) <----> (wg0)
                   |                  | 
                   |                  | 
                   |                  |        
   (wg1) <-----> (ens2) < - - - - > (ens2) <----> (wg1)
                   |                  | 
                   |                  | 

De forma predeterminada, Wireguard parece enrutar todo el tráfico a través de la puerta de enlace predeterminada del sistema. Entonces, cuando appserverintenta conectarse gateway, solo usa una de las dos interfaces:

                   |     Internet     |        
[ gateway ]        |                  |        [appserver]
                   |                  | 
   (wg0) <--+--> (ens1) < - - - - > (ens1) <--+--> (wg0)
            |      |                  |       |
            |      |                  |       |
            |      |                  |       | 
   (wg1) <--+    (ens2)      X      (ens2)    +--> (wg1)
                   |                  | 
                   |                  |

Dado que algunas herramientas de red permiten configurar una interfaz de red específica para usar al enviar tráfico de red, ¿Wireguard también puede hacer lo mismo? Es decir, ¿enviar tráfico únicamente a través de las métricas de ruta predeterminadas ens1o independientemente de ellas? ens2Si no es así, ¿cómo puedo configurar los sistemas de red de Linux para que hagan esto?

Respuesta1

No pude encontrar una manera de hacer que Wireguard se conectara a través de una interfaz específica, por lo que finalmente decidí simplemente enrutar el tráfico destinado ens2agregando una nueva ruta a appserverlas tablas de enrutamiento de :

ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50

APPSERVER_ESN2_ADDR_GWes la dirección del appserverenrutador de puerta de enlace.

Mientras investigaba esto, noté que Wireguard le permite establecer una marca de fábrica en el tráfico saliente que pertenece a una interfaz Wireguard específica configurando el FwMarkcampo debajo [Interface]. Wireguard no admite el establecimiento de esta marca por pares al momento de escribir este artículo (2021-09).

*Dejaré esta pregunta abierta en caso de que alguien descubra una solución adecuada.

información relacionada