ルータを介したループバックトラフィックのリダイレクト

ルータを介したループバックトラフィックのリダイレクト

いくつかのテストの目的で、単一のコンピュータで複数のソケットベースのアプリケーションを実行し、それらの間の「実際の」ネットワーク条件をシミュレートしようとしています。最も簡単な方法は、コンピュータが接続されているルータを介してアプリケーション間のすべてのトラフィックをリダイレクトすることです。直感的に、これは同じネットワークに接続されている複数のシステムとある程度似ている必要があり、ネットワーク自体はローカルシステム間のソケット接続ではなくルータ(100Mbps)の機能によって制限される必要があります。

マイコンピュータ(192.168.1.101)は、インターフェイスを介してルータ(192.168.1.2)に直接接続されますem1。 IPパスを追加してこれを実行しようとしました。私のip Routeコマンドの結果は次のとおりです。

default via 192.168.1.2 dev em1  proto static  metric 1024 
192.168.1.0/24 dev em1  proto kernel  scope link  src 192.168.1.101 
192.168.1.101 via 192.168.1.2 dev em1 

しかし、これは何の効果もないようです。 localhostをpingすると、マイコンピュータ(192.168.1.101)の間接pingとほぼ同じ結果(約0.040ミリ秒)が返されるためです。同時に、ネットワーク上の他のコンピュータでpingを実行すると、ping時間は約0.3〜0.5ミリ秒になります。

私はTracerouteを試してみましたが、これは私が得たものです:

$traceroute 192.168.1.200                    # my other computer
traceroute to 192.168.1.200 (192.168.1.200), 30 hops max, 60 byte packets
 1  192.168.1.200 (192.168.1.200)  1.005 ms  0.972 ms  0.954 ms

$traceroute 192.168.1.101
traceroute to 192.168.1.101 (192.168.1.101), 30 hops max, 60 byte packets
 1  localhost.localdomain (192.168.1.101)  0.051 ms  0.014 ms  0.013 ms

$traceroute 127.0.0.1
traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets
 1  localhost.localdomain (127.0.0.1)  0.053 ms  0.015 ms  0.013 ms

私が何かを見逃しているのでしょうか、それとも完全に間違った方法でやっているのでしょうか?

答え1

問題は、テーブルlocalに次のパスがあることです。

$ ip route show table local
[...]
local 192.168.1.101 dev eth0 scope host
[...]

[src = 192.168.1.101 dst = 192.168.1.101]にパケットを送信し、ルータが反射のためにそのパケットを再送信することを期待するとき(一部の人はこの種のものを拒否します)、発信パケットはそのパスをスキップしますしたいが返されたパケットではありません。

これを行うには、以下を変更できますip rules

localテーブルを削除するための包括的な規則

# ip rule del from all table local

192.168.1.101->192.168.1.101 パケットに対してこの操作を実行していないものと交換します。

# ip rule add not from 192.168.1.101 to 192.168.1.101 table local pref 0

次に、netfilterを使用して着信パケットを表示します。

# iptables -t mangle -I PREROUTING -s 192.168.1.101 -d 192.168.1.101 -j MARK --set-mark 1

localそして、そのテーブルのみを使用するようにIPルールに指示します。

# ip rule add fwmark 1 table local pref 1

(もちろんip route add to 192.168.1.101 via 192.168.1.2 机の上にも必要ですmain

答え2

以下は、* BSDとLinuxで待ち時間、パケットの並べ替え、およびパケット損失を引き起こす可能性があるいくつかのソリューションです。

  1. 使用Webフィルタシミュレーションパケット損失

  2. TCを使うそしてネテム遅延と損失につながる

  3. FreeBSD では、以下を使用します。仮想ネットワーク。これは紹介する

関連情報