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

0

Eu tenho 3 computadores: 192.168.2.1, 192.168.2.2, 192.168.2.4 conectados em uma rede ad-hoc sem fio. Eu quero todo o tráfego de 192.168.2.1 para passar por 192.168.2.2 quando se fala de 192.168.2.3. Basicamente

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

Como altero as tabelas de roteamento?

Eu 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 

Eu habilitei o forwading no 192.168.2.2 e ele funciona. Mas quando faç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 de 192.168.2.1 abaixo) e ainda recebo um salto quando faço traceroute. Mas se eu entrar no 192.192.2.2 e traceroute 192.168.2.5, ele 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?

EDIT; Eu 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
    
por Andrei 18.05.2016 / 15:25

2 respostas

2

É possível que o seu roteador instrua os outros a enviar diretamente, com um pacote de redirecionamento ICMP. Como estão todos na mesma rede, sabe que isso deve ser possível.

Eu configurei rotas como a sua entre três máquinas Linux (mach1 < mach3 < - > mach2) e testadas 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 duvidosos, uma vez que podem ser usados da maneira oposta: ter o tráfego enviado através de uma terceira máquina, um homem no meio. Veja por exemplo link

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, obtive todo o tráfego para passar pelo mach3.

Agora, eu 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. Eu não acho que deveria, se as máquinas só lidam com quadros destinados ao seu endereço Ethernet. Mas, em teoria, seria possível escolher cada quadro fora do ar.

    
por 24.05.2016 / 00:16
1

Em primeiro lugar, isso soa como um problema XY . O que você está tentando fazer? Tenho certeza de que o roteamento do tráfego de rede dessa maneira provavelmente não será uma boa solução para qualquer problema seu.

Dito isto,

Suas tabelas de roteamento ainda têm uma rota para 192.168.2.0/24 . Isso significa que 192.168.2.1 tem duas rotas para alcançar 192.168.2.2 , então o subsistema de roteamento do kernel considera ambos, vê que um é uma rota direta e o outro não, e usa a rota direta (porque é supostamente mais barato).

Se você 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 de tabela de roteamento para todos hosts na rede, incluindo aqueles que deseja acessar diretamente.
  • Crie dois / 24 intervalos de rede e forneça ao host que é atualmente 192.168.2.2 um endereço IP em ambos os intervalos (que não requer uma interface de rede separada). Você pode então ter todos os outros hosts roteando pacotes através desse host.

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

    
por 25.05.2016 / 11:03