ネットワーク インターフェイスはどの IP アドレスを使用しますか?

ネットワーク インターフェイスはどの IP アドレスを使用しますか?

ホストがクライアントとして機能する場合、インターフェースはどの IP を使用しますか?

eth0に2つのIPアドレス192.168.1.7と192.168.1.8を設定したとします。

route コマンドは次のように表示します。

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.240.0   0.0.0.0         255.255.240.0   U     256    0        0 eth0
...

これは基本的に、ネットワークから任意のホストに接続しようとすると、192.168.240.0eth0 インターフェイスが使用されることを意味します。わかりましたが...そのインターフェイスのどの IP アドレスですか?

ホストがサーバーとして機能し、クライアントが IP アドレスを使用してコンピューターに接続する場合、192.168.1.7eth0 はクライアントとの通信に使用すると理解しています192.168.1.7が、私がクライアントの場合はどうでしょうか?


編集

IP アドレスは作成されており、次のエラーが発生するため、Ubuntu WSL のインターフェイスに別の IP アドレスを追加できません。

$ ip address add 192.168.1.7/24 dev eth0
RTNETLINK answers: Permission denied

の出力はip r s次のようになります。

$ ip r s
none 224.0.0.0/4 dev eth0 proto unspec metric 256
none 255.255.255.255 dev eth0 proto unspec metric 256
none 224.0.0.0/4 dev eth1 proto unspec metric 256
none 255.255.255.255 dev eth1 proto unspec metric 256
...

編集2

WSL2 にアップグレードしたら、IP アドレスを追加するコマンドが機能するようになりました (sudo を使用)。

$ ip -4 a s dev eth0
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.249.181/20 brd 192.168.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.7/24 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.1.8/24 scope global secondary eth0
       valid_lft forever preferred_lft forever

答え1

Linuxの場合、あなたの質問に対する答えはここで与えられた:

送信パケットの最初の送信元アドレスは、次の一連のルールに従って選択されます。

アプリケーションは特定の IP を要求でき、カーネルは選択されたルート パスからの src ヒントを使用します。または、このヒントがない場合、カーネルは宛先アドレスまたはネクスト ホップ ルーターと同じネットワークにあるインターフェイスに構成された最初のアドレスを選択します。

答え2

クライアントは、接続しようとしているアドレスに一致するルートを検索します。例のように、一致するルートが複数ある場合は、最も高いメトリックを持つルート エントリを選択し、そのインターフェイスの IP アドレスを使用して、ルート テーブルで見つかったインターフェイスからパケットを送信します。

ルートの出力が切り捨てられており、何に接続しているかが示されていないため、どのインターフェースになるかはわかりません。

サーバーでは....まあ、状況はもう少し複雑になります。同じサブネット上に複数のインターフェイスを持つ Centos と Redhat ホストがあります。これらは、パケットが送信されたのと同じアドレス/インターフェイスで応答します。しかし、最近の Ubuntu と Debian システムも使用しており、これらは、クライアントのパケットのアドレス指定を無視して、使用するインターフェイスとアドレスを見つけるためにルーティング テーブルを再確認します。クライアントは、通信していない IP アドレスから返されるパケットを無視します。

関連情報