No se puede establecer la ruta de la red

No se puede establecer la ruta de la red

Estoy luchando por establecer una ruta de red desde mi computadora portátil a otro dispositivo. Admito que me falta experiencia en redes, lo siento por la ignorancia. Tengo la siguiente configuración:

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

Tengo las siguientes direcciones IP (que se configuraron automáticamente):

Dispositivo-A:

  • wifi: 192.168.0.155

Dispositivo-B:

  • wifi: 192.168.0.121
  • ethernet: 10.42.0.1

Dispositivo-C:

  • Ethernet: 10.42.0.134

Todos los dispositivos utilizan Ubuntu 20.04. Configuré la conexión por cable entre el Dispositivo B y el Dispositivo C en el Dispositivo B usando la GUI del administrador de red con el Método IPv4 configurado en "Compartir con otras computadoras". Todas las demás configuraciones se dejaron en los valores predeterminados. En el Dispositivo-A, intenté establecer una ruta al Dispositivo-C usando:

sudo ip route add 10.42.0.0/24 via 192.168.0.121 dev wlo1

El Dispositivo C puede hacer ping al Dispositivo A y el Dispositivo A puede hacer ping al Dispositivo B tanto en 192.168.0.121 como en 10.42.0.1. Sin embargo, cuando intento hacer ping al Dispositivo-C desde el Dispositivo-A, aparece:

$ 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

¿Cómo se pueden configurar los dispositivos para que el Dispositivo-A pueda comunicarse con el Dispositivo-C? Esto parece algo que debería ser bastante simple pero no he podido resolverlo.

Actualizar

El reenvío está habilitado en B

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

Aquí están mis iptablesconjuntos de reglas en 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        

No he configurado ninguna regla de firewall en B.

Respuesta1

El problema fue el iptablesconjunto de reglas en el Dispositivo B (gracias a la ayuda de Thomas en los comentarios).

Como se muestra en la pregunta en el resultado de sudo iptables -L -n -v, puede ver que los paquetes que pasan por B se rechazan en lugar de reenviarse a eth0 (que se muestra como la cuarta entrada debajo de "Chain FORWARD" en la pregunta). Pude enumerar todas las reglas de reenvío usando el 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

Según el resultado, las dos últimas reglas son las que están creando el problema. Los eliminé usando lo siguiente:

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

Ahora puedo hacer ping/ssh al Dispositivo-C desde el Dispositivo-A, y viceversa.

información relacionada