
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.1
que 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.2
um 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.