¿Por qué `ip` e `ifconfig` tienen comportamientos diferentes cuando la interfaz no funciona?

¿Por qué `ip` e `ifconfig` tienen comportamientos diferentes cuando la interfaz no funciona?

Primero apago las interfaces

# Shutdown the interfaces
ip link set enp2s0f0 down
ip link set enp2s0f1 down

Usando ifconfig:

# Set subnets to interfaces
ifconfig enp2s0f0 10.0.0.1/24
ifconfig enp2s0f1 10.0.1.1/24

# Add two routes
ip route add 10.11.1.1 dev enp2s0f0
ip route add 10.11.0.1 dev enp2s0f1

# Result => NO PROBLEM, my routes are here even tho the interfaces are down
$ip route
10.0.0.0/24 dev enp2s0f0 proto kernel scope link src 10.0.0.1 
10.0.1.0/24 dev enp2s0f1 proto kernel scope link src 10.0.1.1 
10.11.0.1 dev enp2s0f1 scope link 
10.11.1.1 dev enp2s0f0 scope link 

Usando ip:

# Set subnets to interfaces
ip addr add 10.0.0.1/24 dev enp2s0f0
ip addr add 10.0.1.1/24 dev enp2s0f1

$ip route
#NOTHING => Where are the routes?!

# Add two routes
ip route add 10.11.1.1 dev enp2s0f0
ip route add 10.11.0.1 dev enp2s0f1

$ip route
#NOTHING => Where are my routes?!

ip link set enp2s0f0 up
ip link set enp2s0f1 up

# Result => WOW only two routes appeared miraculously
$ip route
10.0.0.0/24 dev enp2s0f0 proto kernel scope link src 10.0.0.1 
10.0.1.0/24 dev enp2s0f1 proto kernel scope link src 10.0.1.1 
# => Where are my 10.11.*.* routes?
  1. ¿Por qué no ip routemuestra mis rutas?
  2. ¿Dónde se agregan mis rutas milagrosamente después de abrir mis interfaces? ¿Por qué no puedo verlos antes?
  3. ¿Por qué no aparecen mis rutas después de abrir las interfaces?

Quiero configurar todas las rutas antes de abrir las interfaces. No tengo ningún problema al ifconfighacerlo. Me pregunto qué sorpresas vendrán a continuación.

Pensé ifconfigy iperan compatibles, el paso de ifconfig a ip no será tan fácil.

Respuesta1

Sus tres preguntas surgen de un malentendido:

ifconfigcon una interfaz y una dirección implica la upopción, por lo que en su ifconfigejemplo, la interfaz aparece al mismo tiempo que especifica una dirección para ella.

Esto significa

ifconfig enp2s0f0 10.0.0.1/24
ifconfig enp2s0f1 10.0.1.1/24

en realidad es la abreviatura de

ifconfig enp2s0f0 10.0.0.1/24 up
ifconfig enp2s0f1 10.0.1.1/24 up

ipdeiproute2organiza más limpiamente los actos de:

  • trayendo uninterfazarriba y bajándolo ( ip link),
  • asignando una IPDIRECCIÓNa un dispositivo de red ( ip address), y
  • configurando el kernelenrutamientomesas ( ip route).

ifconfigmezcla esos conceptos dispares, lo que podría decirse que es más confuso o menos intuitivo.


Si desea una forma conveniente de administrar el estado de las rutas, dispositivos de red, interfaces y túneles, debería considerar el uso de una herramienta de administración de configuración de red. Le permiten definir su red en una sintaxis declarativa conveniente, que puede activar o desactivar rápidamente con un solo comando.

Estas son algunas de las herramientas incluidas con las distribuciones comunes de Linux:

  • Debian –si arriba abajo( /etc/network/interfaces, /etc/network/interfaces.d/)
  • Ubuntu –netplan.io( /etc/netplan/)
  • Red Hat Enterprise Linux/CentOS –ifcfg( /etc/sysconfig/network-scripts/)
  • generalmente distribuciones con entornos de escritorio –Gerente de Redes( /etc/NetworkManager/)

Para que esté completo, aquí están las respuestas a sus preguntas:

  1. ¿Por qué no ip routemuestra mis rutas?

Las rutas no se guardan en la tabla principal si el enlace correspondiente no funciona. Su ipsecuencia de comandos no muestra primero las interfaces involucradas.

  1. ¿Dónde se agregan mis rutas milagrosamente después de abrir mis interfaces? ¿Por qué no puedo verlos antes?

Las rutas de un dispositivo no se registran en la tabla de enrutamiento si la interfaz está caída.

  1. ¿Por qué no aparecen mis rutas después de abrir las interfaces?

Las rutas no se agregaron porque las interfaces correspondientes debían estar activas primero. Debería haber visto un mensaje de error como RTNETLINK answers: Network is downo Error: Device for nexthop is not up.si se intentó agregar la ruta en una interfaz inactiva. El código de retorno ( $?) también debería haber sido distinto de cero.

Quiero configurar todas las rutas antes de abrir las interfaces.

Hasta donde yo sé, esto no se puede hacer, ni siquiera con ifconfig. Recuerde que sus ifconfigcomandos en realidad muestran las interfaces antes de agregar las rutas.

Me pregunto qué sorpresas vendrán a continuación.

Ojalá ninguno. ipLa separación de preocupaciones tiene mucho sentido sillegar a conocerlo.

Pensé ifconfigy ipéramos compatibles.

Los dos comandos se superponen en cierta medida, pero no son intercambiables.

información relacionada