
Tengo 3 computadoras: 192.168.2.1, 192.168.2.2, 192.168.2.4 conectadas a una red inalámbrica ad-hoc. Quiero que todo el tráfico de 192.168.2.1 pase por 192.168.2.2 cuando se comunique con 192.168.2.3. Básicamente
192.168.2.1 <---> 192.168.2.2 <---> 192.168.2.3
¿Cómo modifico las tablas de enrutamiento?
Lo intenté:
[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
Habilité el reenvío en 192.168.2.2 y funciona. Pero cuando hago un traceroute desde 192.168.2.1, parece que va directamente a 192.168.2.3. Ahora, agregué algunos nodos más (consulte la tabla de rutas de 192.168.2.1 a continuación) y todavía obtengo un salto cuando hago traceroute. Pero si inicio sesión en 192.192.2.2 y rastreo la ruta 192.168.2.5, me da la cantidad correcta de saltos.
**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
¿Es posible que los nodos realicen algún almacenamiento en caché?
EDITAR;Ahora tengo 10 nodos en total y este es el resultado de mi 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
Respuesta1
Es posible que su enrutador les indique a los demás que envíen directamente, con un paquete de redireccionamiento ICMP. Como todos están en la misma red, sabe que esto debería ser posible.
Configuré rutas como la suya entre tres máquinas Linux (mach1 <-> mach3 <-> mach2) y las probé con un 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
Tcpdump en mach3 y mach2 muestra que mach3 envía una redirección a mach1, y luego todo el tráfico va directamente entre mach1 y mach2.
Las redirecciones pueden considerarse un poco sospechosas, ya que se pueden usar de manera opuesta: enviar el tráfico a través de una tercera máquina, un intermediario. Ver por ejemplohttps://askubuntu.com/questions/118273/what-are-icmp-redirects-and-should-they-be-blocked
El envío y la recepción de redireccionamientos se pueden controlar con algunos sistemas:
net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects
Después de configurar net.ipv4.conf.eth0.send_redirects a cero en el enrutador y restablecer las rutas, logré que todo el tráfico pasara por mach3.
Ahora, probé esto en una red conmutada (y con máquinas virtuales), por lo que no estoy seguro de si estar en una WLAN cambia las cosas. No creo que deba hacerlo si las máquinas solo manejan tramas destinadas a su dirección Ethernet. Pero en teoría sería posible capturar cada fotograma del aire.
Respuesta2
En primer lugar, esto suena como unproblema xy. ¿Que estás tratando de hacer? Estoy bastante seguro de que es poco probable que enrutar el tráfico de la red de esta manera sea una buena solución para cualquiera que sea su problema.
Una vez dicho esto,
Sus tablas de enrutamiento todavía tienen una ruta para 192.168.2.0/24
. Esto significa 192.168.2.1
que tiene dos rutas para llegar 192.168.2.2
, por lo que el subsistema de enrutamiento del kernel considera ambas, ve que una es una ruta directa y la otra no, y usa la ruta directa (porque se supone que es más barata).
Si no quieres eso, tienes dos opciones:
- Elimine la entrada de la tabla de enrutamiento para
192.168.2.0/24
. Esto significa que debe crear entradas en la tabla de enrutamiento paratodohosts en la red, incluidos aquellos a los que desea comunicarse directamente. - Cree dos rangos de red /24 y proporcione al host cuál es actualmente
192.168.2.2
una dirección IP en ambos rangos (eso no requiere una interfaz de red separada). Luego puede hacer que todos los demás hosts enruten paquetes a través de ese host.
Sin embargo, una vez más, no estoy seguro de que éste sea el mejor camino a seguir. Por favor, explica qué es lo que estás tratando de lograr.