ホストがクライアントとして機能する場合、インターフェースはどの 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.0
eth0 インターフェイスが使用されることを意味します。わかりましたが...そのインターフェイスのどの IP アドレスですか?
ホストがサーバーとして機能し、クライアントが IP アドレスを使用してコンピューターに接続する場合、192.168.1.7
eth0 はクライアントとの通信に使用すると理解しています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 アドレスから返されるパケットを無視します。