複数のWireGuard VPNを持つサーバーがあります。
各VPNは他のVPNから独立しており、VPN間に接続はありません。
一部のVPNは、同じアドレス空間を使用してリモートLANに接続されています。たとえば、私のOFFICE_1とOFFICE_2はどちらも192.168.0.0/24を使用します。
私はLXCを使ってWireGuardをホストする「仮想マシン」を作成します。したがって、各WireGuardが別々の仮想マシンにあるため、同じリモートLANは問題になりません。
このソリューションは簡単ですが、システムのメンテナンスには便利ではありません。
他の方法は慣れていません。ポリシーベースのルーティング、ネットワークネームスペース、cgroup、または他の方が良いオプションですか?
答え1
このためにLXC VM(またはコンテナ)を使用するのは便利で簡単です(もちろん、WireGuardリスンポートをVM /コンテナに転送するためにサーバーのファイアウォールをいくつか変更する必要があるかもしれません)。
ただし、サーバーが各WireGuardネットワークで異なるアドレスを使用している限り(例:192.168.0.1
OFFICE_1、OFFICE_2など)、192.168.0.2
ポリシールーティングを使用できます。使用する場合クイックワークグループサーバーで各 WireGuard インターフェイスを起動するには、PreUp
サーバーの WireGuard 構成ファイルに必要なポリシー規則をコマンドとして追加できます。
# /etc/wireguard/office1.conf
[Interface]
PrivateKey = 123ABC...
Address = 192.168.0.1/32
ListenPort = 51821
Table = 111
PreUp = ip rule add iif office1 table 111 priority 101
PostDown = ip rule del iif office1 table 111 priority 101
[Peer]
PublicKey = 123DEF...
AllowedIPs = 192.168.0.10/32
[Peer]
PublicKey = 123GHI...
AllowedIPs = 192.168.0.11/32
# /etc/wireguard/office2.conf
[Interface]
PrivateKey = 234ABC...
Address = 192.168.0.2/32
ListenPort = 51822
Table = 222
PreUp = ip rule add iif office2 table 222 priority 102
PostDown = ip rule del iif office2 table 222 priority 102
[Peer]
PublicKey = 234DEF...
AllowedIPs = 192.168.0.10/32
[Peer]
PublicKey = 234GHI...
AllowedIPs = 192.168.0.11/32
上記の設定ファイルの設定は、Table
wg-quickに各ピアの設定に対応するパスを追加するときに名前付きパステーブルを使用するように指示しますAllowedIPs
。このPreUp
コマンドは、一致するWireGuardインターフェイスから着信接続をルーティングするときにテーブルを使用するためのポリシールーティングルールを追加します(PostDown
コマンドはルールを削除します)。
サーバーがWireGuardネットワーク上の他のホストへの接続を開始する必要がある場合は、そのWireGuardネットワークのインターフェイスまたはアドレスを明示的に使用して正しいポリシールールをトリガーする必要があります。たとえば、office1
上記のネットワーク上のホストをpingするには、次のものが必要です。このネットワーク上のサーバーのWireGuardアドレスを指定するには(192.168.0.1
):
ping -I 192.168.0.1 192.168.0.10
また、サーバーのファイアウォールが各WireGuardネットワークのホスト間接続転送を許可していることを確認する必要があります(ホスト間の無制限転送をiptables -A FORWARD -i office1 -o office1 -j ACCEPT
許可する場合など)。office1
ただし、サーバーが各 WireGuard ネットワークに同じアドレスを使用する必要がある場合 (例: 192.168.0.1
OFFICE_1 や192.168.0.1
OFFICE_2 など)、どのようなコンテナー化も使用できません。最も軽いバージョンは、単に各WireGuardインターフェイスに対して別々のネットワーク名前空間を作成します。
「共通コンテナ化」セクションWireGuardルーティングとネットワークネームスペースの統合このガイドでは、ルートネームスペースに各WireGuardインターフェイスを作成し、それをカスタムネームスペースに移動してサーバーのポート転送を防止する巧妙なトリックを参照してください。
(フルコンテナの代わりに)ネットワークネームスペースを使用する場合の欠点は、wg-quickを使用して助けを得ることができないことです。 WireGuardインターフェイスを設定するには、wg-quickが通常実行するいくつかのiproute2コマンドを手動で実行する必要があります。