Introducción a las redes en Proxmox

Gestionando redes en Proxmox VE

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:
Podemos configurar la configuración de red del servidor Proxmox VE para determinar el tipo de conexión que tendrá el servidor con el exterior.
Podemos configurar la configuración de red que tendrán las máquinas virtuales y contenedores que gestionemos en nuestro servidor Proxmox.
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. En concreto, Linux Bridge es un software que tiene la misma funcionalidad que un bridge físico.
Tenemos más opciones para implementar un bridge por software, pero la más fácil de usar y la que vamos a usar nosotros en Proxmox VE es Linux Bridge.
Para seguir profundizando:

Configuración de la red del servidor Proxmox VE

La configuración de red en Proxmox VE se ofrece a nivel de servidor (es decir, cada nodo que forma el clúster tendrá su configuración de red). En nuestro caso, como solo tenemos un nodo, podemos obtener la configuración inicial de red a nivel del servidor, en la opción System - Network del nodo:
image.png
En este curso hemos instalado Proxmox VE sobre una máquina virtual, y en nuestro escenario nos aparecen los siguientes recursos:
La interfaz del servidor Proxmox (en el ejemplo, enp1s0): Corresponde a la interfaz del servidor.
Un Linux Bridge (vmbr0): A este bridge está conectado la interfaz de del servidor y ha tomado del router físico un ip por DHCP (en mi caso la 192.168.100.87). Esta ip corresponde a la IP del servidor y es la que utilizo para acceder a la página web de Proxmox.
Por defecto las máquinas virtuales y contenedores que estamos creando se conectan a este Linux Bridge, y tomarán direccionamiento del router físico, en mi caso el direccionamiento será el 192.168.100.0/24. Por lo tanto, todas las máquinas gestionadas por Proxmox serán accesibles desde cualquier ordenador de mi red local.
El esquema que tenemos sería el siguiente:
image.png
En una instalación real de Proxmox el servidor puede tener más interfaces de red, podría existir un switch físico en la infraestructura y podríamos necesitar una configuración más avanzada usando por ejemplo Bonding (Link Aggregation) o VLAN. Proxmox VE nos permite configurar estas opciones avanzadas usando Linux Bridge o Open vSwitch (otra tecnología que nos permite trabajar con switch software). En este curso no se va a abordar el estudio de estas características avanzadas.
image.png

Conexión de las máquinas virtuales/contenedores al bridge vmbr0

Como hemos indicado anteriormente, por defecto, las máquinas virtuales y contenedores que hemos creado en nuestro servidor se conecta al bridge vmbr0, por lo tanto, se configurarán de forma automática usando el servidor DHCP de nuestra infraestructura, en nuestro caso el del router físico.
image.png
Y podemos comprobar que ha tomado una ip en el direccionamiento que reparte nuestro servidor DHCP:
image.png
Por lo que podemos acceder a ella desde cualquier equipo conectada a nuestra red local.

Configuración de una red interna

Como hemos estudiado anteriormente, las máquinas virtuales y contenedores conectados al bridge vmbr0 obtendrán direccionamiento automático, tendrán acceso al exterior y podremos acceder a ellos sin ningún problema.
Además, Proxmox VE nos permite crear nuevos Linux Bridge donde podremos conectar nuestras máquinas en una red privada. Algunos escenarios donde podríamos usar esta posibilidad podrían ser:
Varias máquinas conectadas al exterior con una interfaz conectada a vmbr0 y otra interfaz conectada a otro bridge. Estas máquinas tendrían una conexión entre ellas en una red privada.
Un equipo que funcione como router/nat/cortafuegos que esté conectado al exterior por vmbr0 y a otras redes internas donde tenemos diferentes máquinas.
Un laboratorio de máquinas que no tengan conectividad al exterior y que estén conectadas a una red interna.

Creación de un nuevo bridge

Para crear un nuevo bridge tenemos que elegir la opción System - Network - Create - Linux Bridge:
image.png
En la creación del bridge tendremos que configurar los siguientes parámetros:
El nombre del bridge: debe tener el formato de vmbr y un número.
Aunque no es necesario, podríamos asignarle una ip al bridge (normalmente los switch tienen una IP que nos permiten acceder a ellos para configurarlos).
Si indicamos la ip del Gateway lo que estaríamos haciendo es conectar una interfaz virtual del servidor Proxmox a este bridge, por lo que desde el servidor Proxmox tendríamos conectividad con las máquinas conectadas a este bridge. En nuestro caso no la vamos a indicar porque no vamos a usar esta funcionalidad.
Y finalmente es importante activar el Autostart para que el bridge se levante tras un reinicio.
image.png
Una vez creado o modificado algún elemento de la red de Proxmox VE debemos aplicar los cambios para que verdaderamente se produzca el cambio de configuración:
image.png

Conexión de una máquina virtual a la red interna

Una vez tenemos creado nuestro bridge vmbr1, tenemos dos posibilidades:
Conectarle una máquina que ya está funcionando. Es decir, añadir una nueva interfaz de red a una máquina ya existente.
Crear una nueva máquina conectada a este bridge.
Para explicar este apartado vamos a construir el siguiente esquema de red:
image.png
La máquina router ya está creada y está conectada al bridge vmbr0, le vamos a añadir una nueva interfaz de red conectada al bridge vmbr1 y la vamos a configurar con la ip 10.0.0.1/24.
La máquina cliente la vamos a crear conectada al bridge vmbr1 con la dirección 10.0.0.2/24.

Añadir una nueva interfaz de red a una máquina

La máquina router ya está funcionando y tiene una interfaz de red conectada a vmbr0. Podemos añadirle una nueva interfaz de red desde el apartado Hardware de la máquina:
image.png
Elegimos al bridge al que va a estar conectada esta nueva interfaz (recuerda elegir el driver VirtIO):
image.png
En la red interna a la que hemos conectado la máquina no existe ningún servidor DHCP por lo que tendremos que hacer una configuración manual del direccionamiento de esta interfaz de red. La manera de hacer esta configuración dependerá del sistema operativo de la máquina que estamos configurando (en mi caso es una distribución Debian). Podemos comprobar que ya tenemos dos interfaces configuradas:
image.png
La nueva interfaz se llama ens19 y es la que tenemos que configurar. Para ello modificamos el fichero /etc/network/interfaces y añadimos el siguiente contenido:
image.png
Y para terminar la configuración levantamos la interfaz con ifup y comprobamos que ya tiene asignada la ip:
image.png

Crear una nueva máquina virtual conectada a la red interna

La máquina cliente la vamos a crear conectada directamente al nuevo bridge. Para ello durante la creación de la nueva máquina escogemos el nuevo bridge:
image.png
Una vez creada, comprobamos que esta máquina está conectada a vmbr1:
image.png
De la misma forma que hemos configurado la ip en la máquina router, vamos a configurar la ip de esta máquina. Vamos a configurar la ip 10.0.0.2/24:
image.png
Y comprobamos que hay conectividad con la otra máquina:
image.png

Conclusiones

La creación de diferentes Linux Bridge nos posibilita la construcción de escenarios complejos de red. Además, tenemos que tener en cuenta que añadir o eliminar una interfaz de red se puede realizar en "caliente" sobre una máquina que esté funcionando. Del mismo modo, podemos modificar una interfaz de red ya existente para cambiar el bridge al que está conectada.

Conexión de un contenedor LXC a la red interna

De forma similar a lo estudiado en el punto anterior, podríamos conectar un contenedor LXC a una red interna.

Añadir una nueva interfaz de red a un contenedor

Si quisiéramos añadir una nueva interfaz de red a un contenedor LXC, tendríamos que elegir la opción Network del contenedor, para ver las interfaces de red que tiene configurado, y pulsar el botón Add para añadir una nueva:
image.png
Podemos nombrar la nueva interfaz de red y el bridge al que se conectará, indicando directamente el direccionamiento estático:
image.png

Crear un contenedor conectado a una red interna

En el caso de la creación de un contenedor LXC podemos configurar la interfaz de red conectada al nuevo bridge, indicando directamente el direccionamiento estático:
image.png

Introducción al cortafuegos de Proxmox VE

La naturaleza de este curso no nos permite abarcar con profundidad aspectos relacionados con la seguridad de nuestro servidor Proxmox VE, pero sí podemos hacer una introducción al cortafuegos que nos ofrece el sistema para asegurar el acceso, tanto al servidor como a las máquinas virtuales y contenedores que gestionemos.

Activación del cortafuego

El cortafuegos hay que activarlo a tres niveles:

A nivel de Datacenter

Para activar el cortafuegos a nivel del clúster de servidores, tenemos que activar en la opción Datacenter - Firewall - Options:
image.png
Aunque no es necesario, para obtener más seguridad en el acceso de los servidores del clúster, podemos cambiar la política para denegar por defecto todo el tráfico de salida, para ello cambiamos la Output Policy a DROP.
En este nivel también puedes configurar:
Security Group: Conjuntos de reglas de cortafuegos que posteriormente podemos asignar a un cortafuegos de una máquina.
Alias: Nos permite nombrar direcciones IP para que sea más sencillo crear las reglas de cortafuegos.
IPSec: Nos permite crear grupos de IP para facilitar la asignación de reglas de cortafuegos a varias IP.
Estos elementos no lo vamos a usar en este curso.

A nivel de Servidor

En este caso volvemos a activar el cortafuegos eligiendo el nombre del nodo, en mi caso la opción pve - Firewall - Options:
image.png
Al activar el cortafuegos a nivel del servidor, se utilizan las políticas de entrada y salida por defecto que se habían configurado en el nivel de Datacenter: todo el tráfico (de entrada y de salida bloqueado, pero se mantienen abierto el puerto 8006 (para acceder a la página web) y el 22 (para el acceso por ssh al servidor).

Nivel de máquina/contenedor

Para activar el cortafuegos para una máquina/contenedor nos vamos a la opción Firewall - Options del recurso:
image.png
Vemos las políticas por defecto para esta máquina:
Input policy: DROP, es decir se deniega todo el tráfico de entrada (y tenemos que crear reglas de cortafuegos para permitir el tráfico que nos interese).
Output Policy: ACCEPT, se acepta todo el tráfico de salida de la máquina (y tenemos que indicar las reglas de cortafuegos para denegar el tráfico que no permitamos).
Si quisiéramos un cortafuegos más restrictivo pondríamos las dos políticas por defecto a DROP, es decir, tanto el tráfico de entrada como el de salida estarían bloqueados, y tendríamos que ir creando reglas de cortafuegos para aceptar el tráfico que deseáramos permitir.
Además, cómo una máquina o contenedor pueden tener más de una interfaz podemos activar o desactivar el cortafuegos para cada interfaz de red. Por defecto, el cortafuegos está activo en cada interfaz de red, para comprobarlo vemos las características hardware de las interfaces:
image.png
Podemos modificar las características del interfaz de red para desactivar el cortafuego.
Resumen: Para poder habilitar el cortafuegos para una máquina virtual/contenedor, debemos habilitar el cortafuegos tanto a nivel de Datacenter como a nivel del servidor, finalmente podemos activar o desactivar el cortafuegos para cada una de las interfaces de red de una máquina o contenedor.

Creación de reglas de cortafuego

Como hemos visto anteriormente, si habilitamos el cortafuegos para una máquina tendrá permitido el tráfico hacia el exterior (Output Policy: ACCEPT) y tendrá denegado el tráfico desde el exterior a la máquina (Input policy: DROP).
Partimos de una máquina que tiene un servidor ssh instalado. Está máquina tendrá conectividad al exterior, pero no tendrá conectividad desde el exterior. Vamos a poner dos ejemplos de reglas:

Regla para denegar que la máquina haga ping al exterior

Todo el tráfico está permitido hacía el exterior, pero vamos a denegar el ping. Para ello debemos crear una regla de salida para denegar el protocolo ICMP, para ello, a nivel de máquina virtual, vamos a añadir una regla al cortafuego, eligiendo la opción Firewall - Add:
image.png
Ahora creamos la regla de cortafuegos, indicando si es de entrada o salida (en nuestro caso dirección out), la acción DROP, si fuera necesaria podríamos poner la ip de origen y destino e indicamos el servicio que, en este caso, queremos denegar. En este ejemplo lo vamos a elegir directamente desde una lista de servicios que encontramos en el parámetro Macro. Por último, activamos esta regla. Quedaría del siguiente modo:
image.png

Regla para permitir el acceso por ssh a la máquina

En esta ocasión tenemos que crear una regla que permita (acción ACCEPT) la entrada (dirección in) por el puerto de destino 22 del protocolo TCP. En esta ocasión no vamos a elegir el servicio de la lista de Macro, lo vamos a indicar directamente. Quedaría:
image.png

Prueba de funcionamiento

Como podemos comprobar hemos creado dos reglas:
image.png
Podemos comprobar que, aunque tiene permitido todo el acceso al exterior hemos bloqueado la posibilidad de que haga ping:
image.png
Y podemos comprobar que desde una máquina externa podemos acceder por ssh, aunque todo el tráfico desde el exterior estaba bloqueado:
image.png
Para seguir profundizando:
Want to print your doc?
This is not the way.
Try clicking the ⋯ next to your doc name or using a keyboard shortcut (
CtrlP
) instead.