デフォルトゲートウェイ/ルーターと同じネットワークに2つのネットワークインターフェイスがある場合はどうなりますか?
例えば
パケットを8.8.8.8
、どのネットワークインターフェイスを使用しますか? Solaris 10ボックスを使用しています。しかし、この質問がすべてのunix/linuxの一般的な実装に関するものであると仮定します
私のルーティングテーブルでは、e1000g1
がUGとして選択されていますが、なぜ/どのように選択されますか?
LinuxおよびUnixでは、ルーティングテーブルごとに1つのゲートウェイしか存在できません。 Linuxでは、複数のルーティングテーブルを持つことができますが、それぞれに単一のゲートウェイがあります。
Linuxでは、次のように識別されます。
_ > ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 proto kernel scope link src 192.168.73.75 metric 1
_
重要な行はdefault
で始まる行で、(my)ゲートウェイは_192.168.73.1
_であると述べています。次のように変更します。
_ > ip route del default
> ip route add default via 192.168.73.1 dev eth0
_
複数のインターフェースを接続している場合、ルーティングテーブルは次のようになります。
_ > ip route show
default via 192.168.73.1 dev eth0 proto static
192.168.73.0/24 dev eth0 proto kernel scope link src 192.168.73.75 metric 1
192.168.73.0/24 dev wlan0 proto kernel scope link src 192.168.73.66 metric 9
_
ご覧のとおり、ローカルトラフィックは_eth0
_または_wlan0
_のいずれかを通過できますが、metric
の値が小さいため(1と9)、_eth0
_経由でルーティングされます。
デフォルトゲートウェイが_eth0
_にあるため、WANトラフィックは確かに _dev eth0
_を通過します。
これらの値は、_network manager
_によって自動的に維持されます。これにより、デフォルトでは、WiFi接続経由のケーブルが優先されます。ただし、前のコマンドと同様のコマンドを使用して、選択を上書きできます。
_ > ip route delete default
> ip route add default via 192.168.73.1 dev wlan0
_
同じタイプの複数のインターフェースがある場合(例:複数のイーサネット接続)、優先順位は最初に接続されたインターフェースになります。
デフォルトゲートウェイは、ネットワーク自体によって識別されます。これは、DHCP遷移がネゴシエートされるときにマシンに渡されるパラメーターの1つです(他はネットマスク、ネットワーク、ブロードキャストアドレスです)。 DHCPのプロセスは_network-manager
_によって処理されるため、これに気付きません。 not DHCPを使用する静的IPアドレスを設定したい場合があります。この場合、上記の4つのパラメーターを自分で指定する必要があります。まったく新しいネットワークでもこれらのパラメータを学習するためのテクニックはありますが、通常は、既知のLANでのみ静的アドレスを設定します。
LANとデフォルトゲートウェイのルートとは別に、いずれかのインターフェイスを介して特定のルートを設定できます。その場合、ルートの優先順位は、原則の最も具体的なルートを最初に基づいて決定されます。 _1.1.1.0/24
_から_wlan0
_までのルートがあるとします。次に、たとえば_1.1.1.1
_のパケットをルーティングする必要がある場合、このルール(wlan0経由)とデフォルトのルール(eth0経由)の両方が適用されますが、最初のルールはより具体的であるため、これらのパケットは_wlan0
_。この場合、他のすべての経路が失敗したとき、、つまり他の経路が適用されないとき、はdafultゲートウェイが経路になります.
Linuxでは、複数のルーティングテーブルを持つことができます。これは_policy or source routing
_と呼ばれます。この場合、カーネルが複数のルーティングテーブルをいつ適用するかを区別するためのルールも必要です。ポリシールーティングの簡単な紹介 here があります。この場合、上記のコマンドは同じですが、以下のように、操作するルーティングテーブルの名前が後に続きます。
_ > ip route show table main
> ip route show table MyOtherRoutingTable
_
Netstat、route、ifconfigなどのコマンドへの参照がよくあります。 Linux(ただし、Unixではない、以下のトップコメントをお読みください)は廃止です。 iproute2スイートの現在のコマンドipは、これらすべてのコマンドといくつかのコマンドの代わりになります。 _linux ip cheat sheet
_をグーグルすることで、ip
と以前のユーティリティの機能を比較するサイトを見つけることができます。
編集
Unixでは、上記のコマンドは次のようになります。
_ > netstat -rn -f inet
Routing tables
Internet:
Destination Gateway Flags Refs Use Netif Expire
default 192.168.11.1 UGSc 10 0 en0
127 127.0.0.1 UCS 0 0 lo0
127.0.0.1 127.0.0.1 UH 2 161444 lo0
169.254 link#4 UCS 1 0 en0
169.254.10.9 10:c3:7b:9d:c8:78 UHLSW 0 0 en0
192.168.11 link#4 UCS 4 0 en0
192.168.11.1 10:6f:3f:25:c6:33 UHLWIir 11 4589 en0 1162
192.168.11.56 88:53:2e:10:77:5f UHLWI 0 0 en0 1187
192.168.11.65 2:f:b5:70:5b:22 UHLWI 0 0 en0 1081
192.168.11.67 127.0.0.1 UHS 0 0 lo0
192.168.11.113 6:20:3e:52:16:4d UHLWIi 2 278 en0 1188
_
ここで、ゲートウェイはdefault
キーワードとG
フラグによって識別されます。
デフォルトゲートウェイを次のように変更します。
_ > route delete default
> route add default 192.168.0.1
> route change default -interface enp0s3
_
Unixカーネルではサポートされていない_policy routing
_に関するコメントを除き、すべてのコメントは同じです。
問題のe1000g0とe1000g1のような同じサブネットに接続された同じOSインスタンス上の2つのアクティブな異なる物理インターフェースを持つことは信頼できず、少なくともSolarisでは明示的にサポートされていません。
複数のインタフェースが同じサブネットに接続するシステムでは、最初にインタフェースをIPMPグループに構成する必要があります。それ以外の場合、システムをマルチホームホストにすることはできません。
前述のように、これを確実に機能させる1つの方法は、ipmp(IPマルチパス)を有効にすることです。また、パケット転送を無効にして、ドキュメントに記載されているように静的ルートを構成することもできます here Solaris 10の場合。
または、低レベルのリンク集約、別名Linux用語のインターフェースボンディングを使用することもできます。