2つの異なるネットワークインターフェイス(イーサネットとWiFi)を介して接続された2つのインターネット接続があります。設定されたIPアドレスは、それぞれ192.168.1.10と192.168.2.5です。ip route get 8.8.8.8
システムを使用するときは、メトリックが最も低いデフォルトゲートウェイ(イーサネットパス)が使用されます。ただし、これを行うと、ip route get from 192.168.2.5 8.8.8.8
システムはまだWi-Fiゲートウェイの代わりにイーサネットゲートウェイを使用しようとします。
8.8.8.8 from 192.168.2.5 via 192.168.1.1 dev eno1 uid 1000
なぜこれが起こるのですか?
私のルーティングテーブル:
default via 192.168.1.1 dev eno1 proto dhcp src 192.168.1.10 metric 100
default via 192.168.2.1 dev wlan0 proto dhcp src 192.168.2.5 metric 600
<subnet routes>
答え1
私の考えでは、あなたが望むのは、「ソースベースのルーティング」を設定することです。通常、ルーティングは宛先ベースです。
ip
これを行うには、次のものを作成して高度な機能を利用する必要があります。第二ルーティングテーブルを作成し、テーブルを使用するタイミングをシステムに通知します。
/etc/iproute2/rt_tables
したがって、まず次の内容で最後に行を追加します。
100 wifiroute
これで、次のコマンドでこのテーブルを使用できます。
ip rule add from 192.168.2.5 table wifiroute
テーブルに最後に追加されたデフォルトパス
ip route add default via 192.168.2.1 dev wlan0 table wifiroute
もちろん、これら2つのip
コマンドは再起動時に失われるため、このコマンドが起動順序の一部であることを確認する必要があります。
これでこれをテストできます。traceroute
traceroute www.google.com
traceroute www.google.com -s 192.168.2.5
2番目のアドレスはソースアドレスを設定しているので、wlan0を通過する必要があります。
ip route show table wifiroute
; を使用してルーティングテーブルを表示できます。次のコマンドを使用すると、すべてのテーブルのすべてのパスを表示できます。ip route show table all
答え2
定義によると、有効なデフォルトパスは1つしか持てません。これは、ルーティングテーブル(したがって名前)に特定のエントリがないすべてのトラフィックが使用するデフォルトルートです。
ルートは目的地に基づいて定義されます。すべてのホストの IP アドレスをトラフィック ソースとして指定できますが、宛先に到達する方法を決定するために、すべて同じルーティング テーブルを使用します。
実際には異なる名前空間とルーティングテーブルを持つことができるので、これは完全に真ではありませんが、これはこの回答を超えて複雑です。