ホストがクライアントとして機能する場合、インターフェイスはどの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アドレスから返されたパケットを無視します。