Table of Contents
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