
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 が接続されている場所に から送信するルールも必要であることに注意してください。そうしないと、enp7s0
VPN は他のエンドポイントと通信できず、結果として接続がまったくできなくなります。つまり、次のようなものになります。
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.4
VPNトラフィックリダイレクト用に作成しているデフォルトルートから除外することです。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 で書かれています。次の操作を行う必要があります。
- すべての Wireguard クライアント構成からすべてのエンドポイントを収集します。
- すべてのエンドポイントを解決します。
- ターゲット エンドポイントを
0.0.0.0/0
(および::/0
)から除外します。 - 計算機から受け取った各 IP ブロックにデフォルト ルートを追加します。
PS これらのルートを各 VPN インターフェイスごとに別々のテーブルに追加することをお勧めします。ルートが大量になるためです。
PS 私は私のroute-up.client.sh
とroute-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