Linux でクロスオーバー ケーブルで接続された 2 つのイーサネット インターフェイス間でデータを送信したいと考えています。2 つのイーサネット インターフェイスは同じボックスにあります。私は異なる静的 IP アドレス (1.2.3.4 と 5.6.7.8) を持つようにイーサネット インターフェイスを定義し、ソケットを使用してある IP アドレスから別の IP アドレスにバイトを送信しています。データがボックスの 1 つのインターフェイスを離れ、同じボックスの他のインターフェイスで受信されることを強調したいと思います。この結果の 1 つは、ケーブルのプラグを抜くと、同じボックス上のクライアントとサーバー間の通信が妨げられることです。
カーネルは私が推測するよりも賢く、ネットワーク上で情報を送信する必要はないと判断し、データを内部のソケット間で直接ルーティングして、テストを無効にします。SO_BINDTODEVICE を使用してクライアントに特定のインターフェイスからデータを送信させようとしましたが、サーバーはそれを認識しません。私は本当に立ち往生しており、これはそれほど難しいことではないようです。
route -n テーブルには 2 つのエントリがあります
Dest Gateway Genmask flags metric use interface
1.2.3.0 0.0.0.0 255.255.255.0 U 0 0 eth0
5.6.7.0 0.0.0.0 255.255.255.0 U 0 0 eth1