
2つのサーバーがあり、1つgateway
はインターネットに公開されており、appserver
もう1つはNAT/ファイアウォールの背後に隠されているとします。また、この2つのサーバーにはそれぞれ二完全に独立したインターネット アップリンクに接続されたインターフェイス (下の図を参照)。
どちらかのサーバーに障害が発生した場合でもサーバーの接続を維持することを目的として、2 つのサーバー間に 2 つの独立した Wireguard トンネルを設定したいと考えています。
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <-----> (ens1) < - - - - > (ens1) <----> (wg0)
| |
| |
| |
(wg1) <-----> (ens2) < - - - - > (ens2) <----> (wg1)
| |
| |
デフォルトでは、Wireguard はすべてのトラフィックをシステムのデフォルト ゲートウェイ経由でルーティングするようです。そのため、appserver
に接続しようとするとgateway
、次の 2 つのインターフェイスのうち 1 つだけが使用されます。
| Internet |
[ gateway ] | | [appserver]
| |
(wg0) <--+--> (ens1) < - - - - > (ens1) <--+--> (wg0)
| | | |
| | | |
| | | |
(wg1) <--+ (ens2) X (ens2) +--> (wg1)
| |
| |
一部のネットワーク ツールでは、ネットワーク トラフィックの送信時に使用する特定のネットワーク インターフェイスを設定できますが、Wireguard でも同じことができますか? つまり、デフォルトのルート メトリックのみens1
、またはens2
それに関係なくトラフィックを送信できますか? そうでない場合、代わりに Linux のネットワーク システムを設定してこれを行うにはどうすればよいですか?
答え1
Wireguard 自体を特定のインターフェース経由で接続する方法が見つからなかったため、最終的には、のルーティング テーブルens2
に新しいルートを追加して、宛てのトラフィックを単純にルーティングすることに決めました。appserver
ip route add $GATEWAY_ESN2_ADDR/32 via $APPSERVER_ESN2_ADDR_GW metric 50
APPSERVER_ESN2_ADDR_GW
appserver
はゲートウェイ ルーターのアドレスです。
FwMark
これについて調査しているときに、Wireguard では、の下のフィールドを設定することで、特定の Wireguard インターフェースに属する送信トラフィックに fwmark を設定できることに気付きました[Interface]
。この記事の執筆時点 (2021-09) では、Wireguard はピアごとにこのマークを設定することをサポートしていません。
*誰かが適切な解決策を発見した場合に備えて、この質問は開いたままにしておきます。