![¿Por qué `ip` e `ifconfig` tienen comportamientos diferentes cuando la interfaz no funciona?](https://rvso.com/image/1604293/%C2%BFPor%20qu%C3%A9%20%60ip%60%20e%20%60ifconfig%60%20tienen%20comportamientos%20diferentes%20cuando%20la%20interfaz%20no%20funciona%3F.png)
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?
- ¿Por qué no
ip route
muestra mis rutas? - ¿Dónde se agregan mis rutas milagrosamente después de abrir mis interfaces? ¿Por qué no puedo verlos antes?
- ¿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 ifconfig
hacerlo. Me pregunto qué sorpresas vendrán a continuación.
Pensé ifconfig
y ip
eran compatibles, el paso de ifconfig a ip no será tan fácil.
Respuesta1
Sus tres preguntas surgen de un malentendido:
ifconfig
con una interfaz y una dirección implica la up
opción, por lo que en su ifconfig
ejemplo, 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
ip
deiproute2organiza 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
).
ifconfig
mezcla 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:
- ¿Por qué no
ip route
muestra mis rutas?
Las rutas no se guardan en la tabla principal si el enlace correspondiente no funciona. Su ip
secuencia de comandos no muestra primero las interfaces involucradas.
- ¿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.
- ¿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 down
o 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 ifconfig
comandos en realidad muestran las interfaces antes de agregar las rutas.
Me pregunto qué sorpresas vendrán a continuación.
Ojalá ninguno. ip
La separación de preocupaciones tiene mucho sentido sillegar a conocerlo.
Pensé
ifconfig
yip
éramos compatibles.
Los dos comandos se superponen en cierta medida, pero no son intercambiables.