
Angenommen, ich habe zwei Server, gateway
die im Internet öffentlich sichtbar sind und appserver
hinter 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 appserver
Verbindungsversuchen gateway
wird 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 ens1
oder ens2
unabhä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, ens2
indem 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_GW
ist die Adresse des appserver
Gateway-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 FwMark
Feld 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.