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.
Tabla de Contenidos
Cómo usar este artículo
- Lee el enunciado y la salida esperada.
- 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.
- Antes de las soluciones, haz los tres fragmentos de «¿Qué falla aquí?»: predice el error.
- 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.
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.
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 enp2s0da la MAC en la tercera columna (08:00:27:a1:07:04), sin las líneas de más deip link.ip -br addr show enp2s0da la IP con prefijo en una línea:10.110.7.4/24.ip route show defaultfiltra solo la ruta por defecto: la tercera palabra es la puerta de enlace.head -1 /etc/resolv.conftoma la primera línea: el DNS que se pregunta primero. Si el archivo empezara con un comentario,grep -m1 nameserver /etc/resolv.confserí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 upes elifconfig enp2s0 upde siempre.- La IP, la máscara y la difusión van en una orden:
10.110.7.5/24ybrd +. Ahora la líneainetsí tienebrd 10.110.7.255: es la última dirección de la red (.0a.255, la última es.255). route add default gwse convierte enip route add default via.route -nsirve de comprobación cruzada: la tabla tiene la ruta por defecto (0.0.0.0hacia10.110.7.1, flagsUG: activa y por gateway) y la de la red (10.110.7.0, máscara255.255.255.0, flagU). 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í:
-4limita la salida a IPv4 y-brla 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 pongaipentre 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 defaultdadefault via 10.110.7.1 dev enp2s0: la tercera palabra es la puerta de enlace. Si no hay ruta por defecto,gwqueda vacía y la última línea no escribeGATEWAY.- El script imprime; la redirección
> ifcfg-generadodecide 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 i | p al entrar | ¿p ≥ 8? | b | p al salir | m |
|---|---|---|---|---|---|
| 1 | 24 | sí | 255 | 16 | 255. |
| 2 | 16 | sí | 255 | 8 | 255.255. |
| 3 | 8 | sí | 255 | 0 | 255.255.255. |
| 4 | 0 | no | 256 − 2⁸ = 0 | 0 | 255.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:
- Para
10.110.7.1(la pasarela) no hayvia: está en mi red y se entrega directamente porenp2s0. - Para
10.110.1.1aparecevia 10.110.7.1: no es de mi red, así que va a la puerta de enlace. src 10.110.7.4es la IP con la que saldría el paquete: la de la tarjeta elegida.127.0.0.1va porloy eslocal: nunca sale de la máquina.- 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… | Orden | Resultado |
|---|---|---|
| resumen de tarjetas e IP | ip -br addr | enp2s0 UP 10.110.7.4/24 |
| la MAC | ip -br link | 08:00:27:a1:07:04 |
| la tabla de rutas | ip route (o route -n) | default via 10.110.7.1 dev enp2s0 |
| qué camino toma un paquete | ip route get 10.110.1.1 | via 10.110.7.1 dev enp2s0 src 10.110.7.4 |
| las MAC aprendidas (ARP) | ip neigh | 10.110.7.1 … lladdr … REACHABLE |
| los DNS | cat /etc/resolv.conf | nameserver 193.145.147.22 |
Configurar al momento (como root)
| Quiero… | Orden | Resultado |
|---|---|---|
| encender la tarjeta | ip link set enp2s0 up | UP,LOWER_UP |
| poner IP y difusión | ip addr add 10.110.7.4/24 brd + dev enp2s0 | ruta 10.110.7.0/24 automática |
| puerta de enlace | ip route add default via 10.110.7.1 | |
| quitar una IP / todas | ip addr del 10.110.7.4/24 dev enp2s0 / ip addr flush dev enp2s0 | se van sus rutas |
| quitar la puerta de enlace | ip route del default | |
| probar | ping -c 3 10.110.7.1 | ttl=64 en tu red, 63 tras un router |
Permanente
| Archivo | Contenido |
|---|---|
/etc/sysconfig/network-scripts/ifcfg-enp2s0 | DEVICE, BOOTPROTO=none, ONBOOT=yes, IPADDR, NETMASK, GATEWAY |
/etc/resolv.conf | nameserver IP (uno por línea) |
| aplicar | systemctl restart network (y NetworkManager parado: systemctl stop NetworkManager) |
Plantillas de los ejercicios
| Ejercicio | Órdenes clave | Resultado |
|---|---|---|
| Nivel 1 | ip -br link show X, ip -br addr show X, ip route show default, head -1 /etc/resolv.conf | MAC, IP/prefijo, gateway, DNS |
| Nivel 2 | ip link set X up; ip addr add IP/24 brd + dev X; ip route add default via GW | brd 10.110.7.255, ping con ttl=63 |
| Nivel 3 | ip -br -4 addr show dev X | awk '{print $3}', ${cidr%/*}, ${cidr#*/}, función mascara | un ifcfg de 6 líneas |
Síntoma / causa probable
| Síntoma | Causa probable |
|---|---|
connect: Network is unreachable | tarjeta DOWN, IP sin prefijo (/32) o falta la puerta de enlace |
Destination Host Unreachable | hay 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 permitted | no eres root: sudo |
Error: ipv4: Address already assigned. / RTNETLINK answers: File exists | esa IP / esa ruta ya estaba puesta |
| todo se pierde al reiniciar | lo configuraste con ip; pásalo al ifcfg con ONBOOT=yes |
Antes de entregar, pregúntate
- ¿He hecho ping a algo de mi red y a algo de fuera?
- ¿Todas las IP llevan su prefijo?
- ¿La puerta de enlace está en mi red (
ip route getsinvia)? - ¿Lo que tiene que sobrevivir a un reinicio está en el
ifcfgconONBOOT=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 →




El hardware que sostiene al sistema operativo — teoría con la práctica de IC2 en la impresora, una interrupción que lo para todo y una caché que acierta (y el bucle infinito que no colgó mi portátil)