Eu tenho uma rede apenas ethernet. Não conheço os IPs e as sub-redes usadas por alguns dispositivos, portanto não posso configurar meu computador para conectar-se a esses dispositivos. Eu usei ferramentas como masscan para criar um mapa da rede usando ARP, mas leva muito tempo (mesmo conectando os dispositivos diretamente por ethernet).
Seria possível criar rotas IP para obter todos os pacotes da minha rede local sem alterar o endereço IP e a sub-rede?
Eu estava pensando em algo assim:
# Enable packets forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# Set local IP
ifconfig eth0 192.168.1.0 netmask 255.255.255.0
# Add IP routes for each subnet
ip route add 0.0.1.0/24 via 192.168.1.0
ip route add 0.0.2.0/24 via 192.168.1.0
...
ip route add 10.0.1.0/24 via 192.168.1.0
ip route add 10.0.2.0/24 via 192.168.1.0
...
ip route add 192.168.1.0/24 via 192.168.1.0
...
ip route add 255.255.255.0/24 via 192.168.1.0
Isso funcionaria ou eu não entendi completamente como funciona?
Não, as rotas não irão ajudá-lo a obter todos os pacotes. Eles apenas ajudam você a enviar pacotes, mas não têm efeito sobre o recebimento deles. De maneira mais geral, alegar ser um "roteador" (ip_forward=1) não atrairá pacotes automaticamente para você , independentemente de qualquer configuração de sub-rede.
Um roteador só recebe pacotes porque os hosts estão configurados especificamente para usá-lo - ele não apenas aspira todos os pacotes, mas ainda recebe apenas os pacotes que contêm o endereço MAC do roteador , pois os hosts endereçam especificamente esses pacotes ao MAC do roteador.
(Na maioria das Ethernets modernas, os quadros MAC são comutados - eles não são mais visíveis para todos os hosts, mas são entregues apenas ao dispositivo que possui o endereço MAC de destino especificado. Portanto, se o servidor ModBus em questão tiver uma rota como "padrão via 192.168 .7.1", ele procurará o endereço MAC de 192.168.7.1 e só enviará coisas para lá.)
Se você já está recebendo os pacotes em sua interface de rede, não precisa de nenhuma dessas configurações – você pode apenas vê-los no tcpdump. Muito provavelmente você não está recebendo os pacotes, então as rotas do seu lado não podem fazer nada com os pacotes que não estão lá.
Resumindo, não, não vai funcionar de jeito nenhum.
Como uma nota rodapé:
Ao configurar uma rota "local" ou "interface" no Linux, a maneira preferida de escrevê-la é
10.0.1.0/24 dev eth0
, não10.0.1.0/24 via <my_own_ip>
. O último ainda pode funcionar, mas é bastante estranho à configuração do Linux (acredito que seja um antigo BSD-ismo).As sub-redes não precisam ser /24. Se você quiser cobrir todo o 10.0.0.0/8, por exemplo, você pode ter todo o /8 como uma única sub-rede em vez de enumerar todos os 65536 possíveis /24. Se você quiser cobrir todos os endereços possíveis, poderá ter apenas uma rota /0 (ou seja, uma "rota padrão").
A única diferença prática é positiva – todos aqueles endereços "10.xx0" e "10.xx255" no meio agora são endereços de host perfeitamente válidos no meio de um /8 em vez de serem partes reservadas de um /24. (E isso só se aplica a rotas de sub-rede "diretas", de qualquer maneira. As rotas de gateway ou "via" não têm nada reservado.)
Vários blocos grandes de endereços são inutilizáveis por vários motivos e não precisam ser listados, pois não há chance de seu dispositivo estar usando-os. Por exemplo, 0.0.0.0/8 é reservado por razões históricas; 224.0.0.0/4 é usado para multicast e não pode ser usado para sub-redes normais; e todo o 240.0.0.0/4 (ou seja, até 255.255.255.255!) é praticamente reservado, talvez com apenas 2-3 redes no mundo usando-o.