ワイヤレスアドホックネットワークに接続された 192.168.2.1、192.168.2.2、192.168.2.4 の 3 台のコンピュータがあります。192.168.2.1 から 192.168.2.3 への通信時に、192.168.2.1 からのすべてのトラフィックが 192.168.2.2 を通過するようにしたいです。基本的に
192.168.2.1 <---> 192.168.2.2 <---> 192.168.2.3
ルーティング テーブルを変更するにはどうすればよいですか?
私は試した:
[email protected]: sudo ip route add 192.168.2.3 via 192.168.2.2 dev wlan0
[email protected]: sudo ip route add 192.168.2.1 via 192.168.2.2 dev wlan0
192.168.2.2 で転送を有効にしましたが、うまくいきました。しかし、192.168.2.1 から traceroute を実行すると、192.168.2.3 に直接接続しているように見えます。ここで、さらにいくつかのノードを追加しました (以下の 192.168.2.1 のルート テーブルを参照)。それでも、traceroute を実行すると 1 ホップになります。しかし、192.192.2.2 にログインして 192.168.2.5 を traceroute すると、正しいホップ数が表示されます。
**ROUTE TABLE OF 192.168.2.1**
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.2.3 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.4 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.5 192.168.2.2 255.255.255.255 UGH 0 0 0 wlan0
**ROUTE TABLE OF 192.168.2.2**
Destination Gateway Genmask Flags Metric Ref Use Iface
169.254.0.0 0.0.0.0 255.255.0.0 U 303 0 0 wlan0
192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
192.168.2.4 192.168.2.3 255.255.255.255 UGH 0 0 0 wlan0
192.168.2.5 192.168.2.3 255.255.255.255 UGH 0 0 0 wlan0
ノードが何らかのキャッシュを実行する可能性はありますか?
編集;現在、合計10個のノードがあり、これはtracerouteからの出力です。
traceroute -4 192.168.2.10
traceroute to 192.168.2.10 (192.168.2.10), 30 hops max, 60 byte packets
1 192.168.2.2 (192.168.2.2) 10.140 ms 10.324 ms 10.398 ms
2 192.168.2.3 (192.168.2.3) 17.292 ms 17.483 ms 17.564 ms
3 192.168.2.4 (192.168.2.4) 25.646 ms 25.708 ms 26.110 ms
4 192.168.2.5 (192.168.2.5) 34.156 ms 34.416 ms 34.501 ms
5 192.168.2.6 (192.168.2.6) 44.131 ms 44.479 ms 44.560 ms
6 192.168.2.7 (192.168.2.7) 51.382 ms 43.074 ms 46.144 ms
7 192.168.2.8 (192.168.2.8) 46.129 ms 43.374 ms 53.956 ms
8 192.168.2.9 (192.168.2.9) 58.156 ms 83.625 ms 83.642 ms
9 192.168.2.10 (192.168.2.10) 83.565 ms 84.008 ms 89.355 ms
答え1
ルータが ICMP リダイレクト パケットを使用して他のルータに直接送信するように指示している可能性があります。ルータはすべて同じネットワーク上にあるため、これが可能であることがわかっています。
私は 3 台の Linux マシン (mach1 <-> mach3 <-> mach2) 間にあなたと同様のルートを設定し、ping でテストしました。
mach1# ping mach2
PING mach2 (x.x.x.237) 56(84) bytes of data.
From mach3 (x.x.x.238): icmp_seq=1 Redirect Host(New nexthop: mach2 (x.x.x.237))
64 bytes from mach2 (x.x.x.237): icmp_seq=1 ttl=63 time=0.537 ms
mach3 と mach2 の Tcpdump では、mach3 が mach1 にリダイレクトを送信し、その後すべてのトラフィックが mach1 と mach2 の間で直接送信されることが示されています。
リダイレクトは、逆の意味で使われることもあるため、やや怪しいといえます。つまり、トラフィックを第3のマシン、つまり中間者を経由して送信するのです。例えば、https://askubuntu.com/questions/118273/icmp-redirects とブロックすべきものは何ですか?
リダイレクトの送受信は、いくつかの sysctl で制御できます。
net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects
ルーターで net.ipv4.conf.eth0.send_redirects をゼロに設定し、ルートをリセットすると、すべてのトラフィックが mach3 を通過するようになりました。
さて、私はこれをスイッチ ネットワーク (および仮想マシン) でテストしたので、WLAN 上でも状況が変わるかどうかはわかりません。マシンが Ethernet アドレス宛のフレームのみを処理する場合は、状況が変わることはないと思います。ただし、理論上は、すべてのフレームを無線で拾うことが可能です。
答え2
まず、これはXY問題何をしようとしているのですか? ネットワーク トラフィックをこのようにルーティングすることは、どのような問題に対しても適切な解決策にはならないと思います。
そうは言っても、
ルーティング テーブルには、 へのルートがまだ残っています192.168.2.0/24
。つまり、192.168.2.1
には に到達するルートが 2 つある192.168.2.2
ため、カーネル ルーティング サブシステムは両方を考慮し、一方が直接ルートでもう一方がそうでないことを確認し、直接ルートを使用します (その方が安価であると考えられるため)。
それを望まない場合は、次の 2 つのオプションがあります。
- のルーティングテーブルエントリを削除します
192.168.2.0/24
。これは、のルーティングテーブルエントリを作成する必要があることを意味します。全てネットワーク上のホスト(直接アクセスしたいホストも含む)。 - 2 つの /24 ネットワーク範囲を作成し、現在両方の範囲の IP アドレスを持つホスト
192.168.2.2
(別のネットワーク インターフェイスを必要としない) を指定します。その後、他のすべてのホストがそのホストを介してパケットをルーティングするようにすることができます。
繰り返しになりますが、これが最善の方法であるかどうかはわかりません。何を達成しようとしているのか説明してください。