lo que me gustaria hacer

lo que me gustaria hacer

lo que me gustaria hacer

Me gustaría configurar mi máquina Debian Stretch GNU/Linux para enrutar paquetes IP entre sus interfaces de red.

Contexto

Estas son las interfaces de red disponibles en mi caja Debian y en mi próximo enrutador:

Índice nombre de la interfaz IP
1 enp2s0 192.168.23.91/24
2 enx00e04c360e75 192.168.1.1/24
3 enx000ec667a74a 192.168.2.2/24
  • sysctl net.ipv4.ip_forwarddevuelve 1, por lo tanto, el enrutamiento está habilitado.
  • cat /proc/sys/net/ipv4/conf/*/rp_filterno devuelve nada más que 0s. Por lo tanto, el filtrado de ruta inversa está deshabilitado. (Esta fue la fuente de preocupación para algunas otras preguntas que encontré).

La tabla de enrutamiento tiene el siguiente aspecto:

$ sudo route -nn
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.23.254  0.0.0.0         UG    100    0        0 enp2s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp2s0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.1.0     0.0.0.0         255.255.255.0   U     101    0        0 enx00e04c360e75
192.168.2.0     0.0.0.0         255.255.255.0   U     102    0        0 enx000ec667a74a
192.168.23.0    0.0.0.0         255.255.255.0   U     100    0        0 enp2s0

las siguientes obras

Desde mi dispositivo ( 192.168.1.111) conectado a la NIC 2, puedo hacer ping tanto a mi NIC 2 ( 192.168.1.1) como a mi NIC 3 ( 192.168.2.2).

tcpdumpLa salida en mi enrutador Debian se ve como se esperaba:

$ sudo tcpdump -i enx00e04c360e75 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enx00e04c360e75, link-type EN10MB (Ethernet), capture size 262144 bytes
18:10:51.919808 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 17, length 64
18:10:51.919863 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 17, length 64
18:10:52.920019 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 18, length 64
18:10:52.920130 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 18, length 64
18:10:53.920808 IP 192.168.1.111 > 192.168.1.1: ICMP echo request, id 25404, seq 19, length 64
18:10:53.920895 IP 192.168.1.1 > 192.168.1.111: ICMP echo reply, id 25404, seq 19, length 64
[...]
18:11:03.408546 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 0, length 64
18:11:03.408622 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 0, length 64
18:11:04.405006 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 1, length 64
18:11:04.405061 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 1, length 64
18:11:05.405147 IP 192.168.1.111 > 192.168.2.2: ICMP echo request, id 25916, seq 2, length 64
18:11:05.405201 IP 192.168.2.2 > 192.168.1.111: ICMP echo reply, id 25916, seq 2, length 64

Lo siguiente no funciona

Desde mi dispositivo conectado a través de la NIC 2, no puedo hacer ping a algún host accesible a través de la NIC 1.

tcpdumpejecutándose en mi caja Debian muestra los paquetes entrantes en la NIC 2:

$ sudo tcpdump -i enx00e04c360e75 icmp -n
listening on enx00e04c360e75, link-type EN10MB (Ethernet), capture size 262144 bytes
18:11:31.837778 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 4, length 64
18:11:32.838830 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 5, length 64
18:11:33.838249 IP 192.168.1.111 > 193.99.144.80: ICMP echo request, id 36668, seq 6, length 64
[...]

pero nunca salen por la NIC 1:

$ sudo tcpdump -i enp2s0 icmp -n
listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
[nothing]

Cuando realizo los pings directamente desde la caja de mi enrutador Debian, tcpdumpaparece lo esperado:

$ sudo tcpdump -i enp2s0 icmp -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s0, link-type EN10MB (Ethernet), capture size 262144 bytes
18:35:16.577795 IP 192.168.23.91 > 193.99.144.80: ICMP echo request, id 13146, seq 1, length 64
18:35:16.600861 IP 193.99.144.80 > 192.168.23.91: ICMP echo reply, id 13146, seq 1, length 64
18:35:17.578164 IP 192.168.23.91 > 193.99.144.80: ICMP echo request, id 13146, seq 2, length 64
18:35:17.599898 IP 193.99.144.80 > 192.168.23.91: ICMP echo reply, id 13146, seq 2, length 64

Pregunta

¿Qué impide que los paquetes de ping que llegan a la NIC 2 se transmitan a través de la NIC 1? ¿Qué debo hacer para habilitar el enrutamiento de estos paquetes?

Respuesta1

Resumiendo lo que se intercambió en comentarios:

  • el sistema no fue configurado explícitamente como un enrutador

    Es decir, no existe una configuración explícita que aplique algo como:

    sysctl -w net.ipv4.ip_forward=1
    
  • el sistema está ejecutando Docker

    Eso significa que:

    • Docker convierte el sistema en un enrutador

      Se fija:

      sysctl -w net.ipv4.ip_forward=1
      
    • Estibadorevita el enrutamiento en la política de firewall

      Docker en un enrutador

      Docker también establece la política para la cadena FORWARD en DROP. Si su host Docker también actúa como enrutador, esto dará como resultado que ese enrutador ya no reenvíe ningún tráfico. Si desea que su sistema continúe funcionando como enrutador, puede agregar reglas ACEPTAR explícitas a la DOCKER-USERcadena para permitirlo:

      $ iptables -I DOCKER-USER -i src_if -o dst_if -j ACCEPT
      

Entonces

  • hacer que Docker elimine los paquetes reenviados (excepto los contenedores)
  • detener Docker ya no habilitó el reenvío (al menos en el siguiente arranque)

En ambos casos, el sistema finalmente no realizó la ruta.

Probablemente deberías hacer ambas cosas a continuación:

  • habilitar el enrutamiento explícitamente (en algún lugar de /etc/sysctl.confo /etc/sysctl.d/)
  • siga la guía de Dockeren enlace anteriorpara permitir el tráfico enrutado

información relacionada