Linux ブリッジのホストから Wireguard トンネルへの Linux ポリシーベースのルーティング

Linux ブリッジのホストから Wireguard トンネルへの Linux ポリシーベースのルーティング

172.16.20.4/32vmbr-dmzLinuxルーティングを使用して、Linuxブリッジ(名前)の特定のIP()からWireguardトンネル(名前)にトラフィックをルーティングしようとしていますwg0。しかし、うまくいきません。

2つの質問があります。まずAllowedIPs=0.0.0.0/0、wireguardと連携して機能するように制限するにはどうすればよいですかAllowedIPs=172.16.20.4/32

私がしたこと - 私のホストコンピュータ(デフォルトではdebian 11がインストールされています)でlinux-bridgingを使用しました。

9: vmbr-dmz: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    inet 172.16.20.1/28 brd 172.16.20.15 scope global vmbr-dmz
11: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none
    inet 10.2.0.2/32 scope global wg0
       valid_lft forever preferred_lft forever

/etc/iproute2/rt_tables.d/dmzwg0.conf に新しいポリシールーティングテーブルを作成しました。

100 dmzwg0

dmzwg0テーブルを使用するようにこのIPアドレスのルールを作成します。ルールがリストに表示されます。

ip rule add from 172.16.20.4 lookup dmzwg0

VPNのデフォルト設定から始めて、VPNの使用を開始しました。systemctl start wg-quick@wg0

[Interface]
PrivateKey = k...=
Address = 10.2.0.2/32
DNS = 10.2.0.1

[Peer]
PublicKey = 8...=
AllowedIPs = 0.0.0.0/0
#AllowedIPs = 172.16.20.4/32
Endpoint = NNN.NNN.NNN.NNN:51820

wgの次のhopwアドレスを見つける方法がわかりませんが、10.2.0.1のようです。 Wireguardインターフェイスのネクストホップを決定するには? AllowedIPs=0.0.0.0/0 なので、ping を実行してネクストホップとして追加できます。

ip route add default via 10.2.0.1 dev wg0 table dmzwg0

テーブルを見ると、dmzwg0私が予想したルートが見えました。

ip route show table dmzwg0
default via 10.2.0.1 dev wg0

マスカレーディングのために、次のnfテーブルルールを追加しました。

nft add table nat
nft add chain nat postrouting { type nat hook postrouting priority 100 \; }
nft add rule nat postrouting oifname "wg0" ip saddr 172.16.20.4/32 counter packets 0 bytes 0 masquerade

インターネットに接続しようとしている仮想マシンから始めました。私が実行しているホストからブリッジtcpump -i vmbr-dmzからの着信トラフィックが予想されるIアドレスIPを持っていることがわかります。

tcpdump -i vmbr-dmz
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on vmbr-dmz, link-type EN10MB (Ethernet), snapshot length 262144 bytes
14:40:09.803588 IP 172.16.20.4.56226 > dns.google.domain: 59264+ SRV? _http._tcp.security.debian.org. (48)
14:40:09.803620 IP 172.16.20.4.55497 > dns.google.domain: 60873+ SRV? _http._tcp.deb.debian.org. (43)
14:40:14.808719 IP 172.16.20.4.41741 > 8.8.8.4.domain: 60873+ SRV? _http._tcp.deb.debian.org. (43)
14:40:14.808721 IP 172.16.20.4.54173 > 8.8.8.4.domain: 59264+ SRV? _http._tcp.security.debian.org. (48)

wg0物理ネットワークカードでtcpdumpを試しましたが、eno1トラフィックを表示できませんでした。

私のnft natルールはパケットを計算しませんか?

Q1) - では、私が逃している部分は何ですか?トラフィックがどこに行くのかを確認するにはどうすればよいですか?

また、wireguard設定をallpw希望のIPアドレスに変更するだけです172.16.20.4。ホストがネクストホップに到達/pingできないため、ネクストホップを追加できませんwg0

ip route add default via 10.2.0.1 dev wg0 table dmzwg0
Error: Nexthop has invalid gateway.

dmzwg0Q2) - wg0を介してのみすべてのトラフィックを送信するようにテーブルにデフォルトルートを追加する方法は172.16.20.4/32

ベストアンサー1

WireGuardインターフェイスはピアの設定を効果的に使用して次のルーティングホップを決定するため、WireGuardインターフェイスに明示的な「次ホップ」を指定しようとしないでください。

WireGuardインターフェイスのピア固有の設定を使用して、インターフェイスAllowedIPs自体の内部ルーティングテーブルと同様に、そのピアに送信するパケットをインターフェイスに通知できます。 WireGuardインターフェイスから直接送信されるパケットは、AllowedIPsパケットの宛先アドレスと一致する設定を使用してピアに送信されます(一致する項目が複数ある場合は、最も狭い一致が選択され、WireGuardでは複数のピアが同じ正確な範囲を使用できるようにするしません)。 )。一致するものがない場合、AllowedIPsパケットは破棄されます。

クイックワークグループAllowedIPsパスは、インターフェイス用に設定したすべてのパスと一致するように自動的に設定されます。インターフェイスTable設定を使用して、wg-quickにデフォルトのルーティングテーブル以外のルーティングテーブルにこれらのパスを設定するように指示できます。

[Interface]
PrivateKey = ...
Address = 10.2.0.2/32
Table = dmzwg0

[Peer]
PublicKey = ...
AllowedIPs = 0.0.0.0/0
Endpoint = NNN.NNN.NNN.NNN:51820

dmzwg0上記の構成は、テーブルを次のように設定します。

$ ip route show table dmzwg0
default dev wg0 scope link

このWireGuardインターフェイスを介して転送したいパケットを送信するには、172.16.20.4質問で説明したポリシールーティングルールを追加するだけです。

ip rule add from 172.16.20.4 lookup dmzwg0 priority 123

パケットを転送する場合は注意してください。~から 172.16.20.4WireGuard インターフェイスを介してピアに情報を送信するには欲しくないAllowedIPsこのピアをに設定したいと思います172.16.20.4。常にAllowedIPs設定目的地送りたい到着ピア(またはそれを介して転送されます) - インターネット上のどこにもトラフィックが含まれている場合0.0.0.0/0

おすすめ記事