Tres maneras de sobrevivir al apocalipsis
Episodio 2
Montando NFS en un LXC Desprivilegiado (Guía Práctica para Self-Hosting)
Cómo dar acceso a un recurso NFS a un contenedor LXC no privilegiado: se monta en el host Proxmox, se pasa al contenedor y se ajustan los UID/GID.
- Publicado
- Lectura
- 3 min
- Vistas
- 1
- Proxmox
- Networking
- LXC
- NFS
- Storage
- Mounting
Índice del episodio
🌐 Compartiendo Recursos Externos: Montaje NFS en LXC Desprivilegiado
Uno de los desafíos más comunes al montar entornos self-hosted es que los contenedores LXC no privilegiados no pueden montar sistemas de archivos de red: su root está mapeado a un usuario sin privilegios del host, así que un mount -t nfs dentro del contenedor falla.
La solución es montar la carpeta NFS en el host Proxmox y luego pasarla al contenedor como mount point.
1. Configuración del Almacenamiento en el Host
Primero, el host tiene que tener el recurso NFS montado. La forma más cómoda es darlo de alta como almacenamiento de Proxmox:
- En la interfaz web, ve a Datacenter → Storage → Add → NFS.
- Indica un ID (por ejemplo
share), la IP del servidor y la ruta exportada. - ⭐ Tipo de contenido: Proxmox obliga a elegir al menos uno, y según lo que elijas ofrecerá ese almacenamiento para discos, backups o ISOs. Si solo quieres usarlo para compartir archivos con contenedores, elige uno que no vayas a usar, como
Import, para que no aparezca como destino de discos ni de backups. - Proxmox lo monta en
/mnt/pve/<ID>. En este ejemplo,/mnt/pve/share.
2. Pasando el Montaje NFS al Contenedor LXC
Con el recurso ya montado en el host, se lo pasamos al contenedor con pct set y el parámetro mp (mount point). Esto se ejecuta en la terminal del host Proxmox:
# Sintaxis: pct set <ID_CONTENEDOR> -mp0 <RUTA_EN_EL_HOST>,mp=<RUTA_EN_EL_CONTENEDOR>
pct set 108 -mp0 /mnt/pve/share,mp=/mnt/share
Explicación Detallada de la Sintaxis:
pct set: el comando para modificar la configuración de un contenedor.108: el ID del contenedor. Cámbialo por el tuyo.-mp0: el primer mount point del contenedor. Si añades más, usa-mp1,-mp2…/mnt/pve/share: la ruta de origen en el host, donde Proxmox montó el NFS.mp=/mnt/share: la ruta donde aparecerá dentro del contenedor.
Después, reinicia el contenedor para que el montaje se active:
pct reboot 108
3. El Problema de los Permisos (UID/GID)
Aquí es donde casi todo el mundo se atasca: dentro del contenedor, los archivos aparecen como propiedad de nobody:nogroup y no se puede escribir en ellos.
Por qué ocurre: en un contenedor no privilegiado, los usuarios están desplazados. El UID 0 del contenedor es el 100000 en el host, el 1000 es el 101000, y así sucesivamente. El servidor NFS ve esos UID desplazados, y los archivos con propietario 1000 no tienen equivalente dentro del contenedor.
Hay dos soluciones.
Opción A: adaptar el servidor NFS
Haz que los archivos del recurso pertenezcan al UID desplazado (por ejemplo chown -R 101000:101000 en el servidor), o usa en el export las opciones all_squash,anonuid=101000,anongid=101000 para que todo se escriba con ese usuario. No tocas Proxmox, pero si otros equipos usan el mismo recurso, verán ese UID.
Opción B: mapear un UID concreto del contenedor al host
Le decimos a Proxmox que el usuario 1000 del contenedor sea el 1000 real del host. En el host, añade al final de /etc/pve/lxc/108.conf:
lxc.idmap: u 0 100000 1000
lxc.idmap: g 0 100000 1000
lxc.idmap: u 1000 1000 1
lxc.idmap: g 1000 1000 1
lxc.idmap: u 1001 101001 64535
lxc.idmap: g 1001 101001 64535
Y autoriza a root a usar ese ID añadiendo la línea root:1000:1 a /etc/subuid y a /etc/subgid. Reinicia el contenedor.
⚠️ Ojo: si dentro del contenedor ya existía un usuario 1000 con archivos propios, tras el cambio aparecerán como nobody. Corrígelo con un chown -R desde dentro del contenedor.
📝 Checklist Resumen de Tareas:
- Host Proxmox (GUI): añadir el NFS como almacenamiento con un tipo de contenido que no uses, como
Import. - Host Proxmox (terminal):
pct set <ID> -mp0 /mnt/pve/<ID_STORAGE>,mp=<RUTA_LXC>. - Host Proxmox: reiniciar el contenedor con
pct reboot <ID>. - Permisos: ajustar los UID en el servidor NFS o mapear el UID con
lxc.idmap.