Replicando namespaces DFS en Linux
- jogofus
- hace 6 días
- 3 min de lectura
Hay una característica que yo he usado en Windows y que, personalmente, echaba en falta en Linux.
No ha sido hasta hoy que me he puesto a investigar si existía la posibilidad de replicar este escenario.
El problema que me he encontrado es que en Internet todo el mundo hablaba de almacenamiento distribuido, tipo Ceph/GlusterFS o cosas así.
Yo buscaba una cosa concreta, muy concreta: generar un namespace que permita acceder al resto de recursos compartidos en distintos servidores desde un punto central.
Esto nos da una ventaja: el usuario no tendrá que estar recordando qué servidores existen ni qué carpetas compartidas son. Con que accedan al "central" lo tendrán todo, aunque por detrás esté escribiendo en otro servidor.

¿Qué son los namespaces DFS?
DFS-N (Distributed File System Namespace) es un rol de Windows Server que permite agrupar carpetas compartidas alojadas en distintos servidores bajo un único árbol de nombres lógico (ej. \\dominio\publico\proyectos), de forma que el cliente ve una ruta unificada sin saber en qué servidor físico reside cada recurso.
Es puramente una capa de referencia/redirección — no mueve ni sincroniza datos. Eso lo hace DFS-R (Replication), un componente separado y opcional que sí replica el contenido entre los distintos objetivos de carpeta.
La alternativa FOSS: Samba+Linux
Para poder replicar el mismo escenario, deberemos hacer uso de las características de samba en Linux.
Para este laboratorio tendremos 3 servidores, uno central, que se llamará namespace y otros dos, que se llamarán targetA y targetB. Los 3 son servidores Debian (concretamente la versión 13.4 y samba 4.22).
El servidor namespace tiene IP 172.16.200.100, targetA la 172.16.200.101 y targetB la 172.16.200.102.
Previamente había creado un dominio en Windows que se llamará CASAJOSE.LOCAL.
Primer paso: unir al dominio
Parece obvio, pero para que un usuario de nuestro dominio pueda acceder a un recurso compartido en el namespace DFS, los 3 servidores (o el número de servidores que tengamos) deben pertenecer al dominio.
El paso de unirlo al dominio lo doy por sentado (seguramente haya una entrada exclusivamente para ello próximamente).
Segundo paso: crear los recursos en los target
Deberemos crear el árbol de directorios en cada target. En mi caso he creado una estructura en /opt.
mkdir -p /opt/samba/resources/carpetaA
mkdir -p /opt/samba/resources/carpetaB
mkdir -p /opt/samba/resources/carpetaCDeberemos asegurarnos de que los usuarios que queramos tengan permisos de lectura y escritura.
Luego, en el fichero de /etc/samba/smb.conf crearemos el recurso.
No deben contenter mayúsculas, ya que cuando creemos los enlaces en el namespace esto hará que se rompa diciendo que la ruta no existe.
Ejemplo de una carpeta compartida:
[targetb]
path = /opt/samba/resources/carpetaB
valid users = "CASAJOSE\jmgomez"
writeable = yes
read only = no
browseable = yesEn este caso solo le estoy dando permisos al usuario jmgomez, por lo que ningún otro usuario podrá acceder a este recurso.
Tercer paso: crear el namespace
En el servidor central, en el namespace, deberemos ajustar el fichero smb.conf con los siguientes parámetros.
En la sección global:
[global]
# Change this to the workgroup/NT-domain name your Samba server will part of
workgroup = CASAJOSE
realm = CASAJOSE.LOCAL
security = ads
host msdfs = yes
log level = 10 winbind:10Y creamos el recurso:
[namespacedfs]
path = /opt/samba/resources
valid users = "CASAJOSE\jmgomez"
msdfs root = yes
browseable = yes
guest ok = no
writeable = yes
wide links = yes
unix extensions = noCreamos la carpeta destino:
mkdir -p /opt/samba/resourcesAccedemos a ella y creamos los enlaces simbólicos, especiales, de msdfs:
ln -s 'msdfs:targetA.casajose.local\targeta' carpeta1
ln -s 'msdfs:targetB.casajose.local\targetb' carpeta2
ln -s "msdfs:targetA.casa.jose.local\targetc,msdfs:targetB.casajose.local\targetc' carpeta3Paso final: reiniciar servicios y hacer uso de los recursos
Reiniciamos samba y procedemos a acceder a los recursos. Podemos hacerlo desde un cliente Windows o con smbclient, como más nos guste.
systemctl restart smbd
smbclient //namespace.casajose.local/namespacedfs -U CASAJOSE\\jmgomez

Como se puede comprobar, se accede desde cualquier dispositivo.
Si vamos al servidor destino, en este caso targetB, podremos ver que se han creado correctamente.





Comentarios