Linuxで次のコードを使用して、「ループバック」モードの新しいデュアルポート10Gbpsカード、つまり1つのポートをもう1つのポートに直接接続してスループットをテストしました。これは、パケットを強制的に送信するためだけのブードゥー教です。しかし、そうしないと、Linuxはカーネルを介してトラフィックを短絡させるだけです(OPの質問です)。上記のケーシーの答えでは、外部ルーターが本当に必要かどうかはわかりませんが、以下は完全に自己完結型です。2つのインターフェイスはeth2とeth3です。
インターフェイスにIPを付与し、それらを別のネットワークに配置します。
ifconfig eth2 10.50.0.1/24
ifconfig eth3 10.50.1.1/24
次に、二重NATシナリオを設定します。2つの新しい偽のネットワークが他方に到達するために使用されます。途中で、NATを偽のネットワークに送信します。途中で、宛先を修正します。また、他のネットワークの場合も同様です。
# nat source IP 10.50.0.1 -> 10.60.0.1 when going to 10.60.1.1
iptables -t nat -A POSTROUTING -s 10.50.0.1 -d 10.60.1.1 -j SNAT --to-source 10.60.0.1
# nat inbound 10.60.0.1 -> 10.50.0.1
iptables -t nat -A PREROUTING -d 10.60.0.1 -j DNAT --to-destination 10.50.0.1
# nat source IP 10.50.1.1 -> 10.60.1.1 when going to 10.60.0.1
iptables -t nat -A POSTROUTING -s 10.50.1.1 -d 10.60.0.1 -j SNAT --to-source 10.60.1.1
# nat inbound 10.60.1.1 -> 10.50.1.1
iptables -t nat -A PREROUTING -d 10.60.1.1 -j DNAT --to-destination 10.50.1.1
次に、各偽のネットワークに到達する方法をシステムに伝え、arpエントリを事前入力します(必ずMACアドレスを置き換えてください。私のものは使用しないでください)。
ip route add 10.60.1.1 dev eth2
arp -i eth2 -s 10.60.1.1 00:1B:21:C1:F6:0F # eth3's mac address
ip route add 10.60.0.1 dev eth3
arp -i eth3 -s 10.60.0.1 00:1B:21:C1:F6:0E # eth2's mac address
これは、実際にパケットをネットワークに送信するのに十分なほどLinuxをだます。例えば:
ping 10.60.1.1
eth2から出て、ソースIP 10.50.0.1は10.60.0.1にNATされ、eth3に入ると、宛先10.60.1.1は10.50.1.1にNATされます。そして、返信も同様の旅をします。
iperfを使用してスループットをテストします。正しいIPにバインドし、連絡しているIP(相手の偽のアドレス)を確認してください:
# server
./iperf -B 10.50.1.1 -s
# client: your destination is the other end's fake address
./iperf -B 10.50.0.1 -c 10.60.1.1 -t 60 -i 10
トラフィックが実際にワイヤに向かっていることを確認します。
tcpdump -nn -i eth2 -c 500
/ proc / interruptsを監視して、カードが使用されていることを完全に確認することもできます。
while true ; do egrep 'eth2|eth3' /proc/interrupts ; sleep 1 ; done
とにかく、私はこれを行う方法を探しているこの投稿を見つけました、Q&Aの人に感謝し、これが将来この投稿を見つける他の誰かに役立つことを願っています。