Como rotear 3 computadores em uma rede ad-hoc sem fio?

Como rotear 3 computadores em uma rede ad-hoc sem fio?

Tenho 3 computadores: 192.168.2.1, 192.168.2.2, 192.168.2.4 conectados a uma rede ad-hoc sem fio. Quero que todo o tráfego de 192.168.2.1 passe por 192.168.2.2 quando falar com 192.168.2.3. Basicamente

192.168.2.1 <---> 192.168.2.2 <---> 192.168.2.3

Como altero as tabelas de roteamento?

Tentei:

[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 

Ativei o encaminhamento em 192.168.2.2 e funciona. Mas quando faço o traceroute de 192.168.2.1, parece que vai diretamente para 192.168.2.3. Agora, adicionei mais alguns nós (veja a tabela de rotas 192.168.2.1 abaixo) e ainda consigo um salto quando faço o traceroute. Mas se eu fizer login em 192.192.2.2 e rastrear 192.168.2.5, isso me dará o número correto 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

É possível que os nós façam algum cache?

EDITAR;Tenho 10 nós no total agora e esta é a saída do meu 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

Responder1

É possível que o seu roteador diga aos outros para enviarem diretamente, com um pacote de redirecionamento ICMP. Como estão todos na mesma rede, sabe que isso deveria ser possível.

Configurei rotas como a sua entre três máquinas Linux (mach1 <-> mach3 <-> mach2) e testei com um 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 em mach3 e mach2 mostra mach3 enviando um redirecionamento para mach1, e depois disso todo o tráfego vai diretamente entre mach1 e mach2.

Os redirecionamentos podem ser considerados um pouco suspeitos, pois podem ser usados ​​de maneira oposta: para enviar o tráfego através de uma terceira máquina, um man-in-the-middle. Veja, por exemplohttps://askubuntu.com/questions/118273/what-are-icmp-redirects-and-should-they-be-blocked

O envio e recebimento de redirecionamentos podem ser controlados com alguns sysctls:

net.ipv4.conf.*.accept_redirects
net.ipv4.conf.*.send_redirects

Depois de definir net.ipv4.conf.eth0.send_redirects como zero no roteador e redefinir as rotas, consegui que todo o tráfego passasse pelo mach3.

Agora, testei isso em uma rede comutada (e com máquinas virtuais), então não tenho certeza se estar em uma WLAN muda as coisas. Não acho que deveria, se as máquinas lidam apenas com frames destinados ao seu endereço Ethernet. Mas, em teoria, seria possível retirar cada quadro do ar.

Responder2

Em primeiro lugar, isto soa como umProblema XY. O que você está tentando fazer? Tenho certeza de que é improvável que rotear o tráfego de rede dessa maneira seja uma boa solução para qualquer que seja o seu problema.

Tendo dito isto,

Suas tabelas de roteamento ainda têm uma rota para 192.168.2.0/24. Isso significa 192.168.2.1que há duas rotas para alcançar 192.168.2.2, então o subsistema de roteamento do kernel considera ambas, vê que uma é uma rota direta e a outra não, e usa a rota direta (porque deveria ser mais barata).

Se não quiser isso, você tem duas opções:

  • Remova a entrada da tabela de roteamento para 192.168.2.0/24. Isso significa que você precisa criar entradas na tabela de roteamento paratodoshosts na rede - incluindo aqueles que você deseja acessar diretamente.
  • Crie dois intervalos de rede/24 e forneça ao host que atualmente é 192.168.2.2um endereço IP em ambos os intervalos (isso não requer uma interface de rede separada). Você pode então fazer com que todos os outros hosts roteem pacotes através desse host.

Mais uma vez, porém, não tenho certeza se este é o melhor caminho a seguir. Por favor, explique o que você está tentando alcançar.

informação relacionada