Qué vas a montar

Al terminar esta guía tu nodo Proxmox va a tener: un usuario administrador sin depender de root, autenticación en dos factores en el panel web, SSH accesible solo por clave criptográfica (nada de contraseñas), y acceso remoto completo a toda tu red doméstica desde cualquier dispositivo, sin abrir un solo puerto en el router.

Requisitos previos:


Parte 1 — Acceso remoto con Tailscale

Por qué Tailscale y no WireGuard manual o Headscale

Si no tienes todavía un firewall/router dedicado (OPNsense, pfSense) donde desplegar algo como Headscale con garantías, y no quieres pelearte con NAT del router de casa, Tailscale es la opción más rápida: se instala con un script, no toca el router, y funciona a los cinco minutos. Es una capa de VPN mesh basada en WireGuard pero gestionada — el trade-off es que dependes de su infraestructura de coordinación (no del tráfico en sí, que va cifrado punto a punto).

Paso 1 — Instalar Tailscale en el nodo Proxmox

Conéctate por SSH al nodo y ejecuta el instalador oficial:

curl -fsSL https://tailscale.com/install.sh | sh

Levanta el servicio y autentícate (te dará una URL para vincular el dispositivo a tu cuenta):

tailscale up

Paso 2 — Activar subnet routing

Por defecto Tailscale solo te da acceso al propio nodo Proxmox. Para llegar a toda tu red doméstica (192.168.1.0/24 en mi caso, ajusta al tuyo) desde fuera, actívalo como router de esa subred:

tailscale up --advertise-routes=192.168.1.0/24

Paso 3 — Habilitar IP forwarding

Sin esto el nodo no reenvía el tráfico aunque anuncie la ruta. Edita /etc/sysctl.conf:

nano /etc/sysctl.conf

Añade o descomenta estas dos líneas:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Aplica el cambio sin reiniciar:

sysctl -p

Paso 4 — Aprobar la ruta en el admin console

Entra en login.tailscale.com/admin/machines, busca tu nodo Proxmox, y aprueba manualmente la ruta anunciada (Edit route settings → marca la subred). Por defecto las rutas no se activan solas por seguridad.

Paso 5 — Instalar Tailscale en tus dispositivos

Descarga la app oficial en iOS/Android/macOS/Windows/Linux e inicia sesión con la misma cuenta. En cuanto conectes, deberías poder llegar a cualquier IP de 192.168.1.0/24, no solo al nodo Proxmox.

El problema del subnet routing en redes externas

Si te conectas desde una WiFi que también usa el rango 192.168.1.x (muy común, es el rango por defecto de la mayoría de routers domésticos), tu sistema operativo va a preferir la red local física sobre el túnel de Tailscale, porque ve la misma subred en ambos sitios y no sabe cuál priorizar. El síntoma es que Tailscale aparece conectado pero no llegas a nada de tu red de casa.

Solución rápida: convierte el nodo Proxmox en exit node de Tailscale:

tailscale up --advertise-exit-node

Apruébalo también en el admin console, y actívalo manualmente en el dispositivo cliente cuando estés en una red externa conflictiva (en la app de Tailscale: selecciona el nodo como “Exit Node”).

Solución definitiva (recomendada a medio plazo): migra tu red doméstica a un rango menos común, como 10.10.10.0/24, para que nunca coincida con una red externa.


Parte 2 — Hardening del panel de Proxmox

Paso 1 — Crear un usuario administrador (no root)

En el panel web: Datacenter → Users → Add

Luego dale permisos completos: Datacenter → Permissions → Add → User Permission

Paso 2 — Activar 2FA (TOTP) en ese usuario

Datacenter → Two Factor → Add → TOTP, selecciona tu usuario, escanea el QR con tu app de autenticación y verifica el código antes de darle a Add.

Si usas iPhone y quieres el autenticador nativo en vez de una app de terceros: Ajustes → Contraseñas → (+) → crea una entrada → dentro de ella busca “Código de verificación”“Configurar código de verificación” → escanea el QR. No es evidente a la primera, está bastante escondido.

Paso 3 — Verificar antes de seguir

No avances sin comprobar esto. Abre una ventana de incógnito y entra al panel con el usuario nuevo + contraseña + código 2FA. Si algo falla, todavía tienes root disponible para arreglarlo. Una vez confirmes que funciona, continúa.

Paso 4 — Desactivar el login de root en el panel web

Datacenter → Users → root → Edit → desmarca Enabled.

Esto no afecta al acceso por SSH — root sigue entrando por terminal, solo se bloquea el panel web. Es intencional: quieres poder recuperar el sistema por SSH si algo se rompe en el panel.

Paso 5 — Generar un par de claves SSH

En tu máquina local (no en el servidor):

ssh-keygen -t ed25519 -C "proxmox"

Acepta la ruta por defecto y pon una passphrase. Copia la clave pública al servidor:

ssh-copy-id -i ~/.ssh/id_ed25519.pub root@<ip-del-nodo>

Te pedirá la contraseña de root una última vez para autorizar la copia.

Paso 6 — Hardenizar sshd_config

Atención aquí: el fichero que necesitas es /etc/ssh/sshd_config (configuración del servidor), no /etc/ssh/ssh_config (configuración del cliente). Son nombres casi idénticos y editar el equivocado no da ningún error — simplemente no cambia nada, y pierdes tiempo sin saber por qué.

nano /etc/ssh/sshd_config

Modifica o añade:

PermitRootLogin prohibit-password
PasswordAuthentication no
Port 2222

Reinicia el servicio SSH:

systemctl restart sshd

Paso 7 — Verificar de nuevo antes de cerrar la sesión actual

No cierres tu sesión SSH actual todavía. Abre una terminal nueva y prueba a conectar con la clave, en el nuevo puerto:

ssh -i ~/.ssh/id_ed25519 -p 2222 root@<ip-del-nodo>

Si entra sin pedir contraseña, ya está. Si falla, todavía tienes la sesión original abierta para corregir el fichero.


Checklist final

Siguientes pasos

Con esto tienes la base segura. En el post general del homelab explico qué construí encima de esta base una vez asegurada.