
Suponha que eu tenha dois servidores, gateway
que sejam publicamente visíveis na Internet e appserver
que 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 appserver
tenta 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 ens1
ou ens2
independentemente 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 ens2
adicionando uma nova rota às appserver
tabelas 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 appserver
roteador 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 FwMark
campo 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.