
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.18
y 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.18
a 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 -rn
le mostrará rutas especiales con el l
indicador 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.