Instalación de Proxmox

Hola!

Voy a documentar un poco la puesta a punto del servidor con Proxmox.

Para empezar, estoy usando un servidor dedicado de Scaleway. Ofrecen ya una imagen del SO Proxmox, aunque en la versión 7 que ya no tiene soporte. Les he escrito para ver si pueden subir una más reciente.

La instalación se realiza autónomamente y una vez acabada se puede acceder al panel sin problemas.

En cuanto a la creación de una red interna, esto es el fichero /etc/network/interfaces

auto lo
iface lo inet loopback

auto eno1
iface eno1 inet manual

iface eno2 inet manual

auto vmbr0
iface vmbr0 inet static
	address XXX.XXX.XXX.XXX/24
	netmask 255.255.255.0
	gateway XXX.XXX.XXX.1
	bridge-ports eno1
	bridge-stp off
	bridge-fd 0
#	hwaddress A4:BF:01:1E:58:48

auto vmbr1
iface vmbr1 inet static
	address 10.10.10.1/24
	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 vmbr0 -j MASQUERADE
	post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o vmbr0 -j MASQUERADE

Des del panel de configuración se ve así:

Parte de esta configuración y de la siguiente la he realizado gracias a las aportaciones en este hilo, del que saqué alguna configuración y este tutorial:

También configuré un servidor DHCP:

apt install dnsmasq
vi /etc/dnsmasq.d/vnet
# /etc/dnsmasq.d/vnet
dhcp-range=10.10.10.3,10.10.10.100,12h
dhcp-option=option:dns-server,XX.XXX.XX.6
dhcp-option=option:dns-server,XX,XXX,XX.7

Los DNS los he sacado del panel de configuración del nodo.

systemctl stop systemd-resolved
systemctl disable systemd-resolved
# En la última instalación tuve que parar 'named'
systemctl stop named
systemctl start dnsmasq

Con esto, he podido instalar correctamente nuevos VM en los que instalar servicios y estos podían acceder a la red e Internet.

Redirección de Dominios

Para redirigir los dominios de los diferentes servicios a los VMs he instalado y configurado el proxy nginx.

apt install nginx python3-certbot-nginx
ln -s /usr/sbin/nginx /bin/
rm /etc/nginx/sites-enabled/default
vi /etc/nginx/sites-available/forum
server {
    listen       80; 
    listen 	[::]:80;
    server_name  discourse.anartist.org;

    location / {
        proxy_pass https://10.10.10.10:80/;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }   
}
ln -s /etc/nginx/sites-available/forum /etc/nginx/sites-enabled/
certbot --nginx -d discourse.anartist.org

El fichero final de nginx para discourse sería:

# enforce HTTPS
server {
    listen       80; 
    listen 	[::]:80;
    server_name  discourse.anartist.org;
    return 301   https://$host$request_uri;
}
server {
    listen       443 ssl http2;
    listen 	[::]:443 ssl http2;
    server_name  discourse.anartist.org;

    access_log  /var/log/nginx/discourse.access.log;
    error_log   /var/log/nginx/discourse.error.log;
    
    # SSL
    ssl_certificate      /etc/letsencrypt/live/discourse.anartist.org/fullchain.pem;
    ssl_certificate_key  /etc/letsencrypt/live/discourse.anartist.org/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/discourse.anartist.org/chain.pem;
    ssl_session_timeout  5m;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
    ssl_stapling on;
    ssl_stapling_verify on;
#    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 8.8.8.8;
    
    client_max_body_size 100m;
    
    location / {
        proxy_pass https://10.10.10.10:443/;
        proxy_set_header Host $http_host;
        proxy_http_version 1.1;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
    }    
}
2 Me gusta

Hola!

Este sábado estaré haciendo pruebas de proxmox, por si alguien quiere pasarse algún rato. Mis objetivos son:

  • Actualizar o instalar directamente Proxmox 8
  • Configurar correctamente el firewall ( T3rr0r me ha dado unas indicaciones)

@comision-tecnica

He tenido que mirar qué era eso de proxmox :joy: A qué hora? Dudo ducho que me entere de algo, pero es posible que esté en casa la mayor parte del día.

1 me gusta

Jajaja, eterno @hanimoy!!! :flexed_biceps:

Pues no tengo muy clara la hora. Quizás me ponga entre 9-10 horas. Cuando lo haga lo avisaré por aquí y me conectaré en una sala y así quien quiera y pueda en algún momento se puede unir.

Un saludo!

Jajajajaja okis. Si me levanto a tiempo, aviso. En caso de mutis, estaré roncando.

1 me gusta

Una sala de…?

Qué piezas te faltan? De lo que dices:

  • El problema de instalar Proxmox es… dónde lo quieres instalar. Me parece que pocos proveedores de hosting dan Proxmox. Yo encontré por ahí un proceso bizarro que me sirvió para instalar en Hetzner, pero es una lata si no tienes acceso por KVM (donde puedes controlar la BIOS y enchufar un disco de arranque virtual).
  • Firewall… puede ser importante, pero si usas una red interna para las VM/LXC, el NAT “te protege” las VM y LXC. Para mí lo importante es centrarse en que la máquina con Proxmox no tenga nada abierto que no deba, el firewall es secundario.

edito: ahhh, veo que Scaleway ofrece Proxmox. ¡Mola! Diría que yo hice la actualización de 7 a 8 sin problema. (Si no recuerdo mal, el lío era si tenías LXC/VMs de distros previas a no sé qué versión jurásica. Que yo tenía. Pero fuera de eso, tarda un rato pero diría que no hay que toquetear mucho.)

Una sala de jitsi, perdón. Pero cómo ahora lleva un montón (2 horas) instalando el SO sólo, tampoco tiene mucho sentido.

Sí, Scaleway ofrece Proxmox, pero la versión 7 (ya sin actualizaciones). Así que la opción que dan es la que comentas en el primer punto. Un KVM-over-IP que es muy bizarro y que está yendo a pedales.

Si acaba no funcionando (no descarto para nada) haré la instalción del 7 y actualizaré al 8 manualmente. Yo sí tuve problemas la primera vez que lo probé, pero habrá que intentarlo.

En cuanto al firewall, el que estoy intentando configurar es el de la máquina con Proxmox, sí. Me han sugerido que me fije en las políticas de FORWARD. Si quieres, cuando ya vuelva a tener el Proxmox (ojalá que 9) funcionando y tal, vuelvo a preguntar.

Na, hombre, no te preocupes. Yo ahora tengo que cumplir con obligaciones.

Me has recordado que tengo tres Proxmox que pasar a 9…

Yo tengo algo de mierda que no funciona del todo bien en /etc/network/interfaces para hacer forwarding para un servicio que tengo que es TCP/IP pelao sin http, pero creo que no filtro.

Igual puedes simplemente configurar el firewall por el UI de Proxmox y andando. Yo tengo obsesión con hacerlo todo con automatización, pero es un rollo patatero.

Ya contarás qué tal va el KVM y Scaleway en general.

Eso es lo que intenté, pero al activar el firewall, los VPS dejaban de tener acceso a internet.

OK! Sí, la idea es ir documentando las cosas e ir valorando colectivamente. Tengo 0 experiencia con Proxmox, así que eso será un aprendizaje. Pero la opción que tenemos en el servidor madre 1 es privativo, así que no es una opción real.

Por cierto, tengo un proyectillo en el que estoy jugando con montar un servidor “anárquico” donde todos los miembros tengan sudo.

Está orientado más bien a que quería crear una comunidad un poco tipo Anartist, pero más enfocada a “gente técnica en España”.

Estoy en fase de pruebas, pero si a alguien de aquí le apetece jugar- sobre todo con el propósito de aprender- puede echar un ojo aquí (más legible, pero menos libre, aquí).

(Ahora mismo sólo tengo Git, Ansible, Vaultwarden. La idea es hacer toda la configuración colaborativamente via Git y Ansible, con Vaultwarden para compartir contraseñas. O sea, que añade algo de dificultad extra sobre configurar Linux a pelo, pero eso viene con ventajas.)

1 me gusta

Está chulo! Aunque eso quizás estaría guay en un tema aparte :winking_face_with_tongue:

Creo que el enlace está vacío!

Huy, acabo de encontrar un bug en Discourse :smiley: Editado. Luego a ver si me animo y abro otro el hilo sobre el tema.

1 me gusta

Aprovechando que mi Proxmox está sobredimensionado para poder usarlo de laboratorio de pruebas, me he puesto a instalar otro Proxmox anidado para documentar el tema de hacer una red interna con dnsmasq, etc. y jugar con el firewall.

Voy escribiendo aquí:

1 me gusta

He añadido más notas, incluyendo un par de cosillas sobre el firewall.

Si activas el firewall en algún momento, ¿podrías decirme qué te dice el siguiente comando?

# ipset list
Name: PVEFW-0-management-v6
Type: hash:net
Revision: 7
Header: family inet6 hashsize 64 maxelem 64 bucketsize 12 initval 0x4d7ac321
Size in memory: 1240
References: 5
Number of entries: 0
Members:

Name: PVEFW-0-management-v4
Type: hash:net
Revision: 7
Header: family inet hashsize 64 maxelem 64 bucketsize 12 initval 0xd0331705
Size in memory: 504
References: 5
Number of entries: 1
Members:
10.43.43.0/25

Mi máquina de pruebas está en una red local, con lo que el IP set de management es la propia red local.

Me pregunto qué dice en una máquina tipo Scaleway que entiendo que tiene una IPv4 pública…

1 me gusta

Claro! Cuando lo vuelva a tener todo lo hago.

Por ahora, he conseguido instalar el ISO de pve7 y actualizar a 8 y 9 sucesivamente.

Durante esta tarde volveré a aplicar toda la configuración que hice la otra vez (primer post del hilo).

OK, me he entretenido un rato y creo que he adivinado el problema que tenías con el firewall. Lo he escrito en https://github.com/alexpdp7/xn--ix-yja.es/blob/main/blueprint/proxmox.md#configuring-the-firewall.

Al leer la docu de Proxmox se me pasó esta nota:

In some masquerade setups with firewall enabled, conntrack zones might be needed for outgoing connections. Otherwise the firewall could block outgoing connections since they will prefer the POSTROUTING of the VM bridge (and not MASQUERADE).

Adding these lines in the /etc/network/interfaces can fix this problem:

post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

, que he necesitado en mis pruebas para que Proxmox enrute tráfico de las VMs y los contenedores LXC.

Además, si usas dnsmasq (u otro DHCP/DNS), tienes que permitir el tráfico desde las VMs y los contenedores LXC. Yo lo he hecho permitiendo todo el tráfico de la red de las VMs a Proxmox, pero podrías hacer reglas más selectivas sólo para los puertos de DHCP y DNS.

1 me gusta

Vale, esto sigue sin funcionar a pesar de añadir estas líneas (las he añadido en la interfaz de vmbr1, no sé si van en otro lado!).

Cosas obvias, pero:

  • ¿Puedes probar con IPs? Tipo que si puedes hacer ping 8.8.8.8, igual simplemente es que no puedes acceder al DNS.
  • ¿Alternativamente, te funciona el DNS?
  • También puedes probar a ver si puedes acceder al Proxmox desde LXC/VM y viceversa
  • ¿Has reaplicado la configuración del interfaz?

Entiendo que lo tienes funcionando con el firewall de Proxmox desactivado, y en cuanto lo activas, LXC/VM quedan incomunicados…

Te paso lo que tengo funcionando:

root@p9:~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

auto ens18
iface ens18 inet static
        address 10.43.43.6/25
        gateway 10.43.43.1

auto vmbr0
iface vmbr0 inet static
        address  10.10.10.1/24
        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 ens18 -j MASQUERADE
        post-down iptables -t nat -D POSTROUTING -s '10.10.10.0/24' -o ens18 -j MASQUERADE
        post-up   iptables -t raw -I PREROUTING -i fwbr+ -j CT --zone 1
        post-down iptables -t raw -D PREROUTING -i fwbr+ -j CT --zone 1

source /etc/network/interfaces.d/*
root@p9:~# cat /etc/pve/firewall/cluster.fw
[OPTIONS]

enable: 1

[IPSET internal]

10.10.10.0/24

[IPSET management]

10.0.0.0/8

[RULES]

IN ACCEPT -source +dc/internal -log nolog

(edit: el IPSET management es para poder acceder al Proxmox desde mi VPN cuando activo el firewall)

Ojo, la otra cosa es que con el firewall, no sé muy bien por qué, el LXC con el que hacía pruebas ahora tarda la vida en configurarse por DHCP.

Exacto!

Mismo error: Temporary failure in name resolution.

mmm. Cómo lo hago?

He rebooteado el servidor de Promox, así que creo que sí. Cuál es la forma de aplicar la conf de interfaces sin reiniciar?

El firewall:

root@madre2:~# cat /etc/pve/firewall/cluster.fw 
[OPTIONS]

enable: 1

[RULES]

IN ACCEPT -i vmbr0 -p udp -dport 53 -log nolog # dns
IN ACCEPT -i vmbr0 -p tcp -dport 53 -log nolog # dns
IN ACCEPT -i vmbr0 -p tcp -dport 8006 -log nolog # Proxmox GUI
IN ACCEPT -i vmbr0 -p tcp -dport 22 -log nolog # SSH