# Module 3

## Configuración de Red y Resolución de Problemas

### 🎯 Learning Objectives

After completing this module, you will be able to:

- Configurar interfaces de red con direcciones IP estáticas usando netplan
- Establecer configuración de DNS y gateway predeterminado
- Diagnosticar problemas de conectividad usando herramientas de red
- Analizar rutas de red y tablas de enrutamiento
- Verificar servicios de red activos y puertos en escucha

Click Next → to begin.

## Fundamentos de Redes en Linux

## Arquitectura de Red en Linux

La configuración de red es una habilidad fundamental para cualquier administrador de sistemas Linux. A diferencia de los sistemas operativos de escritorio, donde la conectividad se configura automáticamente, los servidores Linux requieren comprensión profunda de conceptos de red y configuración manual precisa.

Modelo OSI y TCP/IP

Linux implementa el modelo TCP/IP de cuatro capas, que simplifica el modelo OSI de siete capas. Como administrador, trabajarás principalmente con:

- Capa de Enlace: Interfaces físicas y direcciones MAC
- Capa de Internet: Direccionamiento IP y enrutamiento
- Capa de Transporte: Protocolos TCP y UDP
- Capa de Aplicación: Servicios como SSH, HTTP, DNS

Interfaces de Red

En sistemas Linux modernos, las interfaces de red siguen una convención de nomenclatura predecible:

- `ens33`, `ens160`: Interfaces Ethernet en sistemas virtuales
- `enp0s3`, `enp3s0`: Interfaces PCI Ethernet
- `eth0`, `eth1`: Nomenclatura tradicional (menos común en distribuciones modernas)
- `lo`: Interfaz de loopback (127.0.0.1)

Direccionamiento IP

Cada interfaz de red requiere configuración de tres elementos esenciales:

1. Dirección IP: Identificador único en la red (ejemplo: 10.50.30.100)
2. Máscara de subred: Define el rango de red (ejemplo: 255.255.255.0 o /24)
3. Puerta de enlace predeterminada: Router que conecta con otras redes (ejemplo: 10.50.30.1)

Además, la configuración de DNS (servidores de nombres) permite resolver nombres de dominio a direcciones IP, esencial para la conectividad a Internet y servicios corporativos.

Diagrama ilustrado del modelo TCP/IP de cuatro capas con ejemplos de cada nivel: enlace (interfaz ens33), internet (IP 10.50.30.100), transporte (TCP/UDP) y aplicación (SSH, HTTP)

#### 💡 Key Takeaways

- Linux implementa el modelo TCP/IP de cuatro capas
- Las interfaces de red siguen nomenclatura predecible (ens33, enp0s3)
- Tres elementos esenciales: dirección IP, máscara de subred y gateway
- La configuración DNS es crítica para resolución de nombres

## Direccionamiento Estático vs. DHCP

## Métodos de Asignación de Direcciones IP

Existen dos enfoques principales para asignar direcciones IP a interfaces de red en Linux: configuración estática y asignación dinámica mediante DHCP (Dynamic Host Configuration Protocol / Protocolo de Configuración Dinámica de Host).

Configuración DHCP

En entornos con DHCP, un servidor central asigna automáticamente direcciones IP a los clientes cuando se conectan a la red. Esta configuración es ideal para:

- Estaciones de trabajo de usuarios
- Dispositivos móviles y portátiles
- Entornos de prueba y desarrollo
- Redes con alta rotación de dispositivos

Ventajas de DHCP: Configuración automática, gestión centralizada, reasignación eficiente de direcciones IP no utilizadas.

Desventajas de DHCP: Direcciones IP pueden cambiar al reiniciar, dependencia del servidor DHCP, complejidad en resolución de problemas.

Configuración Estática

La asignación estática significa configurar manualmente una dirección IP fija que nunca cambia. Esta configuración es esencial para:

- Servidores de producción: Web, base de datos, aplicaciones
- Dispositivos de red: Routers, switches, puntos de acceso
- Servicios de infraestructura: DNS, DHCP, controladores de dominio
- Sistemas de monitoreo: Herramientas de gestión y supervisión

Ventajas de IP estática: Dirección predecible y constante, no depende de servicios externos, ideal para servicios que otros sistemas necesitan localizar.

Desventajas de IP estática: Configuración manual por cada servidor, riesgo de conflictos de IP si no hay documentación adecuada, mantenimiento más laborioso.

Mejores Prácticas

Como administrador de sistemas, debes:

- Usar IP estática para todos los servidores de producción
- Documentar todas las asignaciones en una hoja de cálculo o IPAM (Gestión de Direcciones IP)
- Reservar rangos específicos para IP estáticas vs. DHCP
- Verificar que no existan conflictos antes de asignar una IP estática

Comparación visual lado a lado de configuración DHCP (izquierda) mostrando servidor DHCP asignando direcciones a múltiples clientes, versus configuración estática (derecha) mostrando servidores con direcciones IP fijas y documentadas

#### 💡 Key Takeaways

- DHCP asigna direcciones automáticamente, ideal para estaciones de trabajo
- IP estática es esencial para servidores y dispositivos de infraestructura
- La IP estática proporciona direcciones predecibles y constantes
- Documentar todas las asignaciones estáticas para evitar conflictos

## Introducción a netplan

## Herramienta de Configuración netplan

Ubuntu y otras distribuciones modernas de Linux utilizan netplan como herramienta estándar para configurar redes. Netplan representa un cambio significativo respecto a métodos anteriores, centralizando la configuración en archivos YAML simples y declarativos.

Arquitectura de netplan

Netplan actúa como una capa de abstracción que traduce archivos de configuración YAML a configuraciones para los backends de red subyacentes:

- NetworkManager: Usado principalmente en sistemas de escritorio
- systemd-networkd: Preferido en servidores y sistemas sin interfaz gráfica

Esta arquitectura permite que la misma sintaxis funcione en diferentes contextos y backends.

Ubicación de Archivos de Configuración

Los archivos de configuración de netplan se almacenan en:

    /etc/netplan/

Generalmente encontrarás un archivo como `00-installer-config.yaml` o `01-netcfg.yaml`. El prefijo numérico determina el orden de procesamiento cuando existen múltiples archivos.

Formato YAML

YAML (YAML Ain't Markup Language / YAML no es un Lenguaje de Marcado) es un formato de serialización de datos legible por humanos. Aspectos críticos:

- Indentación con espacios: YAML usa espacios (NO tabuladores) para estructurar jerarquía
- Sensible a indentación: Cada nivel de anidación requiere exactamente 2 espacios adicionales
- Pares clave-valor: Formato `clave: valor`
- Listas: Usan guión seguido de espacio (`- elemento`)

Estructura Básica de netplan

    network:
      version: 2
      renderer: networkd
      ethernets:
        ens33:
          dhcp4: false
          addresses:
            - 10.50.30.100/24
          routes:
            - to: default
              via: 10.50.30.1
          nameservers:
            addresses:
              - 1.1.1.1
              - 8.8.8.8

La directiva `renderer` especifica qué backend de red usar: `networkd` para systemd-networkd o `NetworkManager` para NetworkManager.

Comandos Esenciales

Después de modificar archivos de configuración:

    sudo netplan try    # Prueba configuración con revocación automática
    sudo netplan apply  # Aplica configuración permanentemente

El comando `netplan try` es especialmente útil en servidores remotos, ya que revierte automáticamente los cambios después de 120 segundos si no confirmas que la configuración funciona.

Diagrama de flujo ilustrado mostrando la arquitectura de netplan: archivo YAML de configuración en la parte superior, netplan en el centro procesando y traduciendo, y dos backends (systemd-networkd y NetworkManager) en la parte inferior aplicando la configuración a las interfaces de red

#### 💡 Key Takeaways

- Netplan centraliza la configuración de red en archivos YAML
- Los archivos se ubican en /etc/netplan/ con prefijos numéricos
- YAML usa indentación de espacios, NO tabuladores
- Usa 'netplan try' antes de 'netplan apply' para evitar bloqueos

## Configuración Avanzada de Red

Configuración de Servidores de Nombres (DNS)

Los servidores de nombres traducen nombres de dominio (como `www.google.com`) a direcciones IP. Sin DNS configurado correctamente, tu servidor puede tener conectividad IP pero no puede resolver nombres.

En netplan, configuras servidores de nombres así:

    nameservers:
      addresses:
        - 1.1.1.1      # Cloudflare DNS primario
        - 8.8.8.8      # Google DNS secundario
      search:
        - miempresa.local

La directiva `search` define dominios de búsqueda para nombres cortos. Por ejemplo, si buscas `servidor1` y tienes `search: miempresa.local`, el sistema intentará resolver `servidor1.miempresa.local`.

Puerta de Enlace Predeterminada y Enrutamiento

La puerta de enlace predeterminada es el router que tu servidor usa para comunicarse con redes externas. En netplan versión 2, se configura mediante routes:

    routes:
      - to: default
        via: 10.50.30.1

Esta configuración indica: "Para cualquier destino que no esté en mi red local, envía el tráfico a 10.50.30.1".

Rutas Estáticas Adicionales

En entornos empresariales complejos, puedes necesitar rutas adicionales:

    routes:
      - to: default
        via: 10.50.30.1
      - to: 172.16.0.0/16
        via: 10.50.30.254
        metric: 100

Esta configuración agrega una ruta específica para la red 172.16.0.0/16 a través de una puerta de enlace diferente.

Archivo /etc/hosts

Antes de consultar DNS, Linux verifica el archivo `/etc/hosts` para resolución local:

    127.0.0.1   localhost
    127.0.1.1   ubuntu-servidor
    10.50.30.100  servidor-web
    10.50.30.101  servidor-bd

Este archivo es útil para:

- Desarrollo y pruebas locales
- Anulación temporal de DNS
- Resolución de nombres en redes sin DNS
- Mejorar rendimiento para hosts frecuentemente accedidos

Prioridad de Resolución

El orden de resolución de nombres está definido en `/etc/nsswitch.conf`:

    hosts: files dns

Esto significa: consultar primero `/etc/hosts` (files), luego DNS.

Ilustración de proceso de resolución de nombres mostrando el flujo: aplicación consulta nombre → verifica /etc/hosts → si no encuentra, consulta servidor DNS (1.1.1.1) → obtiene dirección IP → establece conexión. Incluye el enrutamiento del tráfico a través del gateway predeterminado

#### 💡 Key Takeaways

- DNS traduce nombres de dominio a direcciones IP
- El gateway predeterminado conecta tu red con redes externas
- Rutas estáticas permiten enrutamiento personalizado para redes específicas
- /etc/hosts se consulta antes que DNS para resolución de nombres

## Herramientas de Diagnóstico de Red

## Comandos Esenciales para Troubleshooting

Como administrador de Linux, dominar las herramientas de diagnóstico de red es fundamental para resolver problemas de conectividad rápidamente.

ping - Verificación de Conectividad Básica

El comando `ping` envía paquetes ICMP Echo Request para verificar conectividad:

    ping -c 4 8.8.8.8          # Envía 4 paquetes a Google DNS
    ping -c 4 www.google.com   # Verifica conectividad y resolución DNS

Si `ping 8.8.8.8` funciona pero `ping www.google.com` falla, el problema es DNS, no conectividad.

traceroute y tracepath - Análisis de Ruta

Estas herramientas muestran cada salto (hop) que los paquetes toman hacia el destino:

    traceroute 8.8.8.8
    tracepath www.google.com   # No requiere privilegios root

tracepath es preferible en servidores porque no requiere permisos de superusuario.

ip addr - Información de Interfaces

El comando moderno para ver interfaces de red:

    ip addr show              # Muestra todas las interfaces
    ip addr show ens33        # Muestra solo ens33

Reemplaza al antiguo comando `ifconfig`.

ip route - Tabla de Enrutamiento

Muestra cómo el sistema enruta tráfico:

    ip route show
    ip route get 8.8.8.8      # Muestra ruta específica a un destino

Salida típica:

    default via 10.50.30.1 dev ens33 proto static
    10.50.30.0/24 dev ens33 proto kernel scope link src 10.50.30.100

netstat y ss - Análisis de Conexiones

`ss` es el reemplazo moderno de `netstat`:

    ss -tuln                  # Puertos TCP/UDP en escucha
    ss -tunap                 # Incluye procesos (requiere root)
    netstat -rn               # Tabla de enrutamiento (alternativa a ip route)

Opciones importantes:

- `-t`: TCP
- `-u`: UDP
- `-l`: Listening (escuchando)
- `-n`: Numérico (no resuelve nombres)
- `-p`: Proceso asociado
- `-a`: Todas las conexiones

systemctl status - Verificación de Servicios

Verifica si servicios de red están activos:

    systemctl status systemd-networkd
    systemctl status NetworkManager
    systemctl status ssh

Infografía mostrando cuatro comandos principales de diagnóstico: ping (verificación de conectividad simple), tracepath (ruta multi-salto), ip addr (interfaz con dirección IP), y ss (puertos en escucha). Cada comando con ejemplo visual de su salida

#### 💡 Key Takeaways

- ping verifica conectividad básica, tracepath muestra la ruta completa
- ip addr e ip route reemplazan ifconfig y netstat -rn
- ss es más rápido y moderno que netstat para análisis de puertos
- systemctl status verifica el estado de servicios de red

## Metodología de Resolución de Problemas de Red

Resolver problemas de red requiere un enfoque metódico de abajo hacia arriba, verificando cada capa del modelo de red.

Paso 1: Verificar Configuración Física y de Enlace

Antes de verificar configuración IP, confirma conectividad física:

    ip link show ens33

Busca `state UP`. Si muestra `state DOWN`, la interfaz está desactivada físicamente o desconectada.

Paso 2: Verificar Configuración IP

    ip addr show ens33

Confirma:

- Dirección IP asignada correctamente
- Máscara de subred apropiada (/24, /16, etc.)
- Estado UP en la interfaz

Paso 3: Verificar Puerta de Enlace y Enrutamiento

    ip route show
    ping -c 2 10.50.30.1    # Ping a la puerta de enlace

Si no puedes hacer ping a la puerta de enlace, el problema está en tu red local (configuración incorrecta o problema físico).

Paso 4: Verificar DNS

    cat /etc/resolv.conf    # Verifica servidores de nombres configurados
    ping -c 2 8.8.8.8       # Ping a DNS externo por IP
    ping -c 2 google.com    # Ping por nombre

Si ping por IP funciona pero por nombre falla, DNS no está funcionando.

Paso 5: Verificar Conectividad Externa

    tracepath 8.8.8.8       # Identifica dónde falla la ruta

Si los paquetes fallan en un salto específico, el problema está en ese segmento de red.

Paso 6: Verificar Servicios

    systemctl status systemd-networkd
    ss -tuln | grep :22     # Verifica que SSH esté escuchando

Problemas Comunes y Soluciones

Síntoma | Causa Probable | Solución
--- | --- | ---
No hay IP asignada | DHCP no funciona o config estática incorrecta | Verificar netplan, aplicar config
Ping a puerta de enlace falla | IP o puerta de enlace incorrecta | Verificar ip route, corregir netplan
Ping por IP funciona, por nombre no | DNS no configurado | Agregar servidores de nombres en netplan
Conexión intermitente | Conflicto de IP | Verificar con `arping`, cambiar IP
Todo funciona localmente, no externamente | Puerta de enlace o ruta incorrecta | Verificar ip route

Registro y Documentación

Siempre documenta:

- Síntomas observados
- Comandos ejecutados y sus salidas
- Cambios realizados
- Resultado final

Esto acelera resolución de problemas futura y ayuda al equipo.

Diagrama de flujo de resolución de problemas mostrando metodología paso a paso: verificar enlace físico → verificar IP → verificar gateway → verificar DNS → verificar conectividad externa. Cada paso con comando asociado y criterio de éxito/falla

#### 💡 Key Takeaways

- Usa enfoque de abajo hacia arriba: enlace → IP → gateway → DNS → conectividad externa
- Verifica cada capa sistemáticamente antes de pasar a la siguiente
- Documenta síntomas, comandos y soluciones para referencia futura
- Problemas de DNS se manifiestan cuando ping por IP funciona pero por nombre no

## 🔬 Configuración de Red Estática y Diagnóstico de Conectividad

Objective: Configurar una interfaz de red con dirección IP estática usando netplan, establecer DNS y gateway, y utilizar herramientas de diagnóstico para verificar la conectividad de red

⏱ Estimated time: 45 minutes💻 Platform: Ubuntu 22.04 LTS o superior
Prerequisites:

- Máquina virtual Ubuntu con acceso root o sudo
- Conexión de red activa (inicialmente configurada con DHCP)
- Acceso a terminal
- Editor de texto (nano o vim)
- Permisos de administrador

### Procedures

1 Identificar el nombre de la interfaz de red principal del sistema

Ejecutar el comando `ip addr` para listar todas las interfaces de red disponibles. Identificar la interfaz principal (generalmente `enp0s3`, `ens33`, `eth0`, o similar) que tiene una dirección IP asignada actualmente.

    ip addr show

También puedes usar el comando alternativo:

    ip link show

Anota el nombre exacto de tu interfaz de red principal, ya que lo necesitarás en los siguientes pasos.

✓ Expected Output

    Verás una lista de interfaces. Ejemplo de salida:

    ```
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 08:00:27:3a:52:1f brd ff:ff:ff:ff:ff:ff
        inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
           valid_lft 86395sec preferred_lft 86395sec
    ```

    La interfaz principal en este ejemplo es `enp0s3`.

🔍 Verify: Confirma que puedes ver al menos una interfaz además de `lo` (loopback), y que tiene una dirección IP asignada (línea que comienza con `inet`).
2 Verificar la configuración actual de netplan

Listar los archivos de configuración existentes en el directorio de netplan:

    ls -la /etc/netplan/

Luego, ver el contenido del archivo de configuración actual:

    sudo cat /etc/netplan/*.yaml

Si hay múltiples archivos, examina el que tiene un nombre como `01-netcfg.yaml`, `50-cloud-init.yaml`, o similar.

✓ Expected Output

    Verás uno o más archivos YAML. Ejemplo de contenido con configuración DHCP:

    ```yaml
    network:
      version: 2
      renderer: networkd
      ethernets:
        enp0s3:
          dhcp4: true
    ```

    O si usa cloud-init:

    ```yaml
    network:
      version: 2
      ethernets:
        enp0s3:
          dhcp4: true
          dhcp6: false
    ```

🔍 Verify: Debes poder ver la configuración actual que muestra `dhcp4: true`, indicando que la interfaz está usando DHCP.
3 Crear una copia de respaldo del archivo de configuración actual

Antes de realizar cambios, crea una copia de seguridad del archivo de configuración:

    sudo cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.backup

Si tu archivo tiene un nombre diferente (por ejemplo, `50-cloud-init.yaml`), ajusta el comando según corresponda:

    sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.backup

Verifica que la copia de respaldo se creó correctamente:

    ls -la /etc/netplan/

✓ Expected Output

    Deberías ver el archivo de respaldo listado:

    ```
    total 16
    drwxr-xr-x  2 root root 4096 nov 15 10:30 .
    drwxr-xr-x 95 root root 4096 nov 15 09:15 ..
    -rw-r--r--  1 root root  104 nov 10 08:22 01-netcfg.yaml
    -rw-r--r--  1 root root  104 nov 15 10:30 01-netcfg.yaml.backup
    ```

🔍 Verify: Confirma que ambos archivos (original y backup) aparecen en el listado y tienen el mismo tamaño.
4 Crear un nuevo archivo de configuración netplan con IP estática

Abre el archivo de configuración con un editor de texto. Usaremos nano:

    sudo nano /etc/netplan/01-netcfg.yaml

Borra el contenido actual y reemplázalo con la siguiente configuración (ajusta el nombre de la interfaz según identificaste en el paso 1):

    network:
      version: 2
      renderer: networkd
      ethernets:
        enp0s3:
          dhcp4: no
          addresses:
            - 192.168.1.100/24
          routes:
            - to: default
              via: 192.168.1.1
          nameservers:
            addresses:
              - 8.8.8.8
              - 8.8.4.4

IMPORTANTE: Ajusta los valores según tu red:

- `addresses`: Dirección IP estática que deseas asignar
- `via`: Dirección IP de tu gateway/router
- `nameservers`: Servidores DNS (en este ejemplo usamos Google DNS)

Guarda el archivo presionando `Ctrl+O`, luego `Enter`, y sal con `Ctrl+X`.

✓ Expected Output

    El editor nano mostrará el contenido del archivo. Al guardar, verás un mensaje confirmando la escritura del archivo.

🔍 Verify: Verifica la sintaxis del archivo ejecutando: ```bash sudo netplan try ``` Esto validará la configuración antes de aplicarla definitivamente.
5 Validar la sintaxis del archivo de configuración netplan

Antes de aplicar los cambios, valida que el archivo YAML no tenga errores de sintaxis:

    sudo netplan --debug generate

Este comando generará la configuración sin aplicarla y mostrará cualquier error de sintaxis. Presta especial atención a:

- Indentación correcta (usa espacios, no tabuladores)
- Dos espacios por nivel de indentación
- Formato correcto de listas con guiones

Si encuentras errores, edita el archivo nuevamente con:

    sudo nano /etc/netplan/01-netcfg.yaml

✓ Expected Output

    Si la configuración es correcta, verás mensajes de depuración pero NO mensajes de error. Ejemplo:

    ```
    DEBUG:netplan generated networkd configuration exists, restarting networkd
    DEBUG:no netplan generated NM configuration exists
    DEBUG:device enp0s3 operstate is up, not changing
    ```

    Si hay errores, verás mensajes como:

    ```
    Error in network definition: invalid YAML
    ```

🔍 Verify: El comando debe completarse sin errores. Si hay problemas, revisa la indentación y sintaxis del archivo YAML.
6 Aplicar la configuración de red con tiempo de prueba

Usa el comando `netplan try` para aplicar la configuración temporalmente por 120 segundos. Si algo falla, la configuración se revertirá automáticamente:

    sudo netplan try

El sistema aplicará la configuración y esperará tu confirmación. Si la red funciona correctamente, presiona `Enter` para aceptar los cambios. Si no respondes en 120 segundos, la configuración se revertirá automáticamente.

IMPORTANTE: Antes de presionar Enter, verifica en otra terminal o ventana que puedes hacer ping al gateway:

    ping -c 3 192.168.1.1

Si el ping funciona, presiona `Enter` en la terminal donde ejecutaste `netplan try` para confirmar los cambios.

✓ Expected Output

    Verás un mensaje similar a:

    ```
    Warning: Stopping systemd-networkd.service, but it can still be activated by:
      systemd-networkd.socket
    Do you want to keep these settings?

    Press ENTER before the timeout to accept the new configuration

    Changes will revert in 120 seconds
    ```

    Después de presionar Enter:

    ```
    Configuration accepted.
    ```

🔍 Verify: La configuración debe aplicarse sin errores y la conectividad de red debe mantenerse activa.
7 Verificar la nueva configuración de IP estática

Confirma que la interfaz ahora tiene la dirección IP estática asignada:

    ip addr show enp0s3

También verifica la información completa con:

    ip -4 addr

Este comando muestra solo las direcciones IPv4 de todas las interfaces.

✓ Expected Output

    Deberías ver tu nueva dirección IP estática:

    ```
    2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 08:00:27:3a:52:1f brd ff:ff:ff:ff:ff:ff
        inet 192.168.1.100/24 brd 192.168.1.255 scope global enp0s3
           valid_lft forever preferred_lft forever
    ```

    Nota que la dirección ya no dice `dynamic` y muestra `valid_lft forever`.

🔍 Verify: Confirma que la dirección IP mostrada coincide con la que configuraste en el archivo netplan (192.168.1.100 en este ejemplo).
8 Verificar la tabla de enrutamiento y gateway predeterminado

Verifica que el gateway predeterminado se haya configurado correctamente:

    ip route show

O usa el comando más detallado:

    ip route list

Para ver específicamente solo la ruta predeterminada:

    ip route | grep default

✓ Expected Output

    Deberías ver la tabla de enrutamiento con tu gateway:

    ```
    default via 192.168.1.1 dev enp0s3 proto static
    192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.100
    ```

    La primera línea muestra la ruta predeterminada (default) apuntando a tu gateway (192.168.1.1).
    La segunda línea muestra la red local conectada directamente.

🔍 Verify: Confirma que aparece una línea que comienza con `default via` seguida de la dirección IP de tu gateway.
9 Verificar la configuración de DNS

Verifica que los servidores DNS se hayan configurado correctamente. En Ubuntu moderno, revisa el archivo de configuración de systemd-resolved:

    sudo systemd-resolve --status

O el comando más reciente:

    resolvectl status

También puedes verificar el archivo de resolución:

    cat /etc/resolv.conf

✓ Expected Output

    Con `resolvectl status` verás información detallada de DNS:

    ```
    Global:
           Protocols: +LLMNR +mDNS -DNSOverTLS DNSSEC=no/unsupported
    resolv.conf mode: stub

    Link 2 (enp0s3):
        Current Scopes: DNS
             Protocols: +DefaultRoute +LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
    Current DNS Server: 8.8.8.8
           DNS Servers: 8.8.8.8 8.8.4.4
    ```

    El archivo `/etc/resolv.conf` típicamente mostrará:

    ```
    nameserver 127.0.0.53
    options edns0 trust-ad
    search .
    ```

    Esto es normal, ya que systemd-resolved actúa como proxy DNS local.

🔍 Verify: Confirma que los servidores DNS que configuraste (8.8.8.8 y 8.8.4.4) aparecen en la sección de tu interfaz de red.
10 Probar la conectividad de red básica con ping

Verifica la conectividad de red en varios niveles:

1. Ping al gateway local:

    ping -c 4 192.168.1.1

2. Ping a un servidor DNS público:

    ping -c 4 8.8.8.8

3. Ping a un nombre de dominio (verifica DNS):

    ping -c 4 www.google.com

La opción `-c 4` limita el ping a 4 paquetes.

✓ Expected Output

    Para cada comando, deberías ver una salida exitosa:

    ```
    PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
    64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.584 ms
    64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.821 ms
    64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.756 ms
    64 bytes from 192.168.1.1: icmp_seq=4 ttl=64 time=0.698 ms

    --- 192.168.1.1 ping statistics ---
    4 packets transmitted, 4 received, 0% packet loss, time 3068ms
    rtt min/avg/max/mdev = 0.584/0.714/0.821/0.089 ms
    ```

    El valor clave es `0% packet loss`, que indica conectividad exitosa.

🔍 Verify: Los tres comandos de ping deben completarse exitosamente con 0% de pérdida de paquetes. Si el tercer ping falla, hay un problema con DNS.
11 Diagnosticar la ruta de red con traceroute

Usa `traceroute` para ver la ruta que toman los paquetes hacia un destino externo. Primero, instala la herramienta si no está disponible:

    sudo apt update
    sudo apt install traceroute -y

Luego ejecuta traceroute hacia un servidor externo:

    traceroute -n www.google.com

La opción `-n` evita la resolución DNS inversa, haciendo el comando más rápido.

Alternativamente, usa `tracepath` que está preinstalado:

    tracepath www.google.com

✓ Expected Output

    Verás una lista de saltos (hops) desde tu sistema hasta el destino:

    ```
    traceroute to www.google.com (142.250.185.36), 30 hops max, 60 byte packets
     1  192.168.1.1  0.823 ms  0.796 ms  0.781 ms
     2  10.0.0.1  5.432 ms  5.412 ms  5.398 ms
     3  172.16.0.1  12.234 ms  12.198 ms  12.165 ms
     4  142.250.185.36  18.567 ms  18.542 ms  18.523 ms
    ```

    Cada línea representa un salto, mostrando la dirección IP y los tiempos de respuesta.

🔍 Verify: El primer salto debe ser tu gateway (192.168.1.1 en este ejemplo). Si ves asteriscos (*), algunos routers no responden a traceroute, pero esto es normal.
12 Verificar puertos de red abiertos y servicios en escucha

Usa el comando `ss` (socket statistics) para ver qué servicios están escuchando en tu sistema:

Ver todos los puertos TCP en escucha:

    sudo ss -tlnp

Ver todos los puertos UDP:

    sudo ss -ulnp

Ver todos los puertos (TCP y UDP):

    sudo ss -tulnp

Opciones:

- `-t`: TCP
- `-u`: UDP
- `-l`: Sockets en escucha (listening)
- `-n`: Muestra números de puerto en lugar de nombres de servicio
- `-p`: Muestra el proceso que usa el socket

Alternativamente, usa el comando tradicional `netstat`:

    sudo netstat -tulnp

✓ Expected Output

    Verás una tabla con servicios en escucha:

    ```
    State    Recv-Q   Send-Q   Local Address:Port   Peer Address:Port   Process
    LISTEN   0        128      0.0.0.0:22          0.0.0.0:*           users:(("sshd",pid=1234,fd=3))
    LISTEN   0        128      127.0.0.53%lo:53    0.0.0.0:*           users:(("systemd-resolve",pid=567,fd=12))
    LISTEN   0        128      [::]:22             [::]:*              users:(("sshd",pid=1234,fd=4))
    ```

    En este ejemplo:
    - Puerto 22: SSH escuchando en todas las interfaces
    - Puerto 53: DNS local (systemd-resolved) solo en loopback

🔍 Verify: Deberías ver al menos el servicio systemd-resolved en el puerto 53 (127.0.0.53). Si SSH está habilitado, verás el puerto 22.
13 Agregar una entrada al archivo /etc/hosts para resolución local

Edita el archivo `/etc/hosts` para agregar una entrada de resolución local:

    sudo nano /etc/hosts

Agrega la siguiente línea al final del archivo:

    192.168.1.50    servidor-web.local    servidor-web

Esto permite resolver `servidor-web.local` o `servidor-web` a la IP `192.168.1.50` sin consultar DNS.

Guarda el archivo con `Ctrl+O`, `Enter`, y sal con `Ctrl+X`.

Verifica el contenido del archivo:

    cat /etc/hosts

✓ Expected Output

    El archivo `/etc/hosts` debería verse así:

    ```
    127.0.0.1       localhost
    127.0.1.1       ubuntu-vm
    192.168.1.50    servidor-web.local    servidor-web

    ::1     ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    ```

🔍 Verify: Prueba la resolución con: ```bash ping -c 2 servidor-web.local ``` Debe intentar hacer ping a 192.168.1.50, aunque la máquina no exista.
14 Verificar el estado del servicio de red systemd-networkd

Verifica que el servicio de red está funcionando correctamente:

    sudo systemctl status systemd-networkd

Para ver más detalles sobre la configuración y eventos recientes:

    sudo journalctl -u systemd-networkd -n 50

Este comando muestra las últimas 50 líneas del registro del servicio de red.

También verifica el servicio de resolución DNS:

    sudo systemctl status systemd-resolved

✓ Expected Output

    Para systemd-networkd:

    ```
    ● systemd-networkd.service - Network Configuration
         Loaded: loaded (/lib/systemd/system/systemd-networkd.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2024-11-15 10:45:23 UTC; 15min ago
           Docs: man:systemd-networkd.service(8)
       Main PID: 567 (systemd-network)
         Status: "Processing requests..."
          Tasks: 1 (limit: 2234)
         Memory: 2.1M
            CPU: 45ms
         CGroup: /system.slice/systemd-networkd.service
                 └─567 /lib/systemd/systemd-networkd
    ```

    La línea clave es `Active: active (running)`, que indica que el servicio está funcionando.

🔍 Verify: Ambos servicios (systemd-networkd y systemd-resolved) deben mostrar estado `active (running)` en verde.
15 Realizar prueba final de conectividad y documentar la configuración

Ejecuta una serie de comandos para documentar tu configuración final:

1. Información de interfaces:

    ip addr show > ~/configuracion-red.txt

2. Tabla de enrutamiento:

    ip route >> ~/configuracion-red.txt

3. Configuración DNS:

    resolvectl status >> ~/configuracion-red.txt

4. Archivo de configuración netplan:

    echo "\n=== Configuración Netplan ===" >> ~/configuracion-red.txt
    sudo cat /etc/netplan/01-netcfg.yaml >> ~/configuracion-red.txt

5. Prueba de conectividad:

    echo "\n=== Prueba de Conectividad ===" >> ~/configuracion-red.txt
    ping -c 4 www.google.com >> ~/configuracion-red.txt 2>&1

Revisa el archivo completo:

    cat ~/configuracion-red.txt

✓ Expected Output

    Se creará un archivo `configuracion-red.txt` en tu directorio home con toda la información de red consolidada. Al ejecutar `cat`, verás todo el contenido del archivo mostrando tu configuración completa de red.

🔍 Verify: Verifica que el archivo existe y contiene información: ```bash ls -lh ~/configuracion-red.txt wc -l ~/configuracion-red.txt ``` El archivo debe tener al menos 50 líneas de contenido.

### ⚠️ Troubleshooting

Al ejecutar `netplan apply` pierdo la conectividad de red y no puedo recuperarla

Esto suele ocurrir cuando la configuración de red tiene errores o la dirección IP/gateway son incorrectos. Si creaste un backup, restaura la configuración anterior:

    sudo cp /etc/netplan/01-netcfg.yaml.backup /etc/netplan/01-netcfg.yaml
    sudo netplan apply

Por esto es importante usar `sudo netplan try` en lugar de `netplan apply` durante las pruebas, ya que se revierte automáticamente después de 120 segundos.

Si estás trabajando en una máquina virtual, puedes reiniciar la VM para recuperar la configuración DHCP anterior si no hiciste backup.

Error: 'Invalid YAML' al ejecutar netplan generate o netplan apply

Los archivos YAML son sensibles a la indentación. Verifica que:

1. Usas ESPACIOS, nunca tabuladores
2. Cada nivel de indentación tiene exactamente 2 espacios
3. Las listas con guiones (-) están correctamente alineadas
4. No hay espacios al final de las líneas

Ejecuta el validador de sintaxis YAML:

    sudo netplan --debug generate

Para verificar espacios vs. tabuladores:

    cat -A /etc/netplan/01-netcfg.yaml

Los tabuladores aparecerán como `^I`. Si los ves, reemplázalos con espacios. Puedes usar el comando:

    sudo sed -i 's/\t/  /g' /etc/netplan/01-netcfg.yaml

Ping al gateway funciona pero no puedo hacer ping a Internet (8.8.8.8 o www.google.com)

Esto indica un problema con el gateway o la configuración de rutas. Verifica:

1. Que el gateway configurado es correcto:

    ip route | grep default

2. Que puedes hacer ping al gateway:

    ping -c 3 192.168.1.1

3. Si el gateway está correcto pero no hay Internet, el problema puede estar en el router/gateway mismo, no en tu configuración Linux.

4. Verifica que la configuración de netplan tiene la sección `routes` correctamente formateada:

    routes:
      - to: default
        via: 192.168.1.1

Nota: en versiones antiguas de netplan se usaba `gateway4` en lugar de `routes`. Si tu versión no soporta `routes`, prueba:

    gateway4: 192.168.1.1

La resolución DNS no funciona (ping a IP funciona, pero ping a dominios falla)

Verifica la configuración de DNS:

1. Comprueba que los servidores DNS están configurados:

    resolvectl status enp0s3

2. Si no aparecen servidores DNS, verifica tu archivo netplan:

    sudo cat /etc/netplan/01-netcfg.yaml

Asegúrate de que la sección nameservers esté correctamente indentada:

    nameservers:
      addresses:
        - 8.8.8.8
        - 8.8.4.4

3. Reinicia el servicio de resolución:

    sudo systemctl restart systemd-resolved

4. Prueba la resolución manualmente:

    nslookup www.google.com

5. Si systemd-resolved no está funcionando:

    sudo systemctl status systemd-resolved

Si está inactivo:

    sudo systemctl enable systemd-resolved
    sudo systemctl start systemd-resolved

El comando 'ss' o 'ip' no muestran la información esperada o dan errores de permisos

Algunos comandos de red requieren privilegios de root para mostrar información completa:

1. Para ver todos los procesos asociados a sockets, usa sudo:

    sudo ss -tulnp

2. Si el comando `ss` no está disponible, instala el paquete iproute2:

    sudo apt update
    sudo apt install iproute2

3. Si prefieres usar `netstat` (comando legacy pero aún útil):

    sudo apt install net-tools
    sudo netstat -tulnp

4. Para verificar que los paquetes de red están instalados:

    dpkg -l | grep iproute2
    dpkg -l | grep net-tools

5. Si los comandos de red básicos no funcionan, puede haber un problema con las variables de entorno:

    echo $PATH

Asegúrate de que `/usr/sbin` y `/sbin` estén en el PATH.

### 🏆 Configuración de Red Dual con Segmentación

Apply what you learned — complete this task without step-by-step guidance.

Objetivo: Configurar dos interfaces de red con diferentes segmentos de red y reglas de enrutamiento específicas.

Escenario: Tu servidor Linux necesita conectarse a dos redes diferentes:

- Red de Gestión: 10.10.10.0/24 (para administración)
- Red de Producción: 192.168.100.0/24 (para servicios)

Tareas a realizar:

1. Identificar o crear una segunda interfaz de red en tu sistema (puede ser una interfaz virtual o física si tu VM tiene múltiples adaptadores)

2. Configurar ambas interfaces con IPs estáticas usando netplan:

   - Primera interfaz: 10.10.10.50/24 con gateway 10.10.10.1
   - Segunda interfaz: 192.168.100.50/24 sin gateway predeterminado

3. Establecer que la Red de Gestión (10.10.10.0/24) sea la ruta predeterminada para el tráfico saliente a Internet

4. Agregar una ruta estática específica para que todo el tráfico destinado a la red 172.16.0.0/16 use la interfaz de producción con gateway 192.168.100.1

5. Configurar diferentes servidores DNS para cada interfaz:

   - Red de Gestión: Usar DNS público (8.8.8.8, 1.1.1.1)
   - Red de Producción: Usar DNS privado (supongamos 192.168.100.10)

6. Crear entradas en /etc/hosts para simular recursos internos:

   - `servidor-db.interno` apuntando a 192.168.100.20
   - `servidor-admin.interno` apuntando a 10.10.10.20

7. Verificar la configuración usando los comandos aprendidos:

   - Confirmar que ambas interfaces tienen sus IPs correctas
   - Validar que la tabla de enrutamiento muestra la ruta predeterminada y la ruta estática
   - Probar conectividad a ambas redes (si tienes máquinas en esas redes, o simular con entradas en /etc/hosts)
   - Verificar que la resolución DNS funciona para dominios públicos

8. Documentar tu configuración creando un archivo `configuracion-dual-nic.txt` que contenga:

   - El contenido de tu archivo netplan
   - Salida de `ip addr`
   - Salida de `ip route show table all`
   - Salida de `resolvectl status`

Pistas:

- Investiga la sintaxis de netplan para múltiples interfaces
- Busca cómo definir rutas estáticas específicas usando la clave `routes` con `to` y `via`
- Considera usar métricas de ruta (`metric`) si necesitas priorizar una interfaz sobre otra
- Recuerda probar con `netplan try` antes de aplicar definitivamente

Resultado esperado: Un sistema con dos interfaces de red completamente configuradas, con enrutamiento diferenciado y capacidad de llegar a redes distintas según reglas específicas.

Validación adicional (opcional): Si tienes acceso a otras VMs o contenedores, crea máquinas virtuales en las redes correspondientes para probar conectividad real entre segmentos.

I have completed this lab exercise

## 📝 Knowledge Check

Test your understanding of the material covered in this module. Select the best answer for each question.

#### Question 1

¿Cuál es la ventaja principal de usar direcciones IP estáticas en servidores de producción?

A) La dirección IP permanece constante y predecible, facilitando que otros sistemas localicen el servidor B) Las direcciones estáticas son más rápidas que las asignadas por DHCP C) No requieren configuración de gateway predeterminado D) Se configuran automáticamente sin intervención del administrador

#### Question 2

En un archivo de configuración de netplan, ¿qué indica la siguiente línea? ```yaml dhcp4: false ```

A) Deshabilita IPv4 completamente en la interfaz B) Indica que la interfaz usará configuración IP estática en lugar de DHCP C) Configura la interfaz para usar solo IPv6 D) Desactiva la interfaz de red

#### Question 3

¿Cuál es el propósito del comando `netplan try` antes de aplicar una nueva configuración de red?

A) Verifica la sintaxis YAML del archivo de configuración únicamente B) Aplica la configuración temporalmente y la revierte automáticamente si no se confirma, previniendo bloqueos en servidores remotos C) Crea un respaldo de la configuración actual D) Reinicia todos los servicios de red sin aplicar cambios

#### Question 4

Si el comando `ping 8.8.8.8` funciona correctamente, pero `ping www.google.com` falla, ¿cuál es el problema más probable?

A) No hay conectividad a Internet B) El gateway predeterminado está configurado incorrectamente C) La configuración de DNS (nameservers) no está funcionando correctamente D) La interfaz de red está desactivada

#### Question 5

¿Qué archivo se consulta PRIMERO cuando Linux intenta resolver un nombre de dominio a una dirección IP?

A) /etc/resolv.conf B) /etc/nsswitch.conf C) /etc/hosts D) /etc/netplan/*.yaml

#### Question 6

¿Cuál comando muestra ÚNICAMENTE los puertos TCP y UDP que están en estado de escucha (listening) en el sistema?

A) ip addr show B) ss -tuln C) ping -c 4 localhost D) tracepath 127.0.0.1

#### Question 7

En la siguiente configuración de netplan, ¿qué representa `10.50.30.1`? ```yaml routes: - to: default via: 10.50.30.1 ```

A) La dirección IP del servidor DNS primario B) La dirección IP del servidor DHCP C) La dirección IP del gateway predeterminado (default gateway) D) La dirección IP de broadcast de la red

#### Question 8

¿Cuál es el comando más apropiado para verificar la ruta que toman los paquetes desde tu servidor hasta un destino externo, SIN requerir privilegios de root?

A) ping -c 10 destino B) traceroute destino C) tracepath destino D) ip route get destino

## 🎯 Module Summary

Este módulo cubrió la configuración de red en Linux usando netplan, la diferencia entre direccionamiento estático y DHCP, y la importancia de configurar correctamente DNS y gateway predeterminado. Aprendiste a usar herramientas esenciales de diagnóstico como `ping`, `tracepath`, `ip addr`, `ip route` y `ss` para verificar conectividad y resolver problemas de red. También exploraste una metodología sistemática de troubleshooting que va de abajo hacia arriba, verificando enlace físico, configuración IP, gateway, DNS y conectividad externa en orden. El dominio de estas habilidades es fundamental para cualquier administrador de sistemas Linux, ya que la conectividad de red es la base de casi todos los servicios y aplicaciones en entornos empresariales.

### Learning Objectives — Review

- Configurar interfaces de red con direcciones IP estáticas usando netplan
- Establecer configuración de DNS y gateway predeterminado
- Diagnosticar problemas de conectividad usando herramientas de red
- Analizar rutas de red y tablas de enrutamiento
- Verificar servicios de red activos y puertos en escucha

🎉

### Module Complete!

You have completed all sections of this module.