Configuración de red en Linux — ejercicios con la ficha de la estación, órdenes de ifconfig traducidas y un ifcfg generado (y el /32 que dejó sola a la tarjeta)

En el examen práctico de redes teníamos que configurar la estación copiando las órdenes de los apuntes. Escribí ip addr add 10.110.7.4 dev enp2s0, encendí la tarjeta, ping a la pasarela… Network is unreachable. Revisé la IP diez veces: estaba bien. Lo que faltaba eran tres caracteres: /24. La lección: en red, lo que no escribes también cuenta; sin máscara, la tarjeta se cree sola en el mundo.

Estos ejercicios cierran el tema después de la teoría y la práctica. Se hacen en el mismo laboratorio aislado (estación, pasarela 10.110.7.1 y router 10.110.1.1), como root salvo donde se indica.

Cómo usar este artículo

  1. Lee el enunciado y la salida esperada.
  2. Resuélvelo en una máquina de prácticas o virtual (nunca en tu portátil) sin mirar la solución. Si te atascas, abre la pista.
  3. Antes de las soluciones, haz los tres fragmentos de «¿Qué falla aquí?»: predice el error.
  4. Compara con mis órdenes. Lo que cuenta es que la salida coincida y que sepas explicar cada línea.

Nivel 1: la ficha de la estación

La estación ya está configurada. Con cuatro órdenes que solo miran, saca su MAC, su IP con prefijo, su puerta de enlace y el primer servidor DNS.

Salida esperada (la MAC y el número tras @if saldrán distintos en tu máquina):

# ip -br link show enp2s0
enp2s0@if21      UP             08:00:27:a1:07:04 <BROADCAST,MULTICAST,UP,LOWER_UP> 
# ip -br addr show enp2s0
enp2s0@if21      UP             10.110.7.4/24 
# ip route show default
default via 10.110.7.1 dev enp2s0 
# head -1 /etc/resolv.conf
nameserver 193.145.147.22

-br también vale con link, y tanto ip addr como ip link aceptan show <tarjeta>. Para el DNS, la primera línea de un archivo de /etc.

Nivel 2: de ifconfig a ip

En unos apuntes antiguos aparecen estas órdenes para configurar la estación con la IP 10.110.7.5:

ifconfig enp2s0 up
ifconfig enp2s0 10.110.7.5 netmask 255.255.255.0 broadcast 10.110.7.255
route add default gw 10.110.7.1

Tradúcelas a ip (incluida la dirección de difusión), aplícalas a la estación recién encendida y comprueba el resultado con ip addr show enp2s0, con la orden vieja route -n y con un ping de 2 paquetes al router.

Salida esperada (de las comprobaciones):

# ip link set enp2s0 up
# ip addr add 10.110.7.5/24 brd + dev enp2s0
# ip route add default via 10.110.7.1
# ip addr show enp2s0
26: enp2s0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:a1:07:04 brd ff:ff:ff:ff:ff:ff link-netns pasarela
    inet 10.110.7.5/24 brd 10.110.7.255 scope global enp2s0
       valid_lft forever preferred_lft forever
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.110.7.1      0.0.0.0         UG    0      0        0 enp2s0
10.110.7.0      0.0.0.0         255.255.255.0   U     0      0        0 enp2s0
# ping -c 2 10.110.1.1
PING 10.110.1.1 (10.110.1.1) 56(84) bytes of data.
64 bytes from 10.110.1.1: icmp_seq=1 ttl=63 time=0.233 ms
64 bytes from 10.110.1.1: icmp_seq=2 ttl=63 time=0.068 ms

--- 10.110.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 0.068/0.150/0.233/0.082 ms

/24 sustituye a netmask 255.255.255.0, y brd + le pide a ip que calcule la difusión por ti.

Nivel 3: genera el ifcfg de lo que hay

Has configurado una estación a mano con ip y funciona. Antes de que un reinicio lo borre todo, escribe un script ficha-ifcfg.sh que, dado el nombre de la tarjeta, imprima el ifcfg que reproduciría la configuración actual (DEVICE, BOOTPROTO=none, ONBOOT=yes, IPADDR, NETMASK con la máscara escrita entera y GATEWAY solo si hay ruta por defecto).

Salida esperada, con la estación configurada:

# ./ficha-ifcfg.sh enp2s0 > ifcfg-generado
# cat -n ifcfg-generado
     1	DEVICE=enp2s0
     2	BOOTPROTO=none
     3	ONBOOT=yes
     4	IPADDR=10.110.7.4
     5	NETMASK=255.255.255.0
     6	GATEWAY=10.110.7.1

ip -br -4 addr show dev enp2s0 da una línea cuya tercera columna es 10.110.7.4/24. ${cidr%/*} y ${cidr#*/} la parten por la barra. Para pasar de 24 a 255.255.255.0, recorre los cuatro bytes restando 8 bits cada vez.

¿Qué falla aquí?

Tres fragmentos sobre la estación recién encendida. Antes de leer la explicación, predice qué saldrá.

Fragmento 1: la IP sin máscara

ip link set enp2s0 up
ip addr add 10.110.7.4 dev enp2s0        # sin /24
ip -br addr
ip route
ping -c 1 10.110.7.1

Predice: ¿contesta la pasarela?

# ip link set enp2s0 up
# ip addr add 10.110.7.4 dev enp2s0
# ip -br addr
lo               UNKNOWN        127.0.0.1/8 
enp2s0@if9       UP             10.110.7.4/32 
# ip route
# ping -c 1 10.110.7.1
ping: connect: Network is unreachable
# ip addr del 10.110.7.4/32 dev enp2s0
# ip addr add 10.110.7.4/24 dev enp2s0
# ping -c 1 10.110.7.1
PING 10.110.7.1 (10.110.7.1) 56(84) bytes of data.
64 bytes from 10.110.7.1: icmp_seq=1 ttl=64 time=0.822 ms

--- 10.110.7.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.822/0.822/0.822/0.000 ms

Network is unreachable, y ip route sale vacío. ip -br addr lo delata: 10.110.7.4/32. Sin prefijo, ip usa /32, una red de una sola dirección: la propia estación. Al no haber ninguna otra dirección en «su red», el núcleo no crea la ruta 10.110.7.0/24, y la pasarela .1 queda fuera de todo camino conocido.

Qué cubre una IP con /32 y con /24Con /32 la red es una sola dirección, 10.110.7.4, y la pasarela 10.110.7.1 queda fuera. Con /24 la red abarca de 10.110.7.0 a 10.110.7.255 e incluye a la pasarela.10.110.7.4/32 (sin máscara)mi red: solo yo.1 pasarela.4 yo.255la pasarela .1 queda FUERA → no hay ruta → Network is unreachable10.110.7.4/24mi red: 256 direcciones.1 pasarela.4 yo.255la pasarela .1 está DENTRO → ruta 10.110.7.0/24 → contesta
Sin /24, ip addr add pone /32: la tarjeta se cree sola en el mundo.

Copiar ip addr add 192.168.2.2 dev enp2s0 de una chuleta. Funciona sin error… y deja la tarjeta en /32. Escribe siempre el prefijo.

El arreglo está en las tres últimas órdenes de la sesión: quitar la IP con su /32 (así se llama ahora) y ponerla con /24. El ping contesta.

Fragmento 2: la tarjeta que nadie encendió

ip addr add 10.110.7.4/24 dev enp2s0     # IP bien puesta…
ping -c 1 10.110.7.1                     # …pero ¿y la tarjeta?

Predice: la IP está bien puesta, con su /24. ¿Contesta la pasarela?

# ip addr add 10.110.7.4/24 dev enp2s0
# ping -c 1 10.110.7.1
ping: connect: Network is unreachable
# ip -br addr
lo               UNKNOWN        127.0.0.1/8 
enp2s0@if13      DOWN           10.110.7.4/24 
# ip route
# ip link set enp2s0 up
# ping -c 1 10.110.7.1
PING 10.110.7.1 (10.110.7.1) 56(84) bytes of data.
64 bytes from 10.110.7.1: icmp_seq=1 ttl=64 time=0.681 ms

--- 10.110.7.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.681/0.681/0.681/0.000 ms

Tampoco: Network is unreachable. ip -br addr enseña la IP correcta junto a DOWN, e ip route está vacío. Una tarjeta apagada no tiene rutas, por bien puesta que esté la IP. En cuanto se enciende con ip link set enp2s0 up, el núcleo crea la ruta y la pasarela contesta.

Ante Network is unreachable, mira ip -br addr y busca dos cosas: UP y el prefijo. Son los dos fragmentos más frecuentes en el aula.

Fragmento 3: el router como puerta de enlace

ip link set enp2s0 up
ip addr add 10.110.7.4/24 dev enp2s0
ip route add default via 10.110.1.1      # la IP del router como puerta de enlace

Predice: el router 10.110.1.1 es quien da salida al resto del aula. ¿Vale como puerta de enlace?

# ip link set enp2s0 up
# ip addr add 10.110.7.4/24 dev enp2s0
# ip route add default via 10.110.1.1
Error: Nexthop has invalid gateway.
# ip route add default via 10.110.7.1
# ping -c 1 10.110.1.1
PING 10.110.1.1 (10.110.1.1) 56(84) bytes of data.
64 bytes from 10.110.1.1: icmp_seq=1 ttl=63 time=0.377 ms

--- 10.110.1.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.377/0.377/0.377/0.000 ms

Error: Nexthop has invalid gateway. La puerta de enlace es el primer salto y tiene que estar en tu red, alcanzable sin ayuda. El router está en 10.110.1.0/24, detrás de la pasarela, así que la estación no puede entregarle nada directamente. Con via 10.110.7.1 (la pasarela) la ruta se acepta y el router contesta con ttl=63: ha habido un salto intermedio.

Por qué el router no puede ser la puerta de enlace de la estaciónDesde la estación, con 10.110.7.4/24, solo se alcanza directamente la red 10.110.7.0/24. La pasarela 10.110.7.1 está en ella; el router 10.110.1.1 no, y por eso ip rechaza la ruta.La puerta de enlace tiene que estar en TU redEstación 10.110.7.4/2410.110.7.1 (pasarela): directa  10.110.1.1 (router): tras la pasarela  Error: Nexthop has invalid gateway.
La puerta de enlace es el primer salto: si para llegar a ella ya necesitas otra puerta de enlace, no vale.

Antes de añadir una puerta de enlace, ip route get <IP del gateway>: si la respuesta lleva via, esa IP no está en tu red y no te vale.

Soluciones

Solución del Nivel 1

# @lab conf
ip -br link show enp2s0                  # la MAC
ip -br addr show enp2s0                  # la IP y el prefijo
ip route show default                    # la puerta de enlace
head -1 /etc/resolv.conf                 # el primer servidor DNS

Salida:

# ip -br link show enp2s0
enp2s0@if21      UP             08:00:27:a1:07:04 <BROADCAST,MULTICAST,UP,LOWER_UP> 
# ip -br addr show enp2s0
enp2s0@if21      UP             10.110.7.4/24 
# ip route show default
default via 10.110.7.1 dev enp2s0 
# head -1 /etc/resolv.conf
nameserver 193.145.147.22

Por qué está hecho así:

  • ip -br link show enp2s0 da la MAC en la tercera columna (08:00:27:a1:07:04), sin las líneas de más de ip link.
  • ip -br addr show enp2s0 da la IP con prefijo en una línea: 10.110.7.4/24.
  • ip route show default filtra solo la ruta por defecto: la tercera palabra es la puerta de enlace.
  • head -1 /etc/resolv.conf toma la primera línea: el DNS que se pregunta primero. Si el archivo empezara con un comentario, grep -m1 nameserver /etc/resolv.conf sería más seguro.

Solución del Nivel 2

# @lab base
ip link set enp2s0 up                            # ifconfig enp2s0 up
ip addr add 10.110.7.5/24 brd + dev enp2s0       # ifconfig enp2s0 10.110.7.5 netmask 255.255.255.0 broadcast 10.110.7.255
ip route add default via 10.110.7.1              # route add default gw 10.110.7.1
ip addr show enp2s0
route -n                                         # comprobación con la orden vieja
ping -c 2 10.110.1.1

Salida:

# ip link set enp2s0 up
# ip addr add 10.110.7.5/24 brd + dev enp2s0
# ip route add default via 10.110.7.1
# ip addr show enp2s0
26: enp2s0@if25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:a1:07:04 brd ff:ff:ff:ff:ff:ff link-netns pasarela
    inet 10.110.7.5/24 brd 10.110.7.255 scope global enp2s0
       valid_lft forever preferred_lft forever
# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.110.7.1      0.0.0.0         UG    0      0        0 enp2s0
10.110.7.0      0.0.0.0         255.255.255.0   U     0      0        0 enp2s0
# ping -c 2 10.110.1.1
PING 10.110.1.1 (10.110.1.1) 56(84) bytes of data.
64 bytes from 10.110.1.1: icmp_seq=1 ttl=63 time=0.233 ms
64 bytes from 10.110.1.1: icmp_seq=2 ttl=63 time=0.068 ms

--- 10.110.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1004ms
rtt min/avg/max/mdev = 0.068/0.150/0.233/0.082 ms

Por qué está hecho así:

  • ip link set enp2s0 up es el ifconfig enp2s0 up de siempre.
  • La IP, la máscara y la difusión van en una orden: 10.110.7.5/24 y brd +. Ahora la línea inet sí tiene brd 10.110.7.255: es la última dirección de la red (.0 a .255, la última es .255).
  • route add default gw se convierte en ip route add default via.
  • route -n sirve de comprobación cruzada: la tabla tiene la ruta por defecto (0.0.0.0 hacia 10.110.7.1, flags UG: activa y por gateway) y la de la red (10.110.7.0, máscara 255.255.255.0, flag U). Las dos herramientas leen la misma tabla del núcleo.
  • El ping al router contesta 2 de 2 con ttl=63.

Solución del Nivel 3

#!/bin/bash
# ficha-ifcfg.sh: escribe el ifcfg que reproduciría la configuración que la tarjeta tiene AHORA
# Uso: ./ficha-ifcfg.sh enp2s0 > ifcfg-generado
dev=$1
cidr=$(ip -br -4 addr show dev "$dev" | awk '{print $3}')   # tercera columna: 10.110.7.4/24
ip=${cidr%/*}                                               # lo de antes de la barra
p=${cidr#*/}                                                # lo de después de la barra
gw=$(ip route show default | awk '{print $3}')              # "default via 10.110.7.1 dev …": tercera palabra

mascara() {                          # 24 -> 255.255.255.0: cuatro bytes, cada uno con hasta 8 bits a 1
    local p=$1 m="" i b
    for i in 1 2 3 4; do
        if [ "$p" -ge 8 ]; then b=255; p=$((p - 8))   # byte lleno
        else b=$((256 - 2 ** (8 - p))); p=0           # byte a medias (o 0 si ya no quedan bits)
        fi
        m="$m$b"; [ $i -lt 4 ] && m="$m."
    done
    echo "$m"
}

echo "DEVICE=$dev"
echo "BOOTPROTO=none"
echo "ONBOOT=yes"
echo "IPADDR=$ip"
echo "NETMASK=$(mascara "$p")"
[ -n "$gw" ] && echo "GATEWAY=$gw"   # sin ruta por defecto, no se escribe la línea

La sesión:

# @lab conf
./ficha-ifcfg.sh enp2s0 > ifcfg-generado
cat -n ifcfg-generado

Salida:

# ./ficha-ifcfg.sh enp2s0 > ifcfg-generado
# cat -n ifcfg-generado
     1	DEVICE=enp2s0
     2	BOOTPROTO=none
     3	ONBOOT=yes
     4	IPADDR=10.110.7.4
     5	NETMASK=255.255.255.0
     6	GATEWAY=10.110.7.1

Por qué está hecho así:

  • -4 limita la salida a IPv4 y -br la deja en una línea: enp2s0@if… UP 10.110.7.4/24. awk '{print $3}' toma la tercera columna. Así el script no depende de cuántos espacios ponga ip entre columnas.
  • ${cidr%/*} quita desde la última barra hasta el final (queda la IP) y ${cidr#*/} quita hasta la primera barra (queda el prefijo).
  • ip route show default da default via 10.110.7.1 dev enp2s0: la tercera palabra es la puerta de enlace. Si no hay ruta por defecto, gw queda vacía y la última línea no escribe GATEWAY.
  • El script imprime; la redirección > ifcfg-generado decide dónde se guarda. Así puedes revisar el resultado antes de copiarlo a /etc/sysconfig/network-scripts/.

La función mascara es la inversa de prefijo de la práctica. Traza con p=24:

mascara() {                          # 24 -> 255.255.255.0: cuatro bytes, cada uno con hasta 8 bits a 1
    local p=$1 m="" i b
    for i in 1 2 3 4; do
        if [ "$p" -ge 8 ]; then b=255; p=$((p - 8))   # byte lleno
        else b=$((256 - 2 ** (8 - p))); p=0           # byte a medias (o 0 si ya no quedan bits)
        fi
        m="$m$b"; [ $i -lt 4 ] && m="$m."
    done
    echo "$m"
}
Vuelta ip al entrar¿p ≥ 8?bp al salirm
124sí25516255.
216sí2558255.255.
38sí2550255.255.255.
40no256 − 2⁸ = 00255.255.255.0

Con un prefijo como 26, la cuarta vuelta daría 256 − 2^(8−2) = 256 − 64 = 192: 255.255.255.192. La comprobación [ $i -lt 4 ] evita el punto después del último byte.

Pruébalo en tu terminal

ip route get es la mejor forma de entender las rutas: le das un destino y te dice qué haría el núcleo, sin enviar nada. No necesita ser root. Como usuario normal en la estación:

# @lab conf
# @sergio
ip route get 10.110.7.1                  # en mi red: directo
ip route get 10.110.1.1                  # fuera de mi red: por la pasarela
ip route get 127.0.0.1                   # yo mismo

La sesión real:

$ ip route get 10.110.7.1
10.110.7.1 dev enp2s0 src 10.110.7.4 uid 1001 
    cache 
$ ip route get 10.110.1.1
10.110.1.1 via 10.110.7.1 dev enp2s0 src 10.110.7.4 uid 1001 
    cache 
$ ip route get 127.0.0.1
local 127.0.0.1 dev lo src 127.0.0.1 uid 1001 
    cache <local> 

Qué observar:

  1. Para 10.110.7.1 (la pasarela) no hay via: está en mi red y se entrega directamente por enp2s0.
  2. Para 10.110.1.1 aparece via 10.110.7.1: no es de mi red, así que va a la puerta de enlace.
  3. src 10.110.7.4 es la IP con la que saldría el paquete: la de la tarjeta elegida.
  4. 127.0.0.1 va por lo y es local: nunca sale de la máquina.
  5. En tu ordenador, prueba ip route get 8.8.8.8: verás tu puerta de enlace y por qué tarjeta sales a internet (wlp… si estás con wifi).

Chuletario: configuración de red

Lo esencial en 30 segundos

Para tener red hacen falta tres cosas: la tarjeta up, una IP con prefijo (/24 = 255.255.255.0) y una puerta de enlace dentro de tu red. Con ip se configura al momento (y se pierde al reiniciar); con el ifcfg y ONBOOT=yes queda fija. Los DNS van en /etc/resolv.conf.

Ver

Quiero…OrdenResultado
resumen de tarjetas e IPip -br addrenp2s0 UP 10.110.7.4/24
la MACip -br link08:00:27:a1:07:04
la tabla de rutasip route (o route -n)default via 10.110.7.1 dev enp2s0
qué camino toma un paqueteip route get 10.110.1.1via 10.110.7.1 dev enp2s0 src 10.110.7.4
las MAC aprendidas (ARP)ip neigh10.110.7.1 … lladdr … REACHABLE
los DNScat /etc/resolv.confnameserver 193.145.147.22

Configurar al momento (como root)

Quiero…OrdenResultado
encender la tarjetaip link set enp2s0 upUP,LOWER_UP
poner IP y difusiónip addr add 10.110.7.4/24 brd + dev enp2s0ruta 10.110.7.0/24 automática
puerta de enlaceip route add default via 10.110.7.1
quitar una IP / todasip addr del 10.110.7.4/24 dev enp2s0 / ip addr flush dev enp2s0se van sus rutas
quitar la puerta de enlaceip route del default
probarping -c 3 10.110.7.1ttl=64 en tu red, 63 tras un router

Permanente

ArchivoContenido
/etc/sysconfig/network-scripts/ifcfg-enp2s0DEVICE, BOOTPROTO=none, ONBOOT=yes, IPADDR, NETMASK, GATEWAY
/etc/resolv.confnameserver IP (uno por línea)
aplicarsystemctl restart network (y NetworkManager parado: systemctl stop NetworkManager)

Plantillas de los ejercicios

EjercicioÓrdenes claveResultado
Nivel 1ip -br link show X, ip -br addr show X, ip route show default, head -1 /etc/resolv.confMAC, IP/prefijo, gateway, DNS
Nivel 2ip link set X up; ip addr add IP/24 brd + dev X; ip route add default via GWbrd 10.110.7.255, ping con ttl=63
Nivel 3ip -br -4 addr show dev X | awk '{print $3}', ${cidr%/*}, ${cidr#*/}, función mascaraun ifcfg de 6 líneas

Síntoma / causa probable

SíntomaCausa probable
connect: Network is unreachabletarjeta DOWN, IP sin prefijo (/32) o falta la puerta de enlace
Destination Host Unreachablehay ruta, pero el destino o la puerta de enlace no responde en la red local (¿IP de otra red?)
Error: Nexthop has invalid gateway.la puerta de enlace no está en tu red
RTNETLINK answers: Operation not permittedno eres root: sudo
Error: ipv4: Address already assigned. / RTNETLINK answers: File existsesa IP / esa ruta ya estaba puesta
todo se pierde al reiniciarlo configuraste con ip; pásalo al ifcfg con ONBOOT=yes

Antes de entregar, pregúntate

  1. ¿He hecho ping a algo de mi red y a algo de fuera?
  2. ¿Todas las IP llevan su prefijo?
  3. ¿La puerta de enlace está en mi red (ip route get sin via)?
  4. ¿Lo que tiene que sobrevivir a un reinicio está en el ifcfg con ONBOOT=yes?

Con este tema termina la parte práctica de Linux de IC2. Lo siguiente es la teoría que explica todo lo que acabas de configurar: cómo funcionan las redes por dentro.

Sigue aprendiendoTodos los artículos de Linux

¿Te ha servido este artículo? Así puedes apoyar SergioLearns →

Sigue aprendiendo

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *