====== 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