{
"meta": {
"title": "Servidor NFS en LXC | ProxMenux Documentation",
"description": "Expón carpetas por NFS desde dentro de un contenedor LXC de Proxmox con ProxMenux. Auto-instala nfs-kernel-server, configura una convención de grupo sharedfiles universal, gestiona /etc/exports, ACL de red y desinstalación. Requiere un contenedor privileged.",
"ogTitle": "Servidor NFS en LXC | ProxMenux Documentation",
"ogDescription": "Ejecuta un servidor NFS dentro de un contenedor LXC privileged. Grupo sharedfiles universal, ACL de red y desinstalación completa."
},
"header": {
"title": "Servidor NFS en LXC",
"description": "Ejecuta un servidor NFS de kernel dentro de un contenedor LXC de Proxmox y expón carpetas a otras máquinas en la red. ProxMenux instala nfs-kernel-server, configura una convención de grupo sharedfiles universal para que múltiples CTs privileged puedan compartir archivos limpiamente, gestiona /etc/exports y ofrece una ruta de desinstalación completa.",
"section": "Almacenamiento y compartición · LXC"
},
"privReq": {
"title": "Contenedor privileged requerido",
"body": "nfs-kernel-server necesita montar el sistema de archivos del kernel nfsd en /proc/fs/nfsd, lo que requiere CAP_SYS_ADMIN en el namespace del kernel del host — no solo en el namespace de usuario del contenedor. LXC unprivileged no expone esa capability. En la práctica, el servicio simplemente falla al arrancar con rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory) y systemd marca nfs-server.service como una dependencia fallida. El script impone un CT privileged y aborta si es unprivileged. Si no puedes usar un CT privileged, ejecuta el servidor NFS dentro de una VM."
},
"what": {
"heading": "Qué hace",
"body": "Esto es lo opuesto de la página del cliente NFS. El contenedor se convierte en un servidor NFS: expone una carpeta de su sistema de archivos a clientes en la red. Otros CTs, el host Proxmox, VMs o máquinas físicas pueden entonces montar esa carpeta.",
"diagramServerLabel": "LXC (privileged) — servidor NFS",
"diagramServerDetail": "/mnt/data\n(carpeta que expones)\n\nchown root:sharedfiles\nchmod 2775 (SGID)\n\nnfs-kernel-server\n+ rpcbind corriendo",
"diagramClientLabel": "Cualquier cliente en la red",
"diagramClientDetail": "otro CT, el host,\nuna VM, una máquina física…",
"diagramArrow": "export NFS"
},
"shared": {
"heading": "La convención del grupo \"sharedfiles\"",
"body": "Antes de exportar la carpeta, ProxMenux crea un grupo llamado sharedfiles con GID 101000 dentro del contenedor, añade cada usuario regular a él, luego pone el directorio del export a root:sharedfiles con modo 2775. El 2 al principio es el bit SGID — cada archivo o carpeta creada dentro hereda automáticamente el grupo sharedfiles.",
"gidTitle": "Por qué GID 101000 específicamente",
"gidBody": "Mapea al GID 1000 del host cuando un contenedor unprivileged lee el mismo archivo (el idmap por defecto de LXC desplaza todo en +100000). En el flujo actual de ProxMenux el propio servidor NFS corre en un CT privileged (sin desplazamiento de su lado), pero la convención mantiene el GID numéricamente consistente con CTs cliente unprivileged que puedan montar este share después. Dos CTs privileged usando ambos sharedfiles con GID 101000 pueden leer / escribir los archivos del otro limpiamente porque los números de GID coinciden de principio a fin.",
"remapTitle": "El script también crea usuarios 'remap_*' — son vestigiales aquí",
"remapBody": "Por cada usuario regular en el CT (y para UIDs comunes como 33 = www-data, 1000, 1001, 1002), el script crea un usuario paralelo remap_<uid> con UID = <uid> + 100000, todos miembros de sharedfiles. El desplazamiento +100000 imita el idmap unprivileged de LXC, pero como este script impone un CT privileged (sin desplazamiento), esos usuarios remap_* son cuentas shadow sin contraparte real en el host. Son restos inofensivos de una intención de diseño más ambiciosa. Si no los ves en getent passwd, no se rompe nada."
},
"defaults": {
"heading": "Opciones de export por defecto — léelo primero",
"warnTitle": "Las opciones por defecto incluyen no_root_squash",
"warnBody": "ProxMenux usa por defecto rw,sync,no_subtree_check,'<'strong'>'no_root_squash'<'/strong'>'. Esto significa que cualquier usuario root del cliente puede escribir como root en el export — apropiado para una LAN doméstica de confianza pero nunca para una red no confiable. Si tu CT es alcanzable desde un segmento no confiable (una red pública, un VPS, una VLAN hostil), cambia las opciones del export a root_squash en el diálogo de opciones custom."
},
"opening": {
"heading": "Abrir la herramienta",
"body": "Desde el menú principal de ProxMenux, abre Storage & Share Manager → Configure NFS Server in LXC (only privileged). ProxMenux te pide primero elegir el CT destino (y lo arranca si está parado); aborta si es unprivileged. Una vez seleccionado el CT ves este submenú con cinco opciones:",
"imageAlt": "Menú NFS Server Manager — Create / View / Delete / Status / Uninstall"
},
"howRuns": {
"heading": "Cómo se ejecuta el script (flujo Create)"
},
"network": {
"heading": "ACL de red — quién puede montar el share",
"intro": "El campo network en /etc/exports filtra qué clientes pueden montar. ProxMenux ofrece tres modos:",
"headerMode": "Modo",
"headerValue": "Valor escrito en /etc/exports",
"headerWhen": "Cuándo elegirlo",
"rows": [
{
"mode": "Red local",
"value": "192.168.0.0/16",
"whenRich": "LAN doméstica / SOHO estándar. Cubre cada dirección 192.168.*.*."
},
{
"mode": "Subnet personalizada",
"value": "tu CIDR (p. ej. 10.0.0.0/24)",
"when": "Cuando tu LAN no está en 192.168.x.x o quieres un alcance más estrecho."
},
{
"mode": "Host único",
"value": "tu IP (p. ej. 10.0.0.42)",
"when": "Solo una máquina específica debería montar. La más restrictiva."
}
]
},
"options": {
"heading": "Opciones de export explicadas",
"headerOption": "Opción",
"headerEffect": "Qué hace",
"rows": [
{
"option": "rw / ro",
"effect": "Permitir acceso de lectura-escritura o solo lectura para los clientes que conecten."
},
{
"option": "sync",
"effectRich": "Responder a las peticiones de escritura solo después de que los datos estén en disco. Más seguro que async a costa de throughput."
},
{
"option": "no_subtree_check",
"effect": "Saltar la comprobación por petición de que el archivo sigue dentro del subárbol exportado. Más rápido y evita problemas cuando los archivos se renombran a mitad de operación."
},
{
"option": "no_root_squash",
"effectRich": "Confiar en el root del cliente. Un cliente que monte como root escribe como root en el servidor. Bueno para LANs de confianza (p. ej. herramientas de backup necesitan preservar la propiedad). Reemplázalo con root_squash si no confías plenamente en cada máquina de la ACL de red."
}
]
},
"manual": {
"heading": "Equivalente manual",
"body": "Reproduce el flujo entero a mano — cada comando se ejecuta dentro del CT vía pct exec <ctid> -- o pct enter <ctid>:"
},
"view": {
"heading": "Ver exports actuales",
"body": "Cat de /etc/exports desde dentro del CT (saltando comentarios / blancos) e imprime cada export con su ACL de red y cadena de opciones. Útil para comprobar qué carpetas están expuestas antes de compartir la IP del CT con alguien."
},
"delete": {
"heading": "Eliminar un export",
"body": "Lista cada línea en /etc/exports para selección, elimina la elegida (sed -i), ejecuta exportfs -ra y reinicia nfs-kernel-server. La propia carpeta y su contenido se dejan intactos."
},
"status": {
"heading": "Comprobar estado NFS",
"body": "Pasada de diagnóstico: confirma que nfs-kernel-server y rpcbind están instalados y activos, imprime la salida de exportfs -v, lista las sesiones NFS activas (showmount -a) y las conexiones de cliente actuales."
},
"uninstall": {
"heading": "Desinstalar servidor NFS",
"body": "Limpieza completa tras confirmación: para + deshabilita nfs-kernel-server y rpcbind, vacía /etc/exports, hace apt-get purge de los paquetes NFS, elimina el grupo sharedfiles y los usuarios remap_*, mata cualquier proceso residual. Las propias carpetas exportadas no se borran — solo la configuración NFS y los paquetes.",
"warnTitle": "El script se detiene en la línea del export, no en los datos",
"warnBody": "Tanto Delete export como Uninstall NFS server eliminan la configuración del export. Los datos en la carpeta exportada se preservan. Para borrar también los datos, hazlo explícitamente con rm -rf después de que el script termine — y haz backup primero si alguien todavía podría necesitarlos."
},
"troubleshoot": {
"heading": "Solución de problemas",
"privTitle": "Contenedor privileged requerido (el script aborta)",
"privBody": "El CT seleccionado es unprivileged. nfs-kernel-server no puede arrancar ahí porque montar /proc/fs/nfsd necesita CAP_SYS_ADMIN en el namespace del kernel del host, y el módulo nfsd tampoco está expuesto al namespace del contenedor (modprobe nfsd desde dentro devuelve FATAL: Module nfsd not found). Si te saltas el gate, verás rpc.nfsd: Unable to access /proc/fs/nfsd errno 2 (No such file or directory) en el journal y ningún puerto NFS llegará a abrirse. Las únicas opciones viables son: convertir el CT a privileged, o mover el servidor NFS a una VM.",
"aptTitle": "apt-get install falla",
"aptIntro": "El script asume un CT de la familia Debian. En Alpine / Arch / Rocky / Alma, instala los paquetes del servidor NFS a mano:",
"aptItems": [
"Alpine: apk add nfs-utils",
"Arch: pacman -S nfs-utils",
"Rocky / Alma: dnf install nfs-utils"
],
"aptOutro": "Después reejecuta el script de ProxMenux — el paso de instalación se salta cuando las herramientas ya están presentes.",
"aclTitle": "El cliente no puede montar: 'access denied by server'",
"aclBody": "La IP del cliente está fuera de la ACL de red que configuraste. Vuelve a crear el export con una subnet más amplia, o añade la IP exacta del cliente. Pega común: los clientes que conectan a través de NAT del router pueden aparecer con la IP WAN del router, no la IP LAN del cliente — comprueba en el servidor con tcpdump -n port 2049.",
"ownTitle": "Los archivos escritos por el cliente aparecen con propiedad rara en el servidor",
"ownIntro": "Dos posibilidades:",
"ownItems": [
"Con no_root_squash (por defecto), el root del cliente escribe como root en el servidor. Los archivos pertenecen a root:sharedfiles gracias al SGID de la carpeta.",
"Los usuarios cliente no-root escriben como su propio UID/GID. Si su UID no existe en el servidor, los archivos aparecen con números raw (p. ej. 1234:1234). Usa el grupo sharedfiles también en el cliente, o alinea UIDs entre los sistemas que comparten archivos."
],
"noShowTitle": "El servidor es alcanzable pero showmount no devuelve nada",
"noShowBody": "Tras editar /etc/exports, debes recargar la tabla de exports con exportfs -ra y reiniciar nfs-kernel-server — el script hace ambas cosas, pero si editaste el archivo a mano, hazlo tú. Confirma también que el firewall en el CT (y en el host Proxmox) permite TCP/UDP 2049 y el puerto rpcbind (111)."
},
"related": {
"heading": "Relacionado",
"items": [
{
"href": "/docs/storage-share/lxc-nfs-client",
"label": "Cliente NFS en LXC",
"tail": " — el inverso: monta shares NFS externos desde dentro de un CT."
},
{
"href": "/docs/storage-share/lxc-samba-server",
"label": "Servidor Samba en LXC",
"tail": " — página hermana, mismo patrón con SMB / CIFS en vez de NFS."
},
{
"href": "/docs/storage-share/host-nfs",
"label": "Share NFS como almacenamiento de Proxmox",
"tailRich": " — una vez que tu CT esté exportando, registra ese share NFS en Proxmox para que aparezca bajo Datacenter → Storage."
}
]
}
}