Não foi possível estabelecer a rota da rede

Não foi possível estabelecer a rota da rede

Estou com dificuldades para estabelecer uma rota de rede do meu laptop para outro dispositivo. Admito que falta minha experiência em networking, sinto muito pela ignorância. Eu tenho a seguinte configuração:

[Dispositivo-A] <--WiFi--> [roteador] <--WiFi--> [Dispositivo-B] <--Ethernet--> [Dispositivo-C]

Tenho os seguintes endereços IP (que foram configurados automaticamente):

Dispositivo-A:

  • wi-fi: 192.168.0.155

Dispositivo-B:

  • wi-fi: 192.168.0.121
  • Ethernet: 10.42.0.1

Dispositivo-C:

  • Ethernet: 10.42.0.134

Todos os dispositivos estão usando Ubuntu 20.04. Configurei a conexão com fio entre o Dispositivo B e o Dispositivo C no Dispositivo B usando a GUI do gerenciador de rede com o método IPv4 definido como "Compartilhar com outros computadores". Todas as outras configurações foram deixadas como padrão. No Dispositivo-A, tentei definir uma rota para o Dispositivo-C usando:

sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1

O Dispositivo-C é capaz de executar ping no Dispositivo-A e o Dispositivo-A pode executar ping no Dispositivo-B em 192.168.0.121 e 10.42.0.1. No entanto, quando tento executar ping no Dispositivo-C do Dispositivo-A, recebo:

$ ping 10.42.0.134
PING 10.42.0.134 (10.42.0.134) 56(84) bytes of data.
From 192.168.0.121 icmp_seq=1 Destination Port Unreachable

Como configurar os dispositivos para que o Dispositivo-A possa se comunicar com o Dispositivo-C? Parece algo que deveria ser bastante simples, mas não consegui descobrir.

Atualizar

O encaminhamento está habilitado em B

$ sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

Aqui estão meus iptablesconjuntos de regras em B:

$ sudo iptables -L -n -v
Chain INPUT (policy ACCEPT 20319 packets, 21M bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6  2236 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
   12   863 ACCEPT     udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  193 33179 ACCEPT     all  --  *      eth0    0.0.0.0/0            10.42.0.0/24         state RELATED,ESTABLISHED
  201 19734 ACCEPT     all  --  eth0   *       10.42.0.0/24         0.0.0.0/0           
    0     0 ACCEPT     all  --  eth0   eth0    0.0.0.0/0            0.0.0.0/0           
    9   756 REJECT     all  --  *      eth0    0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  eth0   *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 18275 packets, 2577K bytes)
 pkts bytes target     prot opt in     out     source               destination         
$ sudo iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 577 packets, 172K bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 59 packets, 4904 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 476 packets, 67069 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 468 packets, 65733 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  178 14264 MASQUERADE  all  --  *      *       10.42.0.0/24        !10.42.0.0/24        

Não configurei nenhuma regra de firewall em B.

Responder1

O problema era o iptablesconjunto de regras do Dispositivo-B (graças à ajuda de Thomas nos comentários).

Conforme mostrado na pergunta na saída de sudo iptables -L -n -v, você pode ver que os pacotes que passam por B estão sendo rejeitados em vez de serem encaminhados para eth0 (mostrado como a quarta entrada abaixo de "Chain FORWARD" na pergunta). Consegui listar todas as regras de encaminhamento usando o iptables -Scomando:

$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i eth0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -d 10.42.0.0/24 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.42.0.0/24 -i eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth0 -j ACCEPT
-A FORWARD -o eth0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i eth0 -j REJECT --reject-with icmp-port-unreachable

Pelo resultado, as duas últimas regras são o que está criando o problema. Eu os removi usando o seguinte:

sudo iptables -D FORWARD -o eth0 -j REJECT
sudo iptables -D FORWARD -i eth0 -j REJECT

Agora posso fazer ping/ssh no Dispositivo-C a partir do Dispositivo-A e vice-versa.

informação relacionada