現在、次の設定(すべてのアドレスはで始まる192.168.
)を使用してハードウェアデバイス(DUT - Device Under Test)のルーティングパフォーマンスをテストしています。
eth0 (29.2) <---> eth1 (29.1) eth2 (30.1) <---> eth0 (30.2)
HOST1 |~~~~~~~~~DUT~~~~~~~~~~| HOST2
Iperf
この設定ではうまく機能します。
しかし、HOST1に利用可能な他のイーサネットカードがあるので、HOST2を削除したいと思います。これが私が達成したいものです:
eth0 (29.2) <---> eth1 (29.1) eth2 (30.1) <---> eth1 (30.2)
HOST1 |~~~~~~~~~DUT~~~~~~~~~~| HOST1
eth0からeth1までのパケットが内部的にカーネルを通過するのではなく、DUTを通過するようにHOST1でLinuxルーティングを設定するにはどうすればよいですか?
私は3.0カーネルでDebianを実行しています。 iproute2バージョンはss110629
。
答え1
snat/dnatと組み合わせたルーティングが有効です。ここでの基本的な考え方は、HOST1の各デバイスに2番目のサブネットの2番目の「仮想」IPアドレスを割り当てることです。仮想アドレスは、ホスト1を離れるか入る前または後に物理アドレスに変換されます。次の設定を使用し、iperfトラフィックを192.168.9.2または192.168.10.2に指定します(希望のトラフィックの方向によって異なります)。
IPアドレスの割り当て
ホスト1
eth0 192.168.29.2/24 (このデバイスの「仮想」アドレスは192.168.9.2です)
eth1 192.168.30.2/24 (このデバイスの「仮想」アドレスは192.168.10.2です)
テスト中のデバイス
- イーサネット1 192.168.29.2/24
- Ethereum 2 192.168.30.2/24
静的ルーティング
ホスト1
- 192.168.10.2/24経由 192.168.29.1
- 192.168.30.1による192.168.9.2/24
テスト中のデバイス
- 192.168.9.2/24(192.168.29.2経由)
- 192.168.10.3/24経由 192.168.30.2
HOST1のiptablesルール
背面配線
- 192.168.9.2から192.168.10.2に送信されたSNATパケット
- 192.168.10.2から192.168.9.2に送信されたSNATパケット
事前ルーティング
- 192.168.9.2から192.168.29.2に送信されたDNATパケット
- 192.168.10.2から192.168.30.2に送信されたDNATパケット