192.168.2.1、192.168.2.2、192.168.2.4など、3台のコンピュータがワイヤレスAd-hocネットワークに接続されています。 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でルートを追跡すると、192.168.2.3に直接行くように見えます。これで、いくつかのノードを追加し(以下の192.168.2.1のルートテーブルを参照)、Tracerouteを実行してもまだ1つのホップを取得します。ただし、192.192.2.2にログインして192.168.2.5パスを追跡すると、正しいホップ数が表示されます。
**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/what-are-icmp-redirects-and-should-they-be-blocked
リダイレクトの送受信は、いくつかのsysctlsを使用して制御できます。
net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects
ルータでnet.ipv4.conf.eth0.send_redirectsを0に設定し、ルーティングをリセットした後、すべてのトラフィックがmach3を通過しました。
これでスイッチネットワーク(およびVM)でこれをテストしたので、WLANを使用すると状況が変わるかどうかはわかりません。マシンがイーサネットアドレスに向かうフレームだけを処理する場合、私はこれを行うべきではないと思います。しかし、理論的には空からすべてのフレームを引き出すことが可能です。
答え2
まず、次のような音がします。XYの問題。何してるの?このように、ネットワークトラフィックをルーティングすることが問題に対する良い解決策になる可能性はほとんどないと確信しています。
それでも、
ルーティングテーブルにはまだパスがあります192.168.2.0/24
。つまり、192.168.2.1
2つのルートが到着するため、192.168.2.2
カーネルルーティングサブシステムは両方のルートを考慮して、1つは直接ルートで、もう1つはそうでないものを見つけて直接ルートを使用します(この方法はより安価でなければなりません)。
これを望まない場合は、2つのオプションがあります。
- ルーティングテーブルエントリが削除されました
192.168.2.0/24
。これは、ルーティングテーブルエントリを生成する必要があることを意味します。みんなネットワーク上のホスト - 直接アクセスするホストを含みます。 - 2つの/ 24ネットワークスコープを作成し、現在の両方のスコープに属するIPアドレスをホストに提供します
192.168.2.2
(別のネットワークインターフェイスは必要ありません)。その後、他のすべてのホストにそのホストを介してパケットをルーティングさせることができます。
しかし、これが最善の方法であるかどうかはわかりません。あなたが達成したいものが何であるかを説明してください。