Como configuro uma interface Wireguard para conectar-se a um ponto remoto por meio de uma interface de rede específica?

Como configuro uma interface Wireguard para conectar-se a um ponto remoto por meio de uma interface de rede específica?

Suponha que eu tenha dois servidores, gatewayque sejam publicamente visíveis na Internet e appserverque estejam ocultos atrás de um nat/firewall. Suponha também que cada um desses dois servidores tenhadoisinterfaces conectadas a uplinks de Internet totalmente separados (veja o diagrama abaixo).

Quero configurar dois túneis Wireguard independentes entre os dois servidores com o objetivo de manter os servidores conectados caso um deles falhe:

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

Por padrão, o Wireguard parece rotear todo o tráfego através do gateway padrão do sistema. Portanto, quando appservertenta se conectar gateway, ele usa apenas uma das duas interfaces:

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

Como algumas ferramentas de rede permitem definir uma interface de rede específica para usar ao enviar tráfego de rede, o Wireguard também pode fazer a mesma coisa? Ou seja, enviar tráfego apenas ens1ou ens2independentemente das métricas de rota padrão? Caso contrário, como posso configurar os sistemas de rede do Linux para fazer isso?

Responder1

Não consegui encontrar uma maneira de fazer com que o próprio wireguard se conectasse por meio de uma interface específica, então acabei decidindo simplesmente rotear o tráfego destinado ens2adicionando uma nova rota às appservertabelas de roteamento de :

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

APPSERVER_ESN2_ADDR_GWé o endereço do appserverroteador de gateway de.

Ao pesquisar isso, percebi que o wireguard permite definir um fwmark no tráfego de saída pertencente a uma interface wireguard específica, definindo o FwMarkcampo em [Interface]. Wireguard não suporta a definição desta marca por peer no momento da redação deste artigo (2021-09).

*Deixarei esta questão em aberto caso alguém descubra uma solução adequada.

informação relacionada