ワイヤレス アドホック ネットワークで 3 台のコンピューターをルーティングするにはどうすればよいですか?

ワイヤレス アドホック ネットワークで 3 台のコンピューターをルーティングするにはどうすればよいですか?

ワイヤレスアドホックネットワークに接続された 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(別のネットワーク インターフェイスを必要としない) を指定します。その後、他のすべてのホストがそのホストを介してパケットをルーティングするようにすることができます。

繰り返しになりますが、これが最善の方法であるかどうかはわかりません。何を達成しようとしているのか説明してください。

関連情報