====== NFS ====== ===== NFSv3 ===== ==== Instalacion ==== En el servidor se instalan los paquetes: sudo aptitude install nfs-common nfs-kernel-server ==== Configuracion servidor ==== 1. Editar el fichero: sudo vim /etc/exports Se añade la linea con la carpeta a comartir, en este caso /home/datos: #recurso ips con acceso permisos /home/datos 192.168.1.0/255.255.255.0(rw,async,subtree_check,no_root_squash) 2. Se reinicia el servicio: sudo exportfs -rav ==== Configuracion cliente ==== 1. Instalar estos paquetes: sudo aptitude install nfs-common portmap 2. Y se monta el recurso donde 192.168.1.3 es la ip del servidor i /home/datos su recurso compartido y /mnt/raid donde lo queremos montar en el cliente: sudo mount -t nfs 192.168.1.3:/home/datos /mnt/raid/ Para que lo pueda montar un usuario distinto a root añadir en /etc/fstab la siguiente linea: 192.168.1.3:/home/datos /mnt/raid nfs users 0 0 Y con cualquier usuario montamos la unidad: mount /mnt/raid ==== Puertos ==== http://www.lowth.com/LinWiz/nfs_help.html **Problema**: algunos de los puertos que usa NFS son aleatorios * Listar los puertos (algunos de ellos aleatorios) que esta usando el servidor NFS: sudo rpcinfo -p programa vers proto puerto 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 44903 status 100024 1 tcp 33188 status 100021 1 udp 60213 nlockmgr 100021 3 udp 60213 nlockmgr 100021 4 udp 60213 nlockmgr 100021 1 tcp 54411 nlockmgr 100021 3 tcp 54411 nlockmgr 100021 4 tcp 54411 nlockmgr 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100005 1 udp 37585 mountd 100005 1 tcp 45231 mountd 100005 2 udp 37585 mountd 100005 2 tcp 45231 mountd 100005 3 udp 37585 mountd 100005 3 tcp 45231 mountd ^ Daemon Name ^ RPM ^ Standard Port ^ Suggested Port ^ What to Change ^ | portmap | portmap | 111 | 111 | Nothing | | rpc.statd | nfs-utils | Random | 4000 | Edit /etc/init.d/nfslock | | rpc.nfsd | nfs-utils | 2049 | 2049 | Nothing | | rpc.lockd | nfs-utils & kernel | Random | 4001 | Edit /etc/modules.conf | | rpc.mountd | nfs-utils | Random | 4002 | Create or Edit /etc/sysconfig/nfs | | rpc.rquotad | quota | Random | 4003 | Install "quota" package version 3.08 or later and edit /etc/rpc and /etc/services | ==== Establecer puertos fijos ==== * **Fijar puerto de status:** 1. Backup sudo cp /etc/default/nfs-common /etc/default/nfs-common.old 2. Editar sudo vim /etc/default/nfs-common Y dejar la linea tal que asi: STATDOPTS="--port 4000" 3. Reiniciar servicios: sudo /etc/init.d/nfs-common restart Stopping NFS common utilities: idmapd statd. Starting NFS common utilities: statd idmapd. 4. Comprobar que ahora escucha en el puerto TCP 4000: sudo rpcinfo -p | grep status 100024 1 udp 4000 status 100024 1 tcp 4000 status * **Fijar puerto de nlockmgr:** 1. Backup sudo cp /etc/modules /etc/modules.old 2. Editar sudo vim /etc/modules Y anyadir la siguiente linea: lockd nlm_udpport=4001 nlm_tcpport=4001 3. Reiniciar sistema para asegurarnos que funciona: sudo shutdown -r now * **Fijar puerto de mountd:** 1. Backup sudo cp /etc/default/nfs-kernel-server /etc/default/nfs-kernel-server.old 2. Editar sudo vim /etc/default/nfs-kernel-server Y dejar la siguiente linea tal que asi: ... RPCMOUNTDOPTS="-p 4002 --manage-gids" .. 3. Reiniciar servicios: sudo /etc/init.d/nfs-kernel-server restart Stopping NFS kernel daemon: mountd nfsd. Unexporting directories for NFS kernel daemon.... Exporting directories for NFS kernel daemon.... Starting NFS kernel daemon: nfsd mountd. 4. Comprobar que ahora escucha en el puerto TCP 4000: sudo rpcinfo -p | grep mountd 100005 1 udp 4002 mountd 100005 1 tcp 4002 mountd 100005 2 udp 4002 mountd 100005 2 tcp 4002 mountd 100005 3 udp 4002 mountd 100005 3 tcp 4002 mountd ==== Ejemplo reglas iptables ==== #!/bin/bash IPTABLES=/sbin/iptables VIRT_IF="virbr1" VM="10.0.0.0/24" KVM_VM_IP="10.0.0.1" KVM_LAN_IP="192.168.1.2" NFS_PORTS=" 111 4001 2049 4002 " for port in $NFS_PORTS do if [[ "$port" != "#"* ]] then $IPTABLES -A INPUT -i $VIRT_IF -s $VM -d $KVM_VM_IP -p tcp --dport $port -j ACCEPT $IPTABLES -A INPUT -i $VIRT_IF -s $VM -d $KVM_VM_IP -p udp --dport $port -j ACCEPT fi done # NFSD $IPTABLES -A INPUT -i $VIRT_IF -s $VM -d $KVM_LAN_IP -p tcp --dport 2049 -j ACCEPT ===== NFSv4 ===== ==== Instalacion ==== **IMPORTANTE** NFSv4 exporta de forma distinta que NFSv3. En este ejemplo vamos a exportar: ^ Directorio donde se alojan los archivos ^ Punto de montaje en el servidor ^ | /srv/www | /srv/nfs/cliente1.example.com/www | | /srv/svn | /srv/nfs/cliente1.example.com/svn | 1. Servidor: sudo aptitude install nfs-common nfs-kernel-server 2. Cliente: sudo aptitude install nfs-common NOTA: en principio rpcbind **NO** hace falta ==== Configuracion comun (misma en servidor y cliente) ==== 1. Configurar los siguientes archivos: **/etc/default/nfs-common** # If you do not set values for the NEED_ options, they will be attempted # autodetected; this should be sufficient for most people. Valid alternatives # for the NEED_ options are "yes" and "no". # Do you want to start the statd daemon? It is not needed for NFSv4. NEED_STATD= # Options for rpc.statd. # Should rpc.statd listen on a specific port? This is especially useful # when you have a port-based firewall. To use a fixed port, set this # this variable to a statd argument like: "--port 4000 --outgoing-port 4001". # For more information, see rpc.statd(8) or http://wiki.debian.org/SecuringNFS STATDOPTS= # Do you want to start the idmapd daemon? It is only needed for NFSv4. NEED_IDMAPD=yes # Do you want to start the gssd daemon? It is required for Kerberos mounts. NEED_GSSD= **/etc/idmapd.conf** [General] Verbosity = 1 Pipefs-Directory = /var/lib/nfs/rpc_pipefs domain = dev.local.legido.com [Mapping] Nobody-User = nobody Nobody-Group = nogroup **IMPORTANTE**: es clave la entrada "domain", que en mi caso es la misma en el servidor que en el cliente (quiza no sea necesario) ==== Configuracion servidor ==== 0. Realizar los pasos anteriores 1. Configurar los siguientes archivos: **/etc/exports** /srv cliente1.example.com/255.255.255.0(rw,no_root_squash,no_subtree_check,crossmnt,fsid=0) 2. Se reinicia el servicio: sudo exportfs -rav ==== Configuracion cliente ==== 1. Ver los recursos que ofrece el servidor: sudo showmount -e nfs_server.example.com 2. Montar el recurso: sudo mount -v -t nfs4 nfs_server.example.com:/ /mnt/nfs 3. Comprobar permisos: ls -la /mnt/nfs **NO** deberia pertenecer a nobody:nogroup 4. Para montar definitivamente editar: sudo vim /etc/fstab Y anyadir la siguiente entrada: nfs_server.example.com:/ /mnt/nfs nfs users 0 0 5. Ahora lo puede montar cualquier usuario: mount /mnt/nfs