2つのWireguardトンネル間のトラフィックルーティング

2つのWireguardトンネル間のトラフィックルーティング

これは私のローカルネットワークのアーチです。

機械アーキテクチャ:

<wg_client_1 (intワーキンググループ1)> ----- <(intワーキンググループ1) wg_term_1 (intワーキンググループ0 ワーキング)> ----- <(intグループ0) wg_term_2 (int eth2)>

ネットワークアーキテクチャ:

<||wg_client_1|| (int wg1 : 10.242.0.2)(10.242.0.0/24 network)> ----- <(int wg1 : 10.242.0.1)(10.242.0.0/24 network)||wg_term_1||(int wg0 : 10.241.0.1)(10.241.0.0/24 network)> ----- <(int wg0 : 10.241.0.2)(10.241.0.0/24 network) ||wg_term_2|| (int eth2 :10.243.0.1) (10.243.0.0/24 network)>

  • すべてのマシンは私のローカルネットワークの仮想マシンです。
  • すべてのコンピュータには「実際の」アドレス(192.168.123.0/24)がありますが、トンネルを介して通信したいです。ネットワークアドレスを使用してSSH経由でコンピュータに接続します192.168.123.0/24
  • wg_client_1(int wg1)と(int)wg_term_1の間にトンネルがありますwg1。トンネルが稼働しています。wg_term_1pingできますが10.242.0.2、まだwg_client_1pingできます10.242.0.1
  • wg_term_1との間にトンネルを作りましたwg_term_2。トンネルも運営中です。wg_term_1pingできますが10.241.0.2、まだwg_term_2pingできます10.241.0.1

wgこれはコマンドの結果ですwg_client_1

# wg
interface: wg1
  public key: yQO6xpv+3HC+xTyfxzC503vr+E84VBnphntfwFJXREA=
  private key: (hidden)
  listening port: 49149

peer: CywdYs8L0TD7zLvMqHnqL/N2WoqRmDuDvn6skg+8wUc=
  endpoint: 192.168.123.21:51821
  allowed ips: 10.0.0.0/8
  latest handshake: 8 seconds ago
  transfer: 11.39 KiB received, 236.84 KiB sent

wgこれはコマンドの結果ですwg_term_1

# wg
interface: wg1
  public key: CywdYs8L0TD7zLvMqHnqL/N2WoqRmDuDvn6skg+8wUc=
  private key: (hidden)
  listening port: 51821

peer: yQO6xpv+3HC+xTyfxzC503vr+E84VBnphntfwFJXREA=
  endpoint: 192.168.123.23:49149
  allowed ips: 10.0.0.0/8
  latest handshake: 58 seconds ago
  transfer: 236.84 KiB received, 11.43 KiB sent

interface: wg0
  public key: HGF89Hcphaf+Uua214hSc/mZa/p2vmIUeT6IwrN7I3Y=
  private key: (hidden)
  listening port: 51820

peer: +xTyPmYo9+IPBC72MFzIWFHrQyz5N6v67rjZz3q5CR4=
  endpoint: 192.168.123.22:51820
  allowed ips: 10.241.0.2/32
  latest handshake: 17 seconds ago
  transfer: 10.03 KiB received, 233.33 KiB sent
  persistent keepalive: every 25 seconds

wgこれはコマンドの結果ですwg_term_2

# wg
interface: wg0
  public key: +xTyPmYo9+IPBC72MFzIWFHrQyz5N6v67rjZz3q5CR4=
  private key: (hidden)
  listening port: 51820

peer: HGF89Hcphaf+Uua214hSc/mZa/p2vmIUeT6IwrN7I3Y=
  endpoint: 192.168.123.21:51820
  allowed ips: 10.241.0.1/32
  latest handshake: 1 minute, 3 seconds ago
  transfer: 1.23 KiB received, 6.79 KiB sent
  persistent keepalive: every 25 seconds

これで、クライアントネットワークトラフィックを10.242.0.0/242番目のトンネル(wg_term_1. wg_term_2wg_client_1()が(または)10.242.0.1pingすることができるようになります。wg_term_210.241.0.210.243.0.1

そのため、wg_client_1に次のパスを追加しました。

ip route add 10.241.0.0/24 via 10.242.0.1
ip route add 10.243.0.0/24 via 10.242.0.1

wg_term_1へのパスは次のとおりです。

ip route add 10.242.0.0/24 via 10.242.0.1
ip route add 10.241.0.0/24 via 10.241.0.2
ip route add 10.243.0.0/24 via 10.241.0.2

ping 10.241.0.2しかし、で実行すると動作wg_client_1しません。以下はwg_term_1のtcpdumpです。

# tcpdump -i wg0 -i wg1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wg1, link-type RAW (Raw IP), capture size 262144 bytes
03:58:31.451778 IP 10.242.0.2 > 10.241.0.2: ICMP echo request, id 432, seq 1, length 64
03:58:32.464024 IP 10.242.0.2 > 10.241.0.2: ICMP echo request, id 432, seq 2, length 64
03:58:33.488174 IP 10.242.0.2 > 10.241.0.2: ICMP echo request, id 432, seq 3, length 64

何も表示されません。したがって、トラフィックはルーティングされませんtcpdumpwg_term_2

wg_term_1IPv4転送は以下で有効になりますwg_term_2net.ipv4.ip_forward=1

何が起こっているのか、トラフィックが正しくルーティングされない理由を説明できる人はいますか?ありがとう

答え1

修正する:この回答のほとんどを書き直し、OPの質問が機能している間に私が修正した欠陥のある説明を使用します。もちろん、暗号鍵接続は2つのWireGuardインターフェイス間で独立しており、相互に対話しません。 WireGuardインターフェイスごとに複数のピア間の対話しかできませんが、OPはインターフェイスごとに1つのピアしか使用しないため、これには特定の問題はありません。

ラインディフェンダーキールーティングカーネルの標準ネットワークスタックルーティングを超えたキーベースのルーティングの追加レイヤです。各インターフェイスはallowed-ipsピアに関連付けられます。これは、送信のために正しいピアにルーティングし、受信のためにパケットを指定されたピアに関連付けてから、このパケットを受け入れるために使用されます。したがって、正しいコミュニケーションのためには正しいパスが必要です。そして互換性許可されたIPWireGuard インターフェイスのエントリです。

作成されていませんが、OPも追加されたようです。wg_term_2パスwg_client_1LAN(例:

10.242.0.0/24 via 10.241.0.1 dev wg0 

または単純に(レイヤ3トンネルなのでゲートウェイは不要です):

10.242.0.0/24 dev wg0

いつwg_client_1ping 10.241.0.2 (例:wg_term_2) データパケットは次のとおりです。

  • ルート経由ワーキンググループ1相互作用
  • ピアへの暗号化されたルーティングワーキンググループ1宛先が許可されたIP 10.0.0.0/8と一致する場合
  • 到着wg_term_1渡すUDP 192.168.123.23:49149 -> 192.168.123.21:51821
  • 〜に認められるワーキンググループ1ソースは許可されたIP 10.0.0.0/8と一致するため
  • ルート経由ワークグループ0相互作用
  • ピアへの暗号化されたルーティングワークグループ0宛先は許可されたIP 10.241.0.2/32と一致します。
  • 到着wg_term_2渡すUDP 192.168.123.21:51820 -> 192.168.123.22:51820
  • 落ちるワークグループ0送信元が許可されたIPと一致しないため、ピアに接続できません。

順番に、wg_term_2到着wg_client_1(まだ正しいパスですが、正しいパスではありません。許可されたIP)ここで特定のエラーが発生します。

# ip route get 10.242.0.2
10.242.0.2 via 10.241.0.1 dev wg0 src 10.241.0.2 uid 0 
    cache 
# ping 10.242.0.2
PING 10.242.0.2 (10.242.0.2) 56(84) bytes of data.
From 10.241.0.2 icmp_seq=1 Destination Host Unreachable
ping: sendmsg: Required key not available
^C
--- 10.242.0.2 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

これを行うために必要な唯一の最小設定は、以下を追加することです。wg_client_1IPアドレスwg_term_2~のワークグループ0ピアが許可するIP:

# wg set wg0 peer HGF89Hcphaf+Uua214hSc/mZa/p2vmIUeT6IwrN7I3Y= \
    allowed-ips 10.241.0.1/32,10.242.0.2/32

関連LANを許可することもできます。

# wg set wg0 peer HGF89Hcphaf+Uua214hSc/mZa/p2vmIUeT6IwrN7I3Y= \
     allowed-ips 10.241.0.0/24,10.242.0.0/24

そして、10.243.0.0/24 LANの設定と暗号化されたルーティングを完了したら、次のことができます。wg_term_1(また、以前の/ 32を/ 24に書き換えます):

# wg set wg0 peer +xTyPmYo9+IPBC72MFzIWFHrQyz5N6v67rjZz3q5CR4= \
     allowed-ips 10.241.0.0/24,10.243.0.0/24

この特定の場合には、WireGuardインターフェイスがあるかもしれません。wg_term_12つが一緒に使用されますが、最小のものを書くときは注意が必要です。許可されたIP各ピアのエントリ:片側の10.242.0.0/24(10.0.0.0/8の代わりに)、もう一方の10.241.0.0/24、10.243.0.0/24:広い範囲より狭い範囲に優れた範囲指定ルーティングとは対照的で、WireGuard の暗号化されたルーティングは重複を許可しません。

関連情報