Problema
Los usuarios que quieren abandonar los servicios de almacenamiento en la nube buscan una alternativa local que sea accesible desde varios dispositivos (Android, Windows, Linux) y que pueda exponerse de forma segura fuera del hogar (por ejemplo, mediante WireGuard). La decisión típica recae entre comprar un NAS comercial listo para usar o armar una solución DIY con una Single‑Board Computer (SBC) y discos externos. Ambas opciones prometen “almacenamiento en red”, pero difieren drásticamente en arquitectura, ecosistema de software y nivel de intervención requerido. El reto es elegir una arquitectura que ofrezca:
- Redundancia de datos sin depender de software propietario.
- Acceso fiable tanto en LAN como a través de VPN.
- Mantenimiento predecible para un ingeniero familiarizado con Linux y la línea de comandos.
Causa
Los problemas habituales surgen por una combinación de factores:
- Hardware subdimensionado – Un NAS barato puede usar un CPU de bajo consumo que no soporta transcodificación o cifrado de extremo a extremo, provocando cuellos de botella bajo carga.
- Software cerrado – Sistemas operativos propietarios (por ejemplo, DiskStation Manager) ocultan la gestión de paquetes y limitan la instalación de herramientas personalizadas, lo que complica la automatización.
- RAID mal configurado – Elegir un nivel de RAID sin considerar la tolerancia a fallos o la velocidad de reconstrucción lleva a pérdidas de datos o a tiempos de inactividad prolongados.
- Red no optimizada – Conexiones de 1 GbE pueden ser insuficientes si se usan discos NVMe o si varios clientes acceden simultáneamente, y la falta de VLAN o QoS empeora la experiencia.
- Acceso remoto inseguro – Exponer puertos SMB/FTP directamente a Internet abre vectores de ataque; la ausencia de una capa VPN obliga a configuraciones ad‑hoc propensas a errores.
Solución
Una arquitectura modular basada en una SBC potente (por ejemplo, Raspberry Pi 4, Odroid N2+ o RockPro64) combinada con un chasis de discos y software de código abierto brinda control total y escalabilidad. El flujo recomendado:
-
Seleccionar la SBC
CPU de al menos 4 núcleos a 1.5 GHz, 4 GB RAM, y puertos Gigabit Ethernet. La Raspberry Pi 4 con 8 GB RAM y USB 3.0 es suficiente para uso doméstico; para cargas mayores, el RockPro64 con PCIe a SATA es ideal. -
Montar los discos
Utilizar un chasis con backplane SATA y alimentación dedicada. Configurar un ZFS pool o mdadm RAID‑1/5 según la cantidad de discos y el nivel de tolerancia deseado. ZFS ofrece autocuración y snapshots sin necesidad de hardware RAID. -
Instalar un SO minimalista
Debian Bookworm o Ubuntu Server LTS son opciones estables. Evitar entornos de escritorio para reducir consumo y superficie de ataque. -
Implementar los servicios de archivo
- Samba para clientes Windows y Android (SMB3).
- NFS para Linux/Unix.
- WebDAV opcional para acceso desde navegadores.
Configurar los shares con ACLs basadas en usuarios locales y habilitar cifrado en tránsito (SMB3 con encryption, NFSv4 con Kerberos).
-
Añadir capa VPN
Instalar WireGuard en la SBC, generar pares de claves y crear un perfil para cada dispositivo. Con una reglaAllowedIPs = 0.0.0.0/0, ::/0se permite el acceso a la red interna sin abrir puertos adicionales. -
Automatizar backups
Utilizar rsnapshot o restic para replicar datos a un disco externo o a un bucket S3 compatible. Programar snapshots ZFS cada hora y replicaciones diarias. -
Monitorizar
Desplegar Prometheus + node_exporter y Grafana para visualizar uso de CPU, I/O y latencia de red. Configurar alertas por fallos de disco o degradación del pool.
Alternativa comercial
Si la prioridad es tiempo de despliegue y soporte, un NAS de gama media (Synology DS925+, QNAP TS‑264) ofrece:
- Sistema operativo basado en Linux con paquetes Docker y Virtual Machine Manager.
- Soporte oficial para SMB, NFS, iSCSI y apps de backup.
- Interfaz web intuitiva para crear RAID‑5/6 y snapshots.
Sin embargo, la personalización está limitada a los paquetes oficiales; cualquier herramienta fuera del ecosistema requiere contenedores o máquinas virtuales, lo que añade complejidad.
Cuándo aplicar esta solución
DIY SBC es apropiado cuando:
- Se desea control total del stack (kernel, paquetes, scripts).
- Se planea integrar herramientas de desarrollo propias (por ejemplo, servicios Rust).
- El presupuesto permite comprar discos y un chasis por separado, pero no se justifica un NAS premium.
- Se necesita flexibilidad para añadir servicios (Pi‑hole, Home‑Assistant, etc.) en la misma máquina.
NAS comercial conviene cuando:
- Se prefiere una instalación “plug‑and‑play” con garantía y actualizaciones de firmware.
- La carga de trabajo incluye transcodificación de medios 4K o máquinas virtuales que requieren CPU potente y GPU integrada.
- El equipo no quiere gestionar la capa de hardware (alimentación, disipación, RAID hardware).
En entornos donde la seguridad es crítica y la exposición a Internet es frecuente, siempre se debe colocar la VPN delante del NAS, sin importar la solución elegida.
Código
# Instalar paquetes base en Debian
apt update && apt install -y \
samba nfs-kernel-server zfsutils-linux wireguard \
prometheus-node-exporter grafana
# Crear pool ZFS con 2 discos /dev/sdb /dev/sdc (RAID‑1)
zpool create -f -o ashift=12 tank mirror /dev/sdb /dev/sdc
# Exportar dataset para SMB/NFS
zfs create -o mountpoint=/srv/storage tank/data
chmod 770 /srv/storage
chown root:users /srv/storage
# Configuración mínima de Samba (añadir al final de /etc/samba/smb.conf)
cat >> /etc/samba/smb.conf <<'EOF'
[share]
path = /srv/storage
browseable = yes
read only = no
force user = root
vfs objects = streams_xattr
smb encrypt = required
EOF
systemctl restart smbd
# WireGuard: generar claves y crear /etc/wireguard/wg0.conf
wg genkey | tee /etc/wireguard/privatekey | wg pubkey > /etc/wireguard/publickey
cat > /etc/wireguard/wg0.conf <<'EOF'
[Interface]
PrivateKey = <PRIVATE_KEY>
Address = 10.0.0.1/24
ListenPort = 51820
[Peer]
PublicKey = <CLIENT_PUBLIC_KEY>
AllowedIPs = 10.0.0.2/32
EOF
systemctl enable --now wg-quick@wg0
Verificación
-
Comprobar pool ZFS
zpool status -vdebe mostrarONLINEy los discos bajomirror. -
Montar desde cliente Linux
sudo mount -t nfs 192.168.1.10:/srv/storage /mnt/testy crear un archivo; verificar que aparece en el directorio del servidor. -
Acceso SMB desde Windows
En el explorador,\\192.168.1.10\sharey crear un archivo. Confirmar que el cifrado está activo medianteGet-SmbConnectionen PowerShell. -
Conexión WireGuard
En el cliente,wg showdebe listarpeer: 10.0.0.1conlatest handshakereciente. Probar ping a10.0.0.1. -
Alertas Grafana
Acceder ahttp://<ip>:3000, crear dashboard con métricasnode_disk_io_time_seconds_total. Simular fallo de disco desconectando un disco y observar la alerta.
Notas adicionales
- Alimentación – Los discos externos pueden superar la capacidad del puerto USB de la SBC; usar una fuente de 12 V/5 A dedicada evita reinicios inesperados.
- Enfriamiento – Un chasis con ventilación activa es esencial cuando se usan discos HDD 7200 RPM; la Raspberry Pi necesita disipador y ventilador bajo carga sostenida.
- Actualizaciones del kernel – ZFS en Debian requiere el módulo
zfs-dkms; mantén el kernel actualizado para evitar incompatibilidades. - Backup fuera del sitio – Incluso con RAID, una copia fuera del sitio (NAS secundario o servicio S3) protege contra desastres físicos.
- Licencias – Algunas funciones de NAS comerciales (por ejemplo, sincronización con OneDrive) requieren licencias adicionales; evalúa si realmente las necesitas antes de comprar.