web-dev-qa-db-ja.com

Unix / Linux OSで同じネットワークに2つのネットワークインターフェイスがある場合はどうなりますか?

デフォルトゲートウェイ/ルーターと同じネットワークに2つのネットワークインターフェイスがある場合はどうなりますか?

例えば

  • ネットワークインターフェースe1000g0-192.168.1.50
  • ネットワークインターフェースe1000g1-192.168.1.51
  • ゲートウェイ-192.168.1.1

パケットを8.8.8.8、どのネットワークインターフェイスを使用しますか? Solaris 10ボックスを使用しています。しかし、この質問がすべてのunix/linuxの一般的な実装に関するものであると仮定します

私のルーティングテーブルでは、e1000g1がUGとして選択されていますが、なぜ/どのように選択されますか?

6
Noob

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_に関するコメントを除き、すべてのコメントは同じです。

7
MariusMatutiae

問題のe1000g0とe1000g1のような同じサブネットに接続された同じOSインスタンス上の2つのアクティブな異なる物理インターフェースを持つことは信頼できず、少なくともSolarisでは明示的にサポートされていません。

複数のインタフェースが同じサブネットに接続するシステムでは、最初にインタフェースをIPMPグループに構成する必要があります。それ以外の場合、システムをマルチホームホストにすることはできません。

前述のように、これを確実に機能させる1つの方法は、ipmp(IPマルチパス)を有効にすることです。また、パケット転送を無効にして、ドキュメントに記載されているように静的ルートを構成することもできます here Solaris 10の場合。

または、低レベルのリンク集約、別名Linux用語のインターフェースボンディングを使用することもできます。

1
jlliagre