Wie konfiguriere ich eine Wireguard-Schnittstelle, um über eine bestimmte Netzwerkschnittstelle eine Verbindung zu einem Remote-Peer herzustellen?

Wie konfiguriere ich eine Wireguard-Schnittstelle, um über eine bestimmte Netzwerkschnittstelle eine Verbindung zu einem Remote-Peer herzustellen?

Angenommen, ich habe zwei Server, gatewaydie im Internet öffentlich sichtbar sind und appserverhinter einer NAT/Firewall verborgen sind. Nehmen wir außerdem an, dass jeder dieser beiden ServerzweiSchnittstellen, die mit völlig separaten Internet-Uplinks verbunden sind (siehe Diagramm unten).

Ich möchte zwei unabhängige Wireguard-Tunnel zwischen den beiden Servern einrichten, mit dem Ziel, die Verbindung zwischen den Servern aufrechtzuerhalten, wenn einer von ihnen ausfällt:

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

Standardmäßig scheint Wireguard den gesamten Datenverkehr über das Standard-Gateway des Systems zu leiten. Bei appserverVerbindungsversuchen gatewaywird daher nur eine der beiden Schnittstellen verwendet:

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

Da einige Netzwerktools das Festlegen einer bestimmten Netzwerkschnittstelle zum Senden von Netzwerkverkehr ermöglichen, kann Wireguard dasselbe tun? Das heißt, nur Verkehr über ens1oder ens2unabhängig von den Standardroutenmetriken senden? Wenn nicht, wie kann ich stattdessen die Netzwerksysteme von Linux so einrichten, dass dies möglich ist?

Antwort1

Ich konnte keine Möglichkeit finden, Wireguard selbst über eine bestimmte Schnittstelle zu verbinden, also entschied ich mich letztendlich dafür, den an bestimmten Datenverkehr einfach umzuleiten, ens2indem ich den Routing-Tabellen eine neue Route hinzufügte appserver:

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

APPSERVER_ESN2_ADDR_GWist die Adresse des appserverGateway-Routers.

Bei meinen Recherchen habe ich festgestellt, dass Sie mit Wireguard eine FW-Markierung für ausgehenden Datenverkehr festlegen können, der zu einer bestimmten Wireguard-Schnittstelle gehört, indem Sie das FwMarkFeld unter festlegen [Interface]. Zum Zeitpunkt des Schreibens dieses Artikels (2021-09) unterstützt Wireguard das Festlegen dieser Markierung für einzelne Peers nicht.

*Ich lasse diese Frage offen, falls jemand eine passende Lösung findet.

verwandte Informationen