1.- Introducción a las Redes en Proxmox VE 8.2


1.1.- Gestión de Redes en Proxmox

Proxmox VE nos ofrece, de una manera muy sencilla, la gestión de las redes con las que va a trabajar. Esta gestión la podemos hacer en dos niveles:

Antes de estudiar detenidamente cada una de estos niveles, vamos a introducir un concepto de redes con el que vamos a trabajar: un puente o bridge/switch es un dispositivo de interconexión de redes. Un virtual network switch o bridge es equivalente a un switch físico con la diferencia de que un Linux Bridge posee un número ilimitado de puertos virtuales. Podemos conectar MV y contenedores a estos puertos virtuales. Del mismo modo que un switch físico, el Linux Bridge aprende direcciones MAC de paquetes recibidos y los guarda en una MAC table, la cual usa para tomar decisiones de forwarding de tramas.

En Proxmox ya vienen por defecto instalados los paquetes necesarios para utilizar Linux Bridge, pero aun así vamos a indicar los necesarios por si en algún momento se corrompe el sistema:

apt install -y bridge-utils

Con el paquete de administración opcional de red ifupdown2 , también puede volver a cargar la configuración de red en vivo, sin necesidad de reiniciar.  Si instaló Proxmox VE sobre Debian o actualizó a Proxmox VE 7.0 desde una instalación anterior de Proxmox, asegúrate de que ifupdown2 está instalado:

apt install ifupdown2


Crear una configuración de red para las MV y contenedores de Proxmox 

Imagen de elaboración propiaCrear una configuración de red para las MV y contenedores de Proxmox (CC BY-NC-SA)

Tenemos más opciones para implementar un bridge (puente) por software, pero la más fácil de usar y la que vamos a usar nosotros en Proxmox VE es Linux Bridge.

Por su simplicidad y al estar integrado en el Kernel de Linux, son las rozones principales por la que se utiliza Linux Bridge en Proxmox por defecto. Linux Bridge ha incluido soporte básico para STP (Spanning Tree Protocol), multicast (multidifusión) y Netfilter desde las series de kernel 2.4 y 2.6 de Linux.

 

1.2.- Configuración de la red con Linux Bridge

La configuración de la red se puede realizar a través de la GUI o editando manualmente el archivo /etc/network/interfaces, que contiene toda la configuración de la red. Es preferible utilizar la GUI para evitar errores. Una vez que la red está configurada, puede usar las herramientas tradicionales de Debian ifup e ifdown para subir y bajar las interfaces.

Aplicar cambios de red

Proxmox VE no escribe los cambios directamente en /etc/network/interfaces, lo hace en un archivo temporal llamado /etc/network/interfaces.new,  de esta manera puede hacer muchos cambios relacionados a la vez. Esto también permite asegurarse de que los cambios sean correctos antes de aplicar, ya que una configuración de red incorrecta puede hacer que un nodo sea inaccesible.


Convenciones de nombres

Actualmente Proxmox utiliza las siguientes convenciones de nomenclatura para nombres de dispositivos:

Elegir una configuración de red

   Dependiendo de su organización de red actual y sus recursos, puede elegir una configuración de red puenteada(bridged)enrutada(routed) o enmascarada(masquerading).

Configuración predeterminada usando un puente (bridged)

Configuración Linux Bridge (predeterminada)Imagen de elaboración propiaConfiguración Linux Bridge (predeterminada) (CC BY-NC-SA)

Los puentes son como los switches de red físicos implementados en software. Todas las máquinas virtuales pueden compartir un solo puente, o puede crear múltiples puentes para separar dominios de red. Cada nodo de Proxmox puede tener hasta 4094 puentes, como máximo.

El Linux Bridge "vmbr0" haciendo de puente con la interfaz de red "ens18"

Imagen de elaboración propiaEl Linux Bridge "vmbr0" haciendo de puente con la interfaz de red "ens18" (CC BY-NC-SA)

  El programa de instalación crea un único puente llamado vmbr0, que está conectado a la primera tarjeta Ethernet de las 4 existentes en el nodo Proxmox. La configuración correspondiente en /etc/network/interfaces podría ser:

auto lo
iface lo inet loopback
iface eno1 inet manual
iface eno2 inet manual
iface eno3 inet manual
iface eno4 inet manual

auto vmbr0
iface vmbr0 inet static
address  192.168.10.3
netmask  255.255.0.0
gateway  192.168.10.1
bridge-ports eno1
bridge-stp off   
bridge-fd 0

Las máquinas virtuales se comportan como si estuvieran conectadas directamente a la red física. La red, a su vez, considera que cada máquina virtual tiene su propia MAC, a pesar de que sólo hay un cable de red que conecta todas estas máquinas virtuales a la red.

Aunque no es lo habitual podemos asignar una IP mediante DHCP:

auto lo
iface lo inet loopback
iface ens18 inet manual
auto vmbr0
iface vmbr0 inet dhcp
    bridge_ports ens18
    bridge_stp off
    bridge_fd 0
   

Es útil para crear MV de Proxmox anidadas (un Proxmox virtualizando dentro de otro Proxmox)

Configuración enrutada

Configuración de red enrutada

Proxmox Server Solutions GmbHConfiguración de red enrutada (Todos los derechos reservados)

La mayoría de los proveedores de internet no admiten múltiples direcciones MAC en una sola interfaz. Por razones de seguridad, deshabilitan las redes tan pronto como detectan.
Podemos evitar el problema enrutando todo el tráfico a través de una única interfaz. Esto asegura que todos los paquetes de red usen la misma dirección MAC.

Un escenario común es tener una IP pública (198.51.100.5) y un bloque de IPs para sus máquinas virtuales (203.0.113.16/29).

auto lo
iface lo inet loopback

auto eno1
iface eno1 inet static
address 198.51.100.5
netmask 255.255.255.0
gateway 198.51.100.1
post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up echo 1 > /proc/sys/net/ipv4/conf/eno1/proxy_arp

auto vmbr0
iface vmbr0 inet static
address 203.0.113.17
netmask 255.255.255.248
bridge_ports none
bridge_stp off
bridge_fd 0

Configuración Masquerading (NAT) con iptables

 Configuración NAT

Proxmox Server Solutions GmbHConfiguración NAT (Todos los derechos reservados)

El enmascaramiento permite a las MV y contenedores, que sólo tienen una dirección IP privada, acceder a la red pública utilizando la dirección IP del nodo Proxmox para el tráfico saliente. Cada paquete saliente es reescrito por iptables para aparecer como originario del host, y las respuestas se reescriben en consecuencia para ser enrutadas al remitente original.

auto lo
iface lo inet loopback
auto eno0

iface eno1 inet static
Address 192.168.10.2
netmask 255.255.255.0
Gateway 192.168.10.1

auto vmbr0
#private sub network
iface vmbr0 inet static
address 10.10.10.1
netmask 255.255.255.0
bridge_ports none
bridge_stp off
bridge_fd 0

post-up echo 1 > /proc/sys/net/ipv4/ip_forward
post-up iptables -t nat -A POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE
post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o eno1 -j MASQUERADE

 
Configuración Linux Bond (o modo balanceador de red)

Bonding (también llamado agrupación de NIC o agregación de enlaces) es una técnica para vincular varias NIC a un sólo dispositivo de red. Es posible lograr diferentes objetivos, como hacer que la red sea tolerante a fallos, aumentar el rendimiento (ancho de banda) o ambos juntos.

El hardware de alta velocidad como Fibre Channel y el hardware de conmutación asociado pueden ser bastante caros. Al hacer bonding, dos NIC pueden aparecer como una interfaz lógica, lo que resulta en una velocidad doble. Esta es una característica nativa del kernel de Linux que es compatible con la mayoría de los switches.

Configuración Linux Bonding (o modo balanceador)

Proxmox Server Solutions GmbHConfiguración Linux Bonding (o modo balanceador) (Todos los derechos reservados)

Esta configuración es habitual en los CPD (Centro de Procesado de Datos) para protegerse de fallos o caídas en los switch que conectan a distintos servidores Proxmox.

Un ejemplo de bond con IP fija:

auto lo
iface lo inet loopback

iface eno1 inet manual

iface eno2 inet manual

auto bond0
iface bond0 inet static
slaves eno1 eno2
address 192.168.1.2
netmask 255.255.255.0
bond_miimon 100
bond_mode 802.3ad
bond_xmit_hash_policy layer2+3

auto vmbr0
iface vmbr0 inet static
address 10.10.10.2
netmask 255.255.255.0
gateway 10.10.10.1
bridge_ports eno1
bridge_stp off
bridge_fd 0

Otra posibilidad es utilizar el bond directamente como puerto de puente. Esto se puede usar para hacer que la red de invitados sea tolerante a fallos.

auto lo
iface lo inet loopback

iface eno1 inet manual

iface eno2 inet manual

auto bond0
iface bond0 inet manual
slaves eno1 eno2
bond_miimon 100
bond_mode 802.3ad
bond_xmit_hash_policy layer2+3

auto vmbr0
iface vmbr0 inet static
address 10.10.10.2
netmask 255.255.255.0
gateway 10.10.10.1
bridge_ports bond0
bridge_stp off
bridge_fd 0

VLAN 802.1Q

Una LAN virtual (VLAN) es un dominio de difusión que es particionado y aislado en la red en la capa 2. Por lo tanto, es posible tener múltiples redes (4096) en una red física, cada una independiente de las demás.

Cada red VLAN se identifica por un número llamado tag. Los paquetes de red se etiquetan para identificar a qué red virtual pertenecen.

Ejemplo: usamos la VLAN 5 para la IP de administración Proxmox VE con el tradicional de Linux bridge.

auto lo
iface lo inet loopback

iface eno1 inet manual

iface eno1.5 inet manual

auto vmbr0v5
iface vmbr0v5 inet static
address 10.10.10.2
netmask 255.255.255.0
gateway 10.10.10.1
bridge_ports eno1.5
bridge_stp off
bridge_fd 0

auto vmbr0
iface vmbr0 inet manual
bridge_ports eno1
bridge_stp off
bridge_fd 0

Este material ha sido elaborado a partir de los manuales del Profesor Antonio López Téllez (2020) sobre Proxmox VE 6.0

1.3.- Configuración de la red con Open vSwitch

Open Virtual Switch

Logo Open vSwitch

Logo Open vSwitch (GNU/GPL)

Open vSwitch es un conmutador virtual multicapa con calidad de servicio y de licencia de código abierto Apache 2.0. Está diseñado para permitir la automatización masiva de la red a través de extensión programadas, sin dejar de admitir interfaces y protocolos de administración estándar

Por defecto, Proxmox usa Linux Bridges (switch virtual al igual que Open vSwitch). 

Open vSwitch es un switch virtual, al igual que Linux Bridge y reenvía paquetes entre las interfaces que están conectadas a él (capa 2 de TCP/IP). Generalmente se usa para reenviar paquetes en enrutadores, puertas de enlace o entre máquinas virtuales y espacios de nombres de red en un host (contenedores).

La gran ventaja de Open vSwitch era que soportaba STP (Spanning Tree Protocol) pero Linux Bridge ha incluido soporte básico para STP, multicast (multidifusión) y Netfilter desde las series de kernel 2.4 y 2.6 de Linux.

 

Sin embargo, Linux Bridge, no es del todo compatible con todos los componentes de red y protocolos del resto de la industria del hardware de red.

Linux Bridge queda atrás de Open vSwitch en la mayoría de las pruebas de rendimiento y tiempo de transacción (latencia), donde la diferencia más notable se observó con grandes cargas transaccionales.

Requisito previo: instalar dependencias

apt update
apt install openvswitch-switch -y


Instalación de los paquetes necesarios para habilitar Open vSwitch

Imagen de elaboración propiaInstalación de los paquetes necesarios para habilitar Open vSwitch (CC BY-NC-SA)

Importante: crea una copia de seguridad de la configuración de red actual para cambiar 

Abre el shell desde la consola web y ejecuta este comando:

cp /etc/network/interfaces /etc/network/interfaces.bak


Copia de seguridad del fichero de configuración de red del nodo Proxmox

Imagen de elaboración propia. Copia de seguridad del fichero de configuración de red del nodo Proxmox (CC BY-NC-SA)

Los OVS Bridge son más recomendables que los Linux Bridge para realizar un cluster de Proxmox. 

Eliminaremos el Linux Bridge "vmbr0" creado por defecto en Proxmox VE, pero no le daremos a "Aplicar configuración" hasta haber terminado con los cambios:

Imagen de elaboración propia. Eliminar el Linux Bridge "vmbr0" (CC BY-NC-SA)

Imagen de elaboración propiaEliminar el Linux Bridge "vmbr0" (CC BY-NC-SA)


Sin actualizar los cambios, daremos a "Crear" un OVS Bridge:

Crear un Open Virtual Switch

Imagen de elaboración propiaCrear un Open Virtual Switch (CC BY-NC-SA)

Llamaremos al nuevo Open vSwitch como "vmbr0" para que coincida con el anterior nombre de Linux Bridge y de esta manera no se vean afectadas las interfaces de red de las MV y contenedores creados previamente:

Creación del OVS Bridge

Imagen de elaboración propiaCreación del OVS Bridge (CC BY-NC-SA)

¡ATENCIÓN! a diferencia de una configuración con Linux Bridge, debemos de habilitar un "OVS IntPort" para acceder a GUI de Proxmox:

Crear un OVS IntPort para el acceso a web administrativa de Proxmox

Imagen de elaboración propiaCrear un OVS IntPort para el acceso a web administrativa de Proxmox (CC BY-NC-SA)


Ahora sí aplicamos los cambios:

Aplicar cambios para reiniciar el servicio de red

Imagen de elaboración propiaAplicar cambios para reiniciar el servicio de red (CC BY-NC-SA)

 

Si todo ha salido bien en un momento tendremos preparada nuestro OVS Bridge. Si queremos que la IP del OVS IntPort se obtenga por DHCP tendremos que modificar el fichero /etc/network/interfaces de forma manual:

Modificación del fichero /etc/network/interfaces para que OVS IntPort obtenga una configuración de red por DHCP

Imagen de elaboración propiaModificación del fichero /etc/network/interfaces para que OVS IntPort obtenga una configuración de red por DHCP (CC BY-NC-SA)

Si por alguna razón cometiste un error tipográfico o algún otro error en tu configuración y tienes problemas para conectarte a través del navegador web:

Vaya a su servidor Proxmox e inicie sesión localmente y ejecute estos comandos:

cp /etc/network/interfaces.bak /etc/network/interfaces
ifreload -a

Intenta seguir otra vez estos mismos pasos.

Si editamos el OVS Bridge "vmbr0" nos daremos cuenta que está haciendo de puente entre la interfaz de red ens18 y el OVS IntPort "vmbr0_mang":

Edición de OVS Bridge vmbr0

Imagen de elaboración propiaEdición de OVS Bridge vmbr0 (CC BY-NC-SA)

Comprobaremos ahora si funciona el puente de red de OVS Bridge "vmbr0" arrancando un contenedor y verificando su configuración de red y su conexión a Internet, haciendo un ping a un servidor DNS públicos de Google: 

Configuración de red y ping al DNS de Google 8.8.8.8

Imagen de elaboración propiaConfiguración de red y ping al DNS de Google 8.8.8.8 (CC BY-NC-SA)

Para saber más

Para seguir profundizando:

https://pve.proxmox.com/wiki/Network_Configuration