Capítulo 5. Configuración de red

Tabla de contenidos

5.1. La infraestructura de red básica
5.1.1. La resolución del nombre del equipo
5.1.2. El nombre del interfaz de red
5.1.3. EL rango de direcciones de red para una LAN
5.1.4. El mantenimiento de los dispositivos de red
5.2. La configuración moderna de red en el escritorio
5.2.1. Herramientas de interfaz gráfico de usuario para la configuración de red
5.3. La moderna configuración de la red sin GUI
5.4. La moderna configuración de la red para la nube
5.4.1. La moderna configuración de red para la nube con DHCP
5.4.2. La moderna configuración de red para la nube con una IP estática
5.4.3. La moderna configuración de la red para la nube con Network Manger
5.5. La configuración de red de bajo nivel
5.5.1. Órdenes iproute2
5.5.2. Operaciones seguras de red a nivel bajo
5.6. Optimización de la red
5.6.1. Encontrando la MTU óptima
5.6.2. Optimización TCP en redes WAN
5.7. Infraestructura Netfilter
[Sugerencia] Sugerencia

Como guía de especifica de red moderna de Debian, lea Manual del Administrador de Debian - Configuración de red.

[Sugerencia] Sugerencia

Con systemd, networkd se puede usar para la gestión de redes. Ver systemd-networkd(8).

Revisemos la infraestructura de red básica de un moderno sistema Debian.

Tabla 5.1. Relación de herramientas de configuración de red

paquetes popularidad tamaño tipo descripción
network-manager V:392, I:459 15542 config::NM NetworkManager (demonio): gestión de red automatizada
network-manager-gnome V:121, I:369 5583 config::NM NetworkManager (interfaz de usuario GNOME)
netplan.io V:1, I:5 319 config::NM+networkd Netplan (generador): Interfaz unificada y declarativa para los backends NetworkManager y systemd-networkd
ifupdown V:608, I:979 199 config::ifupdown herramienta estándar para subir o bajar la red (específico de Debian)
isc-dhcp-client V:217, I:981 2875 config::low-level cliente DHCP
pppoeconf V:0, I:5 186 config::helper ayudante de configuración para conexiones PPPoE
wpasupplicant V:353, I:513 3862 config::helper cliente que soporta WPA y WPA2 (IEEE 802.11i)
wpagui V:0, I:1 774 config::helper cliente Qt de interfaz de usuario para «wpa_supplicant«
wireless-tools V:179, I:244 292 config::helper herramientas para manejar las Extensiones Inalámbricas Linux («Linux Wireless Extensions«)
iw V:34, I:475 302 config::helper herramienta para configurar dispositivos inalámbricos en Linux
iproute2 V:736, I:972 3606 config::iproute2 iproute2, IPv6 y otras configuraciones de red avanzadas: ip(8), tc(8), etc
iptables V:319, I:718 2414 config::Netfilter herramientas de administración para el filtrado de paquetes y NAT (Netfilter)
nftables V:106, I:701 182 config::Netfilter herramientas de administración para filtrado de paquetes y NAT (Netfilter) (sucesor de {ip,ip6,arp,eb}tables)
iputils-ping V:194, I:997 122 prueba prueba la accesibilidad a un equipo remoto a través de la red por su nombre de equipo o dirección IP (iproute2)
iputils-arping V:3, I:36 50 prueba prueba la accesibilidad por red de un equipo remoto específico mediante la dirección ARP
iputils-tracepath V:2, I:30 47 prueba determina la ruta de red a un equipo remoto
ethtool V:95, I:267 739 prueba muestra o cambia la configuración de dispositivos Ethernet
mtr-tiny V:5, I:46 156 test::low-level determina la ruta de red a un equipo remoto (curses)
mtr V:4, I:41 209 test::low-level determina la ruta de red a un equipo remoto (curses y GTK)
gnome-nettool V:0, I:17 2492 test::low-level herramientas para operaciones de información de red comunes (GNOME)
nmap V:25, I:199 4498 test::low-level descubridor de red / escáner de puertos (Nmap, consola)
tcpdump V:17, I:175 1340 test::low-level analizador de tráfico de red (Tcpdump, consola)
wireshark I:45 10417 test::low-level analizador de tráfico de red (Wireshark, GTK)
tshark V:2, I:25 400 test::low-level analizador de tráfico de red (consola)
tcptrace V:0, I:2 401 test::low-level produce un resumen de las conexiones de salida con tcpdump
snort V:0, I:0 2203 test::low-level sistema flexible de detección de intrusos en la red (Snort)
ntopng V:0, I:1 15904 test::low-level muestra el uso de red en un navegador web
dnsutils V:16, I:280 276 test::low-level clientes de red proporcionado con BIND: nslookup(8), nsupdate(8), dig(8)
dlint V:0, I:3 53 test::low-level comprueba la información de zona DNS mediante consultas al servidor de nombres
dnstracer V:0, I:1 59 test::low-level determina una cadena de servidores DNS a la fuente

La resolución de nombres de host actualmente es compatible con el mecanismo NSS (Name Service Switch). El flujo de este análisis es el siguiente.

  1. El archivo «/etc/nsswitch.conf» con la entrada como «hosts: files dns» determina el orden de la resolución del nombre de equipos. (Esto sustituye la vieja funcionalidad del «orden» de la entrada en «/etc/host.conf».)

  2. El método files se llama en primer lugar. Si el nombre del equipo se encuentra en el archivo «/etc/hosts», devuelve todas las direcciones válidas de esta y finaliza. (El archivo «/etc/host.conf» contiene «múltiples posibilidades».)

  3. Se llama al método dns. Si el nombre del equipo se encuentra por la pregunta al Sistema de Internet de Nombres de Dominio (DNS) que se identifican por el archivo «/etc/resolv.conf», devuelve todas las direcciones correctas para él si existen.

Una estación de trabajo típica puede instalarse con su nombre de host establecido, por ejemplo, en "host_name" y su nombre de dominio opcional establecido en una cadena vacía. Entonces, "/etc/hosts" tiene el siguiente aspecto.

127.0.0.1 localhost
127.0.1.1 host_name

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Cada línea comienza con una dirección IP y es seguido por su nombre de equipo asociada.

La dirección IP 127.0.1.1 de la segunda línea del ejemplo puede no aparecer en otros sistemas tipo Unix. El Instalador Debian crea esta entrada para un sistemas sin una dirección IP permanente como una solución temporal para algunos software (p. ej. GNOME) como se documenta en el error #719621.

El nombre_host coincide con el nombre de host definido en "/etc/hostname" (ver Sección 3.7.1, “El nombre del equipo (hostname)”).

En sistemas que tienen un dirección IP permanente, la dirección permanente se podría usar aquí en vez de 127.01.1.

En sistemas con una IP permanente y un nombre cualificado completo de dominio (FQDN) provisto por el Sistema de Nombre de Dominio (DNS), ese canónico nombre_del_equipo.nombre_del_dominiose podría usar en lugar de solo el nombre_del_equipo.

Si el paquete resolvconf no está instalado, "/etc/resolv.conf" es un archivo estático. Si está instalado, es un enlace simbólico. Además, contiene información de inicialización para la estrategia de análisis. Si la DNS es IP="192.168.11.1", incluye lo siguiente.

nameserver 192.168.11.1

El paquete resolvconf hace que «/etc/resolv.conf» sea un enlace simbólico y gestiona su contenido por su archivo de órdenes «hook« automáticamente.

Para PC en el típico entorno LAN adhoc, el nombre del host puede resolverse a través de Multicast DNS (mDNS) además de los métodos básicos files y dns.

  • Avahi ofrece un marco para el Servicio de Descubrimiento DNS «Multicast« en Debian.

  • Es similar a Apple Bonjour / Apple Rendezvous.

  • El paquete conector libnss-mdns aporta la resolución de nombres de equipo por medio de mDNS para la funcionalidad del Intercambio del Servicio de Nombres GNU (NSS) de la biblioteca GNU C (glibc).

  • El fichero "/etc/nsswitch.conf" debería tener una estrofa como "hosts: files mdns4_minimal [NOTFOUND=return] dns" (véase /usr/share/doc/libnss-mdns/README.Debian para otras configuraciones).

  • Un nombre del host con el sufijo ".local" pseudominio de nivel superior se resuelve enviando un mensaje de consulta mDNS en un paquete UDP multidifusión utilizando la dirección IPv4 "224.0.0.251" o la dirección IPv6 "FF02::FB".

[Nota] Nota

La expansión de los dominios genérico de alto nivel (gTLD) en el Sistema de Nombres de Dominio está en desarrollo. Tenga cuidado con la colisión de nombres cuando elige un nombre de dominio utilizado únicamente en la LAN.

[Nota] Nota

El uso de paquetes como libnss-resolve junto con systemd-resolved, o libnss-myhostname, o libnss-mymachine, con listados coresspondientes en la línea "hosts" en el fichero "/etc/nsswitch. conf" puede anular la configuración de la red tradicional comentada anteriormente. Consulte nss-resolve(8), systemd-resolved(8), nss-myhostname(8) y nss-mymachines(8) para más información.

Comunmente el interfaz lo se inicializa mediante «networking.service» y el resto de interfaces de un sistema de escritorio moderno Debian que use systemd mediante «NetworkManager.service».

Debian puede gestionar la conexión de red mediante el software de gestión daemon como NetworkManager (NM) (network-manager y paquetes asociados).

  • Ellos tienen sus propios interfaz gráfico de usuarios y programas de línea de órdenes como interfaces de usuario.

  • Tienen su propio demonio así como su motor de sistema.

  • Permiten la conexión sencilla entre su sistema e Internet.

  • Permiten la gestión sencilla de la configuración inalámbrica y cableada.

  • Nos permiten configurar la red de forma independiente del histórico paquete ifupdown.

[Nota] Nota

No use las herramientas de configuración de red automática para servidores. Estos están pensados para escritorios móviles y portátiles.

Estas herramientas modernas de red necesitan ser configuradas adecuadamente para evitar conflictos con el histórico paquete ifupdown y su archivo de configuración «/etc/network/interfaces».

La documentación oficial de NM en Debian se encuentra en "/usr/share/doc/network-manager/README.Debian".

Basicamente, la configuración de red para escritorios esta hecha como sigue a continuación.

  1. Haga que el usuario de escritorio, p. ej. foo, pertenezca al grupo «netdev» como sigue (de otra forma, se puede hacer de forma automática mediante D-bus en entornos de escritorio modernos como GNOME y KDE).

    $ sudo usermod -a -G foo netdev
  2. Mantenga la configuración de «/etc/network/interfaces» tan simple como sigue.

    auto lo
    iface lo inet loopback
  3. Reinicia NM de la siguiente manera.

    $ sudo systemctl restart network-manager
  4. Configure al red por medio del interfaz gráfico de usuario.

[Nota] Nota

Sólo las interfaces que están no listadas en "/etc/network/interfaces" son gestionadas por NM para evitar conflictos con ifupdown.

[Sugerencia] Sugerencia

Si deseas ampliar las capacidades de configuración de la red de NM, busque los módulos complementarios y paquetes suplementarios adecuados, como network-manager-openconnect, network-manager-openvpn-gnome, network-manager-pptp-gnome, mobile-broadband-provider-info, gnome-bluetooth, etc.

Con systemd, la red puede configurarse en su lugar en /etc/systemd/network/. Consulte systemd-resolved(8), resolved.conf(5) y systemd-networkd(8).

Esto permite la configuración moderna de la red sin GUI.

Se puede establecer una configuración de cliente DHCP creando "/etc/systemd/network/dhcp.network". Por ejemplo:

[Match]
Name=en*

[Network]
DHCP=yes

Se puede establecer una configuración de red estática creando "/etc/systemd/network/static.network". Por ejemplo:

[Match]
Name=en*

[Network]
Address=192.168.0.15/24
Gateway=192.168.0.1

La configuración de red moderna para la nube puede utilizar los paquetes cloud-init y netplan.io (véase Sección 3.7.4, “Inicialización del sistema en la nube”).

El paquete netplan.io soporta systemd-networkd y NetworkManager como backends de la configuración de la red, y permite la configuración de la red utilizando los datos YAML. Cuando se modifica YAML:

  • Ejecute el comando "netplan generate" para generar toda la configuración backend necesaria desde YAML.

  • Ejecute el comando "netplan apply" para aplicar la configuración generada a los backends.

Consulte "Documentación de Netplan", netplan(5), netplan-generate(8) y netplan-apply(8).

Consulte también "Documentación de Cloud-init" (especialmente alrededor de "Fuentes de configuración" y "Netplan Passthrough") para saber cómo cloud-init puede integrar la configuración de netplan.io con las fuentes de datos alternativas.

Para la configuración de red de bajo nivel en Linux, utilice los programas iproute2 (ip(8), ...) .

Puede usar las órdenes de red de nivel bajo de forma segura de la forma siguiente ya que no cambian la configuración de red.


[Sugerencia] Sugerencia

Algunas de estas herramienas de configuración de red a nivel bajo están ubicadas en «/usr/sbin/». Puede que necesite indicar la ruta absoluta como «/usr/sbin/ifconfig» o añadir «/usr/sbin» a la relación de «$PATH» en su «~/.bashrc».

La optimización genérica de la red está fuera del alcance de este documento. Pasaré por encima de las materias pertinentes para una conexión casera.


NM normalmente establece la Unidad de transmisión máxima (MTU) óptima automáticamente.

En algunos escenarios, después de experimentar con el envío de paquetes ICMP de varios tamaños con ping(8) con la opción "-M do", es posible que desee configurar la MTU manualmente. La MTU es el tamaño de paquete más grande que se puede lograr sin fragmentación de IP más 28 bytes (IPv4) o 48 bytes (IPv6). En el siguiente ejemplo, se encuentra que la MTU de la conexión IPv4 es 1460 y la MTU de la conexión IPv6 es 1500.

$ ping -4 -c 1 -s $((1500-28)) -M do www.debian.org
PING  (149.20.4.15) 1472(1500) bytes of data.
ping: local error: message too long, mtu=1460

---  ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

$ ping -4 -c 1 -s $((1460-28)) -M do www.debian.org
PING  (130.89.148.77) 1432(1460) bytes of data.
1440 bytes from klecker-misc.debian.org (130.89.148.77): icmp_seq=1 ttl=50 time=325 ms

---  ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 325.318/325.318/325.318/0.000 ms
$ ping -6 -c 1 -s $((1500-48)) -M do www.debian.org
PING www.debian.org(mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e)) 1452 data bytes
1460 bytes from mirror-csail.debian.org (2603:400a:ffff:bb8::801f:3e): icmp_seq=1 ttl=47 time=191 ms

--- www.debian.org ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 191.332/191.332/191.332/0.000 ms

Esto proceso puede ser automatizado por descubrimiento de la ruta MtU (Path MTU, PMTU) (RFC1191) y la orden tracepath(8).


Además de estas pautas básicas, también debe conocer la siguiente información.

  • El uso de cualquier método de «tunneling« (VPN etc.) puede reducir más la MTU óptima por la sobrecarga.

  • El valor de la MTU no debería ser mayor que el valor PMTU determinado de forma empírica.

  • El valor de MTU mayor es generalmente mejor cuando se cumplen las otras limitaciones.

El Tamaño máximo de segmento (MSS) es otra medida del tamaño del paquete. La relación entre MSS y MTU es la siguiente.

  • MSS = MTU - 40 en el caso de IPv4

  • MSS = MTU - 60 en el caso de IPv6

[Nota] Nota

La optimización basada en iptables(8) (consulte Sección 5.7, “Infraestructura Netfilter”) puede fijar el tamaño del paquete por el MSS y puede ser útil para el encaminador. Consulte «TCPMSS« en iptables(8).

El rendimiento TCP puede maximizarse ajustando los parámetros del tamaño del buffer TCP como en "TCP tuning" para la moderna WAN de gran ancho de banda y alta latencia. Hasta ahora, la configuración actual por defecto de Debian sirve bien incluso para mi LAN conectada por el rápido servicio FTTP de 1G bps.

Netfilter aporta la infraestructura de uncortafuegos con estado y traducción de direcciones de red (NAT) por medio de módulos del núcleo de Linux (consulte Sección 3.9, “La inicialización del módulo del núcleo”).

Tabla 5.7. Relación de herramientas de cortafuegos

paquetes popularidad tamaño descripción
nftables V:106, I:701 182 herramientas de administración para filtrado de paquetes y NAT (Netfilter) (sucesor de {ip,ip6,arp,eb}tables)
iptables V:319, I:718 2414 herramientas de administración de netfilter (iptables(8) para IPv4, ip6tables(8) para IPv6)
arptables V:0, I:1 100 herramientas de administración de netfilter (arptables(8) para ARP)
ebtables V:14, I:29 276 herramientas de administración para netfilter (ebtables(8) para puente Ethernet)
iptstate V:0, I:2 119 Control continuo del estado de netfilter (parecido a top(1))
ufw V:55, I:77 859 Cortafuegos sin complicaciones (UFW) programa de gestión del firewall netfilter
gufw V:5, I:10 3660 interfaz gráfica de usuario para cortafuegos sin complicaciones (UFW)
firewalld V:11, I:16 2613 firewalld es un programa cortafuegos de gestión dinámica con soporte para zonas de red
firewall-config V:0, I:3 1163 interfaz gráfica del usuario para firewalld
shorewall-init V:0, I:0 88 inicialización de Shoreline Firewall
shorewall V:3, I:8 3090 Shoreline Firewall,creador del archivo de configuración de netfilter
shorewall-lite V:0, I:0 71 Shoreline Firewall, creador del archivo de configuración de netfilter (versión simplificada)
shorewall6 V:0, I:1 1334 Shoreline Firewall, creador del archivo de configuración de netfilter (versión IPv6)
shorewall6-lite V:0, I:0 71 Shoreline Firewall, creador del archivo de configuración de netfilter (versión simplificada para IPv6)

El programa principal para usuarios de netfilter es iptables(8). Puede configurar de forma manual netfilter de forma interactiva desde el intérprete de órdenes , guardando su estado con iptables-save(8) y restaurandolo por medio de archivo de órdenes init iptables-restore(8) después del reinicio del sistema.

Shorewall es una herramienta que facilita la configuración de los archivos de órdenes facilitando este proceso.

Consulte la documentación en Netfilter Documentation (o en "/usr/share/doc/iptables/html/").

[Sugerencia] Sugerencia

Aunque han sido escritor para la Linux 2.4, ambos, la orden iptables(8) y la función principal de netfilter se usan en los núcleos de Linux 2.6 y 3.x.