Conexión entre subredes en diferentes interfaces sin reenvío de IP

Conexión entre subredes en diferentes interfaces sin reenvío de IP

Esta es mi primera pregunta sobre superusuario, así que me disculpo si no está a la altura.

Estoy ejecutando pop!_OS 19.10 (basado en Ubuntu 19.10) y estoy tratando de comprender su comportamiento de red. Dada la interfaz de red eth0, agregué las siguientes subredes:

ip addr add dev eth0 192.168.2.18/24
ip addr add dev eth0 192.168.3.18/24

La interfaz ahora tiene el siguiente aspecto (la dirección MAC ha cambiado)

1: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever
    inet 192.168.3.18/24 scope global enp0s31f6
       valid_lft forever preferred_lft forever

Usando nc, puedo enviar datos entre las direcciones IP 192.168.2.18y 192.168.3.18.

##################################################################################
# nc -v -l 192.168.2.18 8080
Listening on [pop-os] (family 2, port 8080)
Listening on pop-os 8080
Connection received on pop-os 55361
Hello World!
##################################################################################
# nc -v -s 192.168.3.18 192.168.2.18 8080
Connection to 192.168.2.18 8080 port [tcp/http-alt] succeeded!
Hello World!
##################################################################################
# ss -4 -n
tcp    ESTAB    0    0    192.168.3.18:55361    192.168.2.18:8080           
tcp    ESTAB    0    0    192.168.2.18:8080     192.168.3.18:55361          

Pregunta 1:¿Tengo razón al suponer que las direcciones dentrosubredes separadassobre elmisma interfaz¿Siempre pueden comunicarse entre sí (a menos que estén bloqueados por un firewall)? ¿Esto se debe a que el Kernel examina la tabla de enrutamiento y ve que simplemente puede conectar localmente las dos redes? Es decir:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.3.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0

Ahora probé esto, porque estaba investigando el reenvío de IP del kernel y leíaquí:

Sin embargo, si el reenvío está desactivado, el kernel primero verificará de qué interfaz proviene el paquete. Si no proviene de la misma interfaz, el kernel lo descartará.

Sin embargo, también puedo conectarme 192.168.2.18a través de mi otra interfaz wlan0, usando la dirección 192.168.1.73. Tengo el reenvío de IP deshabilitado.

Netid    State  Recv-Q  Send-Q    Local Address:Port  Peer Address:Port           
tcp      ESTAB  0       0         192.168.2.18:8080   192.168.1.73:40405          
tcp      ESTAB  0       0         192.168.1.73:40405  192.168.2.18:8080           

Pregunta 2:¿Por qué pueden comunicarse direcciones IP en diferentes subredes e interfaces sin el reenvío de IP habilitado? ¿Es porque pertenecen al mismo anfitrión? ¿Dónde se define este comportamiento? Es decir, ¿las reglas de reenvío de IP solo se activarían una vez que los paquetes comiencen a salir del host?

Respuesta1

Pregunta #1: ¿Estoy en lo cierto al suponer que las direcciones dentro de subredes separadas en la misma interfaz siempre pueden comunicarse entre sí (a menos que estén bloqueadas por un firewall)? ¿Esto se debe a que el Kernel examina la tabla de enrutamiento y ve que simplemente puede conectar localmente las dos redes? Es decir:

Sí. Esto no se debe a las entradas de "subred" que encontró, sino a las entradas de "dirección local" que se encuentran en una tabla de enrutamiento separada (la tabla "local"). La antigua herramienta de 'ruta' probablemente oculta estas entradas deliberadamente, pero también está desactualizada y no puede mostrar completamente la información de enrutamiento mantenida por los kernels de Linux modernos, así que use:

ip -4 route show table local
ip -6 ro ls tab local

(Nota: esto es específico de Linux. En BSD, generalmente hay solo una tabla de enrutamiento y netstat -rnle mostrará rutas especiales con el lindicador configurado. En otros sistemas operativos, incluso puede ser solo un comportamiento integrado y no necesariamente expuesto como rutas en todo.)

Además, las direcciones ni siquiera tienen que estar en la misma interfaz, porque los paquetesEn realidad, nunca uses la interfaz física.. En cambio, el núcleo se comporta como si sus propias direcciones simplemente estuvieran enrutadas a través delbucle invertidointerfaz 'lo'.

Pregunta #2: ¿Por qué las direcciones IP en diferentes subredes e interfaces pueden comunicarse sin el reenvío de IP habilitado? ¿Es porque pertenecen al mismo anfitrión? ¿Dónde se define este comportamiento? Es decir, ¿las reglas de reenvío de IP solo se activarían una vez que los paquetes comiencen a salir del host?

Sí, es porque pertenecen al mismo host. (En Linux también deben estar en el mismo espacio de nombres de red, por ejemplo, en el mismo contenedor).

Las reglas de reenvío de IP se activan cuando se envía un paquete.recibióa través de una interfaz sin loopback (por ejemplo, llegó a través de Ethernet a la dirección MAC local), pero su IP de destino no se reconoce como perteneciente al host.

Los paquetes generados localmente, por definición, no se "reenvían" (son "salidas" ya que tienen una dirección IP de origen local), por lo que no se aplican las reglas de reenvío.

información relacionada