0.0.0.0 アドレス以外の IPv4 ルートにトラフィックをルーティングしますか?

0.0.0.0 アドレス以外の IPv4 ルートにトラフィックをルーティングしますか?


0.0.0.0 アドレスをデフォルト インターフェイスにしたくないので、 0.0.0.0 アドレス以外の IPv4 ルートにトラフィックをルーティングする方法

デフォルト 192.168.5.1 dev enp7s0 proto dhcp メトリック 100
169.254.0.0/16 dev enp7s0 スコープリンクメトリック1000
192.168.5.0/24 dev enp7s0 proto カーネル スコープ リンク src 192.168.5.84 メトリック 100
192.168.60.0/24 dev vpn_softether proto カーネルスコープリンク src 192.168.60.50
209.80.36.170 経由 192.168.60.1 dev vpn_softether
216.117.82.227 経由 192.168.60.1 dev vpn_softether

vpn_softether をデフォルトのインターフェースにしたいのですが、
すでに試したことは……

ip r 0.0.0.0/1 を 0.0.0.0 dev vpn_softether 経由で追加します
ip r 0.0.0.0 dev vpn_softether経由で128.0.0.0/1を追加します

ip r 192.168.5.1経由で0.0.0.0/1を追加
ip r 192.168.5.1経由で128.0.0.0/1を追加します

ip r 192.168.60.1経由でデフォルトを追加

ip r del 0.0.0.0/1 経由 192.168.60.1 dev vpn_softether
ip r del 128.0.0.0/1 経由 192.168.60.1 dev vpn_softether

ip r del 0.0.0.0/1 192.168.5.1経由
ip r del 128.0.0.0/1 経由 192.168.5.1

ip r 192.168.5.1 dev enp7s0 proto dhcp メトリック 100 経由で 0.0.0.0/1 を追加
ip r add 128.0.0.1/1 via 192.168.5.1 dev enp7s0 proto dhcp metric 100


ip r del 0.0.0.0/1 経由 192.168.5.1 dev enp7s0 proto dhcp メトリック 100
ip r del default 192.168.60.1 dev vpn_softether経由
ip r del 128.0.0.0/1 経由 192.168.5.1 dev enp7s0 proto dhcp メトリック 100

ip r del 0.0.0.0/1 経由 192.168.60.1 dev vpn_softether proto dhcp メトリック 100
ip r del default 192.168.5.1 dev enp7s0経由
ip r del 128.0.0.0/1 経由 192.168.60.1 dev vpn_softether プロトコル dhcp メトリック 100

ip r 192.168.60.1 dev vpn_softether経由で0.0.0.0/1を追加します
ip r 192.168.5.1 dev enp7s0 proto dhcp metric 100 経由でデフォルトを追加
ip r add 128.0.0.0/1 via 192.168.60.1 dev vpn_softether

しかし、うまくいきませんでした... 他に方法はありますか?
ありがとうございます。

答え1

「すべてのトラフィック」をルーティングできるのは1つインターフェースは、すべてではありません。

デフォルト ルートを (何らかの理由で) 維持したい場合は、デフォルト ルートをそのままにして、追加または削除しないでください。追加または削除できる場合は、デフォルト ルートを維持する必要はありません...

それで、

ip route add 0.0.0.0/1 via 192.168.60.1 dev vpn_softether 
ip route add 128.0.0.0/1 via 192.168.60.1 dev vpn_softether 

のゲートウェイがvpn_softether実際に であると仮定すると、 で十分です192.168.60.1。VPN が接続されている場所に から送信するルールも必要であることに注意してください。そうしないと、enp7s0VPN は他のエンドポイントと通信できず、結果として接続がまったくできなくなります。つまり、次のようなものになります。

ip route add 1.2.3.4/32 via 192.168.5.1 dev enp7s0

は、1.2.3.4他のエンドポイントのIPアドレスです。defaultこのルールを維持すると(これがその条件の動機である場合)、ない仕事。

答え2

前回の回答に付け加えたいことがあります:

ip route add 1.2.3.4/32 via 192.168.5.1 dev enp7s0

これは間違ったアプローチです。enp7s0がオフになると、このルートは消えます。 がenp7s0オンラインになると、このルートは表示されません。 一方、VPN インターフェイスはオンラインになりますが、 に到達できないため機能しません1.2.3.4

一度起動すると、netplanを使用してこのルートを動的に作成できますenp7s0。ただし、このルートはIPアドレス、ネットワークインターフェース名、ゲートウェイIPで構成されます。つまり、異なるネットワーク間では移植できない実際に、このソリューションは面倒すぎるため、お勧めできません。短期的には、重要なルートをネットプランに追加したという事実を忘れてしまいます。後になって、このルートが問題になります。大規模なネットワークでこのソリューションを使用することはまったく不可能です。

正しい解決策は、1.2.3.4VPNトラフィックリダイレクト用に作成しているデフォルトルートから除外することです。Wireguard のサンプルソリューション1.2.3.4/32.を除外して0.0.0.0/0結果をAllowedIPs. オンラインに入れる必要があります計算機はこちらそこには「より良い代替案」という段落がありますが、著者は間違っており、代替案はありません。

たとえば、0.0.0.0/0マイナスは1.2.3.4/32次のようになります。

AllowedIPs = 0.0.0.0/8, 1.0.0.0/15, 1.2.0.0/23, 1.2.2.0/24, 1.2.3.0/30, 1.2.3.5/32, 1.2.3.6/31, 1.2.3.8/29, 1.2.3.16/28, 1.2.3.32/27, 1.2.3.64/26, 1.2.3.128/25, 1.2.4.0/22, 1.2.8.0/21, 1.2.16.0/20, 1.2.32.0/19, 1.2.64.0/18, 1.2.128.0/17, 1.3.0.0/16, 1.4.0.0/14, 1.8.0.0/13, 1.16.0.0/12, 1.32.0.0/11, 1.64.0.0/10, 1.128.0.0/9, 2.0.0.0/7, 4.0.0.0/6, 8.0.0.0/5, 16.0.0.0/4, 32.0.0.0/3, 64.0.0.0/2, 128.0.0.0/1

残念ながら、このソリューションは理想的ではありません。複数の VPN が存在する可能性があるため、すべてのエンドポイント IP をすべての VPN デフォルト ルートから除外する必要があります。

たとえば、VPN が 2 つあり、さらに 1 つ追加したい場合は、既存の 2 つの VPN 構成の許可された IP から 3 番目のエンドポイント IP を除外する必要があります。Wireguard に内部計算機またはDisallowedIPs機能があればさらに便利です。

そこで私の解決策は、AllowedIPs設定を省略して自分でデフォルトルートを作成することです。私は以下を使用しています計算機除外Python で書かれています。次の操作を行う必要があります。

  1. すべての Wireguard クライアント構成からすべてのエンドポイントを収集します。
  2. すべてのエンドポイントを解決します。
  3. ターゲット エンドポイントを0.0.0.0/0(および::/0)から除外します。
  4. 計算機から受け取った各 IP ブロックにデフォルト ルートを追加します。

PS これらのルートを各 VPN インターフェイスごとに別々のテーブルに追加することをお勧めします。ルートが大量になるためです。

PS 私は私のroute-up.client.shroute-down.client.shを作りました公開概要はこちら

Table = off
PostUp = /etc/wireguard/route-up.client.sh 51820 wg0 10.20.3.0/24 fd10:20:3::/64 10
PreDown = /etc/wireguard/route-down.client.sh 51820

関連情報