[TUTORIAL] NFS - Network File System

ChicoFedora
editado abril 2019 em Server

NFS (acrônimo para Network File System) é um sistema de arquivos distribuídos desenvolvido inicialmente pela Sun Microsystems, Inc., a fim de compartilhar arquivos e diretórios entre computadores conectados em rede, formando assim um diretório virtual. O protocolo Network File System é especificado nas seguintes RFCs: RFC 1094, RFC 1813 e RFC 7931 (que atualiza a RFC 7530, que tornou obsoleta a RFC 3530).

Finalidade

O cliente NFS tem por finalidade tornar o acesso remoto transparente para o usuário do computador, e esta interface cliente e servidor, executada pelo NFS através dos protocolos Cliente-Servidor, fica bem definida quando o usuário, ao chamar um arquivo/diretório no servidor, lhe parece estar acessando localmente, sendo que está trabalhando com arquivos remotamente. Existe uma certa semelhança desse protocolo com o CIFS pois os dois permitem o compartilhamento de recursos entre sistemas, por meio de uma rede de computadores, com arquitetura cliente-servidor, e quaisquer que sejam suas plataformas de hardware e software.

Utilização

Um exemplo da utilização do NFS é a disponibilização das áreas de trabalho dos usuários em toda a rede e, quando este efetua o login, seu diretório de trabalho pode ser acessado via NFS. Supondo que o usuário mude de estação de trabalho, o seu diretório pode ser disponibilizado novamente nesta estação e sem que nenhuma configuração adicional seja realizada.
Sua interface é pública e muito utilizada para o compartilhamento de leituras e organizações acadêmicas, pelas vantagens de, entre outras: transparência; unificação de comandos; redução de espaço local; independência de sistemas operacionais e hardware.

Para um sistema cliente-Servidor, o cliente pode sempre que logar na máquina "importar" automaticamente os diretórios e arquivos que o mesmo criou na sua área pessoal, por exemplo (para implementar esse sistema de importação de arquivo associado a um usuário em específico é necessário ter configurado um Sistema com LDAP ou NIS, além do NFS).

Ambiente:

Para este laboratório foi utilizado 4 hosts:
DNS01, DNS02 - Já criados em nosso último lab aqui
Server01, também criado no nosso último lab
E NFS server que iremos criar agora.

Descrição dos servidores:
NFS Detalhes:
Sistema Operacional : CentOS 7.6 server
Hostname : nfs.fedorabr.lab
**IP **: 192.168.122.202/24

Cliente Detalhes:
Sistema Operacional : CentOS 7.6 server
Hostname : server01.fedorabr.lab
IP Address : 192.168.122.150/24

Procedimento iniciais

Lembram que agora temos um serviço de dns em nossa rede? Pois bem vamos usar esses servidores.

1 - Configuração de rede servidor NFS:

[root@nfs ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

Conteúdo do arquivo ifcfg-eth0:

Modificar as entradas DNS1,DNS2,DOMAIN:

TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="no"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="212268c5-47a2-42be-818e-6b0eb4cedf33"
DEVICE="eth0"
ONBOOT="yes"
IPADDR="192.168.122.202"
PREFIX="24"
GATEWAY="192.168.122.1"
DNS1="192.168.122.200"
DNS2="192.168.122.201"
DOMAIN="fedorabr.lab"

Salve e saia do "vi".

2- Adicionando servidor NFS no DNS:

2.1 - Acessar o servidor dns01

[root@Sango ~]# ssh root@dns01.fedorabr.lab

2.2 - Editar o arquivo /var/named/forward.fedorabr e criar a entrada do servidor

[root@dns01 ~]# vim /var/named/forward.fedorabr

Conteúdo do arquivo forward.fedorabr, já com a entrada do servidor nfs:

$TTL 86400
   IN  SOA     dns01.fedorabr.lab. root.fedorabr.lab. (
        3011071004  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@       IN  NS          dns01.fedorabr.lab.
@       IN  NS          dns02.fedorabr.lab.
@       IN  A           192.168.122.200
       IN  A           192.168.122.201
       IN  A           192.168.122.202
       IN  A           192.168.122.150
dns01           IN  A   192.168.122.200
dns02           IN  A   192.168.122.201
nfs             IN  A   192.168.122.202
server01        IN  A   192.168.122.150

Observe que o ultimo numero do serial foi modificado, isso é necessário para que seja replicado no servidor slave

Salve e saia.

2.3 - Agora precisamos editar o arquivo /var/named/reverse.fedorabr e criar a entrada do servidor

[root@dns01 ~]# vim /var/named/reverse.fedorabr

Conteúdo do arquivo reverse.fedorabr, já com a entrada do servidor nfs:

$TTL 86400
   IN  SOA     dns01.fedorabr.lab. root.fedorabr.lab. (
        3011071004  ;Serial
        3600        ;Refresh
        1800        ;Retry
        604800      ;Expire
        86400       ;Minimum TTL
)
@        IN  NS         dns01.fedorabr.lab.
@        IN  NS         dns02.fedorabr.lab.
@        IN  PTR        fedorabr.lab.
dns01    IN  A          192.168.122.200
dns02    IN  A          192.168.122.201
nfs      IN  A          192.168.122.202
server01 IN  A          192.168.122.150
200      IN  PTR        dns01.fedorabr.lab.
201      IN  PTR        dns02.fedorabr.lab.
202      IN  PTR        nfs.fedorabr.lab.
150      IN  PTR        server01.fedorabr.lab.

Observe que o ultimo numero do serial foi modificado, isso é necessário para que seja replicado no servidor slave

2.4 - Reiniciando os serviços do DNS

[root@dns01 ~]# systemctl restart named.service

2.5 - Testando entradas no DNS e validando as novas entradas

[root@dns01 ~]# nslookup fedorabr.lab
Server:     192.168.122.200
Address:    192.168.122.200#53

Name:   fedorabr.lab
Address: 192.168.122.202
Name:   fedorabr.lab
Address: 192.168.122.200
Name:   fedorabr.lab
Address: 192.168.122.150
Name:   fedorabr.lab
Address: 192.168.122.201

3 - Validando comunicação com DNS no servidor NFS

3.1 - No CentOS se faz necessário a instalação do pacote "bind-utils" nele contém os comandos "dig" e "nslookup" que vamos precisar para nosso teste, já o pacote policycoreutils-python é necessário para as devidas configurações de segurança do SELinux

[root@nfs ~]# yum install bind-utils policycoreutils-python

3.2 - Teste com dig

[root@nfs ~]# dig dig nfs.fedorabr.lab
; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> dig nfs.fedorabr.lab
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 43618
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;dig.               IN  A

;; AUTHORITY SECTION:
.           10725   IN  SOA a.root-servers.net. nstld.verisign-grs.com. 2019041500 1800 900 604800 86400

;; Query time: 1 msec
;; SERVER: 192.168.122.200#53(192.168.122.200)
;; WHEN: Seg Abr 15 11:28:09 -03 2019
;; MSG SIZE  rcvd: 107

;; Got answer:
;; ->>HEADER

3.3 - Teste com nslookup

[root@nfs ~]# nslookup nfs.fedorabr.lab
Server:     192.168.122.200
Address:    192.168.122.200#53

Name:   nfs.fedorabr.lab
Address: 192.168.122.202

4 - Configurações de compartilhamento com NFS via "exports

4.1 - Agora vamos configurar um diretório para ser compartilhado na rede via NFS

[root@nfs /]# mkdir dados

4.2 - Vamos criar agora um diretório para poder separar os volumes compartilhados

[root@nfs /]# cd /dados
[root@nfs dados]# mkdir comunidade

4.3 - Configuração do diretório "comunidade" no nfs atráves do arquivo "/etc/exports"

[root@nfs dados]# vim /etc/exports

No arquivo "exports" vamos compartilhar o diretorio "omunidade" dentro do "/dados" este diretório só vai ter acesso a nossa rede "192.168.122.0/24"

Conteúdo do arquivo "exports"

/dados/comunidade 192.168.122.0/24(sync,rw,no_root_squash)

4.4 - Iniciando os serviços necessários e habilitando para inicialização

[root@nfs dados]# systemctl start rpcbind
[root@nfs dados]# systemctl start nfs-server
[root@nfs dados]# systemctl start rpc-statd
[root@nfs dados]# systemctl start nfs-idmapd
[root@nfs dados]# systemctl enable rpcbind
[root@nfs dados]# systemctl enable nfs-server

4.5 - Verificando os diretorios disponivéis no servidor NFS

[root@nfs dados]# showmount -e 192.168.122.202
Export list for 192.168.122.202:
/dados/comunidade 192.168.122.0/24

5 - Configurando Firewall para liberar acesso aos clientes

[root@nfs dados]# firewall-cmd --permanent --zone public --add-service mountd
success
[root@nfs dados]# firewall-cmd --permanent --zone public --add-service rpc-bind
success
[root@nfs dados]# firewall-cmd --permanent --zone public --add-service nfs
success
[root@nfs dados]# firewall-cmd --reload
success

6 - Configurações do SELinux para liberar acesso aos clientes

6.1 - Criando contexto para o diretório "/dados/comunidade"

[root@nfs /]# semanage fcontext -a -t nfs_t "/dados/comunidade/(/.*)?"

6.2 - Aplicado os contexto no diretório "/dados/comunidade"

[root@nfs /]# restorecon -R -v /dados/comunidade/

6.3 - Reiniciando os serviços do NFS

[root@nfs /]# systemctl restart nfs-server.service

Bem até aqui já temos o nosso servidor pronto, precisamos agora configurar o cliente para acessar o diretório do NFS

7 - Configurações do cliente "server01.fedorabr.lab"

7.1 - Acessando o servidor cliente

[root@Sango ~]# ssh root@server01.fedorabr.lab

7.2 - Instalação do pacote "nfs-utils"

[root@server01 ~]# yum install nfs-utils 

7.3 - Verificando diretórios disponíveis no servidor NFS

[root@server01 ~]# showmount -e nfs.fedorabr.lab 
Export list for nfs.fedorabr.lab:
/dados/comunidade 192.168.122.0/24

Obs: Bem aqui podemos ver que inves de fornecermos o ip do servidor NFS, fornecemos o hostname cadastrado no DNS, pois se em algum momento esse servidor for modificado para outro não precisamos fazer as alterações nos clientes apenas no nosso DNS. ;)

7.4 - Realizando testes de montagem e escrita no diretorio compartilhado.

[root@server01 /]# mount -t nfs nfs.fedorabr.lab:/dados/comunidade /comunidade
[root@server01 /]# df -h
Sist. Arq.                          Tam. Usado Disp. Uso% Montado em
/dev/mapper/centos_server01-root     37G  1,3G   36G   4% /
devtmpfs                            484M     0  484M   0% /dev
tmpfs                               496M     0  496M   0% /dev/shm
tmpfs                               496M  6,8M  489M   2% /run
tmpfs                               496M     0  496M   0% /sys/fs/cgroup
/dev/vda1                          1014M  163M  852M  17% /boot
tmpfs                               100M     0  100M   0% /run/user/0
nfs.fedorabr.lab:/dados/comunidade   40G   33M   40G   1% /comunidade
[root@server01 /]# cd /comunidade/

[root@server01 comunidade]# mkdir fedora

[root@server01 comunidade]# ls
fedora

[root@server01 comunidade]# cd fedora

[root@server01 fedora]# touch chicofedora

[root@server01 fedora]# ls
chicofedora

[root@server01 fedora]# echo "Um por todos e todos por um..." > chicofedora

[root@server01 fedora]# cat chicofedora 
Um por todos e todos por um...

Ok, até aqui verificamos que nosso servidor NFS esta ok e funcional, porém ao reiniciar nosso servidor (server01), o nosso diretório não vai esta disponível pois o mesmo foi montado temporariamente, nossa missão agora é deixar essas configurações permanentes, para tal vamos editar nosso arquivo "/etc/fstab" e deixar esse ponto de montagem automatico na inicialização do nosso sistema.

8 - Criando entrada de ponto de montagem NFS, ativo no arquivo "/etc/fstab"

8.1 - Editando o "/etc/fstab"

[root@server01 fedora]# vi /etc/fstab
#
# /etc/fstab
# Created by anaconda on Fri Apr 12 17:01:55 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos_server01-root /                       xfs     defaults        0 0
UUID=64b1fcf5-0f7f-4d0b-9d22-de6104892017 /boot                   xfs     defaults        0 0
/dev/mapper/centos_server01-swap swap                    swap    defaults        0 0

Vá até a última linha e adcione a linha correspondente ao ponto de montagem NFS deixando como o exemplo abaixo:

#
# /etc/fstab
# Created by anaconda on Fri Apr 12 17:01:55 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos_server01-root /                       xfs     defaults        0 0
UUID=64b1fcf5-0f7f-4d0b-9d22-de6104892017 /boot                   xfs     defaults        0 0
/dev/mapper/centos_server01-swap swap                    swap    defaults        0 0

# Volume NFS 
nfs.fedorabr.lab:/dados/comunidade      /comunidade     nfs     defaults,_netdev   0 0

Salve o arquivo e saia

8.2 - Desmontando o teste anteriormente realizado

[root@server01 /]# umount /comunidade/

8.3 - Montando o diretório NFS com as configurações feitas no arquivo "/etc/fstab"

[root@server01 /]# mount -a
[root@server01 /]# df -h
Sist. Arq.                          Tam. Usado Disp. Uso% Montado em
/dev/mapper/centos_server01-root     37G  1,3G   36G   4% /
devtmpfs                            484M     0  484M   0% /dev
tmpfs                               496M     0  496M   0% /dev/shm
tmpfs                               496M  6,8M  489M   2% /run
tmpfs                               496M     0  496M   0% /sys/fs/cgroup
/dev/vda1                          1014M  163M  852M  17% /boot
tmpfs                               100M     0  100M   0% /run/user/0
nfs.fedorabr.lab:/dados/comunidade   40G   33M   40G   1% /comunidade

8.4 - Verificando o conteúdo do arquivo que foi criado durante os testes

[root@server01 /]# cat /comunidade/fedora/chicofedora 
Um por todos e todos por um...

Fim, boa sorte nos estudos e qualquer duvida estamos a disposição, lembrando que seu feedback nos ajuda a melhorar.

Comentários