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. Consulte systemd-networkd(8).

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

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

paquetes popularidad tamaño tipo descripción
network-manager V:389, I:456 15414 config::NM NetworkManager (demonio): gestión de red automatizada
network-manager-gnome V:121, I:370 5583 config::NM NetworkManager (interfaz de usuario GNOME)
netplan.io V:1, I:4 249 config::NM+networkd Netplan (generador): Interfaz unificada y declarativa para los backends NetworkManager y systemd-networkd
ifupdown V:582, I:981 199 config::ifupdown herramienta estándar para subir o bajar la red (específico de Debian)
isc-dhcp-client V:216, I:980 2866 config::low-level cliente DHCP
pppoeconf V:0, I:5 186 config::helper ayudante de configuración para conexiones PPPoE
wpasupplicant V:343, I:512 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:177, I:243 292 config::helper herramientas para manejar las Extensiones Inalámbricas Linux («Linux Wireless Extensions«)
iw V:34, I:476 302 config::helper herramienta para configurar dispositivos inalámbricos en Linux
iproute2 V:719, I:970 3597 config::iproute2 iproute2, IPv6 y otras configuraciones de red avanzadas: ip(8), tc(8), etc
iptables V:308, I:741 2408 config::Netfilter herramientas de administración para el filtrado de paquetes y NAT (Netfilter)
iputils-ping V:199, I:997 120 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:40 49 prueba prueba la accesibilidad por red de un equipo remoto específico mediante la dirección ARP
iputils-tracepath V:2, I:31 45 prueba determina la ruta de red a un equipo remoto
ethtool V:94, I:266 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:18 2492 test::low-level herramientas para operaciones de información de red comunes (GNOME)
nmap V:26, I:201 4498 test::low-level descubridor de red / escáner de puertos (Nmap, consola)
tcpdump V:16, I:177 1340 test::low-level analizador de tráfico de red (Tcpdump, consola)
wireshark I:45 10514 test::low-level analizador de tráfico de red (Wireshark, GTK)
tshark V:2, I:25 501 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:18, I:293 272 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 61 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. El método dns es llamado. 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 documetna en el error #719621.

El nombre_del_equipo encaja con el nombre del equipo definida en «/etc/hostname».

En sistemas que tienen un dirección IP permanente, la dirección permanente podría ser usada 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_dominiopodría ser usado en vez 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 archivo «/etc/nsswitch.conf» podrái tener un registro como «hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4».

  • 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".

La resolución de nombres de equipo por el método antiguo NETBios sobre TCP/IP utilizado por los viejos sistemas Windows puede ser proporcionado por el paquete winbind. El archivo «/etc/nsswitch.conf» podría tener una entrada como «hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 wins» para permitir esa funcionalidad. (Los sistemas Windows modernos normalmente usan el método dns para la resolución de nombres de equipo.)

[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.

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.2.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 «/sbin/». Puede que necesite indicar la ruta absoluta como «/sbin/ifconfig» o añadir «/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 ser maximizado ajustando los parámetros del tamaño del buffer TCP según se describe en «TCP Tuning Guide« y «TCP tuning« para una red moderna WAN de banda ancha y de alta latencia. Hasta cierto punto, la configuración por defecto de Debian es correcta para mi LAN conectada al veloz 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.8.1, “La inicialización del módulo del núcleo”).


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 http://www.netfilter.org/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.