これは私のローカルネットワークのアーチです。
機械アーキテクチャ:
<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
(intwg1
)と(int)wg_term_1
の間にトンネルがありますwg1
。トンネルが稼働しています。wg_term_1
pingできますが10.242.0.2
、まだwg_client_1
pingできます10.242.0.1
。wg_term_1
との間にトンネルを作りましたwg_term_2
。トンネルも運営中です。wg_term_1
pingできますが10.241.0.2
、まだwg_term_2
pingできます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/24
2番目のトンネル(wg_term_1
. wg_term_2
)wg_client_1
()が(または)10.242.0.1
pingすることができるようになります。wg_term_2
10.241.0.2
10.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
何も表示されません。したがって、トラフィックはルーティングされませんtcpdump
。wg_term_2
wg_term_1
IPv4転送は以下で有効になりますwg_term_2
。
net.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 の暗号化されたルーティングは重複を許可しません。