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:
- Un nodo Proxmox VE ya instalado y accesible en tu red local
- Una app de TOTP en el móvil (2FAS, Google Authenticator, Microsoft Authenticator, o el autenticador nativo de iOS/Android)
- Una cuenta gratuita de Tailscale (tailscale.com)
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
- User: el nombre que quieras
- Realm:
pve - Password: una contraseña fuerte, guardada en un gestor de contraseñas
Luego dale permisos completos: Datacenter → Permissions → Add → User Permission
- Path:
/ - User: el que acabas de crear
- Role:
Administrator - Propagate: activado
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
PermitRootLogin prohibit-password— root solo puede entrar con clave, nunca con contraseñaPasswordAuthentication no— desactiva contraseñas para todos los usuariosPort 2222— cambia el puerto por defecto (reduce ruido de escaneos automáticos, no es seguridad real por sí solo)
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
- Tailscale instalado y con subnet routing activo
- Ruta aprobada en el admin console
- IP forwarding habilitado
- Usuario admin con permisos completos, sin depender de root
- 2FA activo y verificado
- Root desactivado en el panel web
- SSH solo por clave, puerto no estándar
- Acceso verificado en cada paso antes de cerrar el anterior
Siguientes pasos
Con esto tienes la base segura. En el post general del homelab explico qué construí encima de esta base una vez asegurada.