Configuração do servidor NFS

O seguinte não especifica o NFS versão 2 versus 3 versus 4; as etapas abaixo funcionaram para mim usando o NFS versão 3 compilado com o kernel do servidor e do cliente (o servidor é uma máquina Debian Etch, o cliente era outra distribuição Linux).

Se você deseja configurar o NFSv4 com o Kerberos, consulte: ?pt_BR/NFS/Kerberos.

Verifique se você possui suporte ao servidor NFS no kernel do servidor (módulo do kernel chamado "knfsd.ko" no diretório /lib/modules/uname -r/)

  $ grep NFSD /boot/config-`uname -r`

ou similar (onde quer que você tenha escondido seu arquivo de configuração, por exemplo, talvez em /usr/src/linux/.config.)

Em seguida, observe que existem pelo menos duas implementações principais de servidor NFS no momento (excluindo as implementadas em Python e similares): uma implementada no espaço do usuário (mais lento, mais fácil de depurar) e a outra implementada no espaço do kernel (mais rápido). A baixo mostra a configuração do espaço no kernel.

Primeiro, os pacotes para começar:

 $ apt install nfs-kernel-server portmap

OBSERVAÇÃO: O pacote portmap é necessário apenas se você deseja executar um servidor NFSv2 ou NFSv3. Se todos os seus clientes suportam NFSv4, você pode desativar o NFSv2 e o NFSv3 (conforme descrito na seção "Apenas NFSv4" abaixo) e pular a seção "Portmap" abaixo.

Portmap

Observe que o portmap padroniza apenas escutar as tentativas de conexão NFS no 127.0.0.1 (localhost); portanto, se você deseja permitir conexões na sua rede local, é necessário editar /etc/default/portmap, para comentar a linha "OPTIONS". Além disso, precisamos garantir que o arquivo /etc/hosts.allow permita conexões à porta do portmap. Por exemplo:

 $ perl -pi -e 's/^OPTIONS/#OPTIONS/' /etc/default/portmap
 $ echo "portmap: 192.168.1." >> /etc/hosts.allow
 $ /etc/init.d/portmap restart

Veja 'man hosts.allow' para exemplos de sintaxe. Mas, em geral, especificar apenas parte do endereço IP como em 192.168.1. (deixando incompleto à direita) trata o fragmento de endereço IP especificado como um curinga, permitindo todos os endereços IP no intervalo 192.168.1.0 a 192.168.1.255 (neste exemplo). Pode-se fazer mais "curingas" usando nomes DNS e outros padrões. Note que o 'portmap' é fornecido pelo pacote debian 'rpcbind' (pelo menos no Stretch).

Compartilhar pasta na rede

Edite o arquivo /etc/exports, com as listas das pastas do servidor para compartilhar com as máquinas clientes através do NFS. E crie a tabela NFS com "exportfs -a". O exemplo a seguir adiciona a linha com o caminho da pasta "/example", para ser acessada por qualquer máquina na rede local (aqui 192.168.1.*).

 $ echo "/example 192.168.1.0/255.255.255.0(rw,no_root_squash,subtree_check)" >> /etc/exports
 $ exportfs -a
 $ /etc/init.d/nfs-kernel-server reload

Isso instrui o servidor a compartilhar essa pasta para leitura e alteração, com alterações sendo feitas com o ID do usuário root pelos clientes em vez de serem mapeados para o usuário 'nobody' (ninguém) e usar o 'subtree_check' para silenciar uma mensagem de aviso. Em seguida, reinicie o serviço.

Nota: Se você quiser que o /etc/exports compartilhe através do NFS para vários endereços, use entradas separadas por espaço. A sintaxe é assim:

 $ echo "/multi-example    192.168.1.0/24(rw) 172.16.1.0/24(ro)  10.11.12.0/24(rw)" >> /etc/exports

Check which versions of NFS the server is running this way:

    root@deb9:/# cat /proc/fs/nfsd/versions
    -2 -3 +4 +4.1 +4.2
In this case, nfs2, nfs3 are disabled. NFS 4, 4.1, and 4.2 are enabled.  Any client trying to connect with NFSv2 or NFSv3 should get an error.

Do lado do cliente (por exemplo, uso um disco de "resgate" PLD para inicializar uma máquina Windows para alguns diagnósticos e uso o suporte nativo ao cliente NFS para acessar uma pasta do meu outro computador), você precisa garantir que o portmap está em execução e o suporte ao cliente NFS está embutido no kernel ou o módulo apropriado ("nfs.ko") está carregado e, em seguida, monte o caminho do servidor da seguinte maneira:

 $ mount 192.168.1.100:/example /mnt/example

Para ajudar na depuração:

NFSv4 only

Especificidades do NFSv4

Para habilitar apenas o NFSv4 e mais novos (desabilitando a segunda e terceira versão), defina as seguintes variáveis em /etc/default/nfs-common e /etc/default/nfs-kernel-server. Observe que o RPCNFSDOPTS não está presente por padrão e precisa ser adicionado.

NEED_STATD="no"
NEED_IDMAPD="yes"

RPCNFSDOPTS="-N 2 -N 3"
RPCMOUNTDOPTS="--manage-gids -N 2 -N 3"

Além disso, o rpcbind não é necessário pelo NFSv4, mas será iniciado como um pré-requisito pelo nfs-server.service. Isso pode ser evitado mascarando o rpcbind.service e o rpcbind.socket:

sudo systemctl mask rpcbind.service
sudo systemctl mask rpcbind.socket

O NFSv4 requer apenas uma única porta (TCP/UDP 2049) e não requer a instalação do serviço portmap.

Atender apenas IPs específicos

Por padrão, o NFS escutará as conexões em todas as portas. Para escutar apenas conexões NFS(v4) em um endereço IP específico, adicione a opção -H a RPCNFSDOPTS no /etc/default/nfs-kernel-server:

RPCNFSDOPTS="-N 2 -N 3 -H 10.0.1.1"

Como alternativa, um nome de host pode ser fornecido em vez de um endereço IP. A opção -H também pode ser fornecida várias vezes para ouvir em vários IPs diferentes.

Consulte https://manpages.debian.org/stretch/nfs-kernel-server/rpc.nfsd.8.en.html rpc.nfsd manpage para ver todas as opções disponíveis ao RPCNFSDOPTS.


Veja Também (em inglês):


CategoryNetwork CategorySoftware CategorySystemAdministration