パブリックネットワークとローカルネットワーク間の Wireguard メッシュ

パブリックネットワークとローカルネットワーク間の Wireguard メッシュ

現在、メッシュの設定は次のようになっています。 ここに画像の説明を入力してください

すべてのノードで次のような Wireguard 構成を使用します。

[Interface]
Address = 10.1.0.1/32
PrivateKey =
ListenPort = 5888

[Peer] # example public node [1-3]
PublicKey =
AllowedIPs = 10.1.0.2/32
Endpoint = X.X.X.X:5888
PersistentKeepalive = 25

[Peer] # example node behind cgnat [4-6]
PublicKey = 
AllowedIPs = 10.1.0.51/32
PersistentKeepalive = 25

これにより、上のグラフのすべての緑の線を ping できます。しかし、CGNAT のノード間の赤の線を ping できません。どうすればいいでしょうか?


試行 1 (なしNode3)

例 CGNAT ( Node4)

[Interface] # NODE 4
Address = 10.3.0.3/32
PrivateKey = 

[Peer] # NODE 1, 5 & 6
PublicKey = 
AllowedIPs = 10.3.0.1/32,10.3.0.51/32,10.3.0.52/32
Endpoint = X.X.X.X:5888
PersistentKeepalive = 25

[Peer] # NODE 2
PublicKey = 
AllowedIPs = 10.3.0.2/32
Endpoint = X.X.X.Y:5888
PersistentKeepalive = 25

パブリックエンドポイントの例 ( Node1)

[Interface] # NODE 1
Address = 10.3.0.1/32
PrivateKey = 
ListenPort = 5888

[Peer] # NODE 5
PublicKey = 
AllowedIPs = 10.3.0.51/32
PersistentKeepalive = 25

[Peer] # NODE 6
PublicKey = 
AllowedIPs = 10.3.0.52/32
PersistentKeepalive = 25

[Peer] # NODE 2
PublicKey = 
AllowedIPs = 10.3.0.2/32
Endpoint = X.X.X.Y:5888
PersistentKeepalive = 25

[Peer] # NODE 4
PublicKey = 
AllowedIPs = 10.3.0.3/32
PersistentKeepalive = 25

私はまた、以下を実行しましたNode1:

$ sysctl -w net.ipv4.ip_forward=1
$ sysctl -w net.ipv4.conf.maxnet.forwarding=1

私のWG名はどこmaxnetですか。

答え1

ノード4、5、6がそれぞれ自身の背後にある場合CGNATすると、通常通り、それらの間で適切な通信を行うことができません。トラフィックを中継するためにノード1、2、3に頼らなければなりません。そのため、これらのCGNATノードには追加の許可されたIP一部のパブリック ピアでは、他の CGNAT ノードがパブリック ノードを通過できるように設定されており、パブリック ノードはルーターとして設定する必要があります。

ノード 4 の IP アドレスが 10.1.0.51/32 で、ノード 2 をルーティング ノードとして使用する場合の例:

[Interface]
Address = 10.1.0.51/32
PrivateKey =

[Peer] # example public node 1
PublicKey =
AllowedIPs = 10.1.0.1/32
Endpoint = X.X.X.X:5888
PersistentKeepalive = 25

[Peer] # example public node 2
PublicKey =
AllowedIPs = 10.1.0.2/32,10.1.0.52/32,10.1.0.53/32
Endpoint = Y.Y.Y.Y:5888
PersistentKeepalive = 25

[Peer] # example public node 3
PublicKey =
AllowedIPs = 10.1.0.3/32
Endpoint = Z.Z.Z.Z:5888
PersistentKeepalive = 25

他のCGNATノードのIPアドレスはノード2を経由してルーティングされることが予想され、そのピアの許可されたIPこれにより、ルーティング テーブルにも自動的に追加されます。

ノード2も、少なくともWireGuardインターフェース上ではルーターでなければなりません。これは入力と出力の両方になります。Linuxでは、例えば次のようにします(インターフェースが0 ...):

sysctl -w net.ipv4.conf.wg0.forwarding=1

ファイアウォールルールでは、転送されたトラフィックも許可する必要があります。0 ...

CGNATノード上の他のCGNATピアを定義する必要はありません。定義されている場合は、してはならない他のCGNATノードのIPアドレスを許可されたIP:

  • 直接アクセスすることはできず、
  • 同じアドレスが後続の許可されたIP以前の定義から削除され、最後に定義されたピアのみがそれを持つことになります。暗号鍵ルーティングIP アドレス <=> ピア。

ノード 5 と 6 は互換性のある構成にする必要があります (ノード 2 もルーターとして使用します)。代わりに次の構成も考えられます。

  • 4 と 5 はノード 2 によってルーティングされ、4 と 6 はノード 3 によってルーティングされ、5 と 6 はノード 1 によってルーティングされるように役割を分割します。
  • または、異なるIPブロック内に複数のIPアドレスを持ち、各ブロックが異なるルーティングノードを経由してルーティングされるようにする。
  • または、WireGuardトラフィック内でWireGuardトラフィックを使用したオニオンルーティングを使用して、ルーティングノードが自分宛てではないトラフィックをデコードできないようにする。
  • または、複数の独立したWireGuardインターフェース(相互間の暗号鍵のやり取りは行われず、ルーティングテーブルのみに関係する)を使用する。
  • または、これまでのオプションの組み合わせ、

[...]

いずれの場合も、意図した変更ではなく障害によるものであっても、トポロジの変更には、影響を受けるすべてのピアで構成の変更を同期する方法が必要ですが、現在、これを行うための専用ツールはありません。


結論として、ここにブログがありますGP-BGP とは(これは欠けているツールです) は、複数のアドレスと、暗号キー ルーティングを回避するためにそのピアのみが定義されたピア ノードごとに 1 つのインターフェイスを持つ WireGuard とともに使用されます。おそらく、このトピックは私にとっては高度すぎます。

WireGuard を使用した Linux 上のルートベース VPN

関連情報