Ubuntuの物理ネットワークを介して独自にトラフィックを送信します。

Ubuntuの物理ネットワークを介して独自にトラフィックを送信します。

デュアルポートイーサネットNICがあります。両方のポートをリングに接続し、次のIPを2つのイーサネットインターフェイスに割り当てたとします。

  • eth2 -> 192.168.2.1
  • eth3 -> 192.168.3.1

192.168.3.1たとえば、pingなどの物理ネットワークを介してポートの1つから別のポートにトラフィックを送信したいとします192.168.2.1。ただし、LinuxカーネルのTCP / IPスタックはこれら2つのアドレスをローカルアドレスとして認識し、トラフィックをループバックアダプタに送信するため、トラフィックは物理ネットワークに到達しません。

私が持っていた最も近い解決策はAnastasovのものでした。自分にパッチを送る残念ながら、カーネル3.6から中断され、Ubuntu 13.10(カーネル3.11)では実行されません。 3.11用のパッチを再構築しようとしましたが、Ubuntuディストリビューションには見つかりませんでした。

  • /linux/inetdevice.hを含む
  • net/ipv4/devinet.c
  • net/ipv4/fib_frontend.c
  • ネットワーク/ipv4/route.c
  • ドキュメント/ネットワーク/ip-sysctl.txt

「自分自身に送信」パッチを機能させる方法はありますか、それとも別の解決策がありますか?

答え1

ネットワークネームスペースを作成し、インターフェイスの1つをそのネームスペースに移動します。

ip netns add test
ip link set eth1 netns test

新しい名前空間でシェルを起動します。

ip netns exec test bash

その後、2台のコンピュータがあるかのように進みます。完了したら、シェルを終了して名前空間を削除します。

ip netns del test

答え2

まだ試していませんが、考えられる解決策がいくつかあると思います。

仮想デバイス

ホストのIPスタックから1つ以上のネットワークカードを取り外し、IPスタックの問題を解決します。これを仮想マシンに割り当てます。ただし、パフォーマンステストの場合、これはお勧めできません。ただし、CPUのパフォーマンスが十分であれば、追加のソフトウェア層がボトルネックを引き起こさない可能性があります(しかし、どうすればわかりますか?)。

その他の宛先アドレス

私の考えでは、NICパフォーマンステストのためにレイヤ2でパケットを送信したいと思います。したがって、異なるIPアドレス(非ローカルアドレス、いずれの場合でもパケットが有線で送信される)を持つIPパケットを使用できます。次に、トリックを使用して、ip neighこの偽のIPアドレスを別のNICのMACアドレスにマッピングする永続ARPエントリを作成します。

この方法で IP 接続を確立することもできます。ただし、2つのNICが必要な偽IPの2つのうちの1つと通信していると信じるように、およびを使用する必要がありiptablesます。SNATDNAT

オリジナルアクセス

真剣なプログラミングをしたい場合は、生のソケットを開き、イーサネットフレームを直接作成できます。おそらくこれが最速の解決策でしょう。

関連情報