No lado do servidor, tenho:
CentOS 7 updated
Kernel 4.13.12-1.el7.elrepo.x86_64
nfs-utils-1.3.0-0.48.el7_4.x86_64
libnfsidmap-0.25-17.el7.x86_64
No lado do cliente, exatamente o mesmo ambiente.
Temos um iptables, mas permite qualquer comunicação entre clientes e servidor (qualquer porta com qualquer protocolo).
A maioria dos clientes pode se conectar e montar um diretório de compartilhamento NFS exportado normalmente, sem nenhum problema. Eles têm exatamente o mesmo ambiente com exatamente as mesmas regras de iptable.
Alguns deles não podem montar o compartilhamento NFS e não tenho registros sobre isso.
Chamando um desse cliente problemático como CLIENT-A, se eu tentar montar o NFS manualmente, não tenho nenhum erro ou aviso ou qualquer tipo de log:
[root@]# mount -vvv -t nfs MYSERVER:/home/shared/ /home/shared/
Às vezes, esse comando suspende o terminal, às vezes não. Se eu cancelar esse comando ou fizer um novo ssh e tentar fazer ls em / home, o terminal irá travar:
[root@]# ls /home/sha
(quando eu pressionei TAB, ele caiu sem erro). Mesmo se eu tentar escrever manualmente e pressionar enter, vou ter a mesma situação. Ele só irá travar depois de reiniciar o servidor. O comando "lsof" irá travar também.
E nas duas situações acima, não há erro de tempo limite. Eles nunca terminam. Eu já tentei reiniciar e tente novamente, sem sucesso. E repito: eles têm exatamente o mesmo ambiente. Você pode pensar como um clone com hardware e IP diferentes, mas com o mesmo software. Sim, não garante resultados igualmente, mas em geral a ideia de softwares é mostrar o mesmo resultado.
Eu posso criar uma conexão tcp com o servidor NFS manualmente:
[root@localhost]# telnet MYSERVER 2049
Trying MYSERVERIP...
Connected to MYSERVER.
Escape character is '^]'.
Não tenho registros em ambos os lados sobre o que está acontecendo. Eu acho que eles estão tentando criar uma conexão com a versão 4.1 do nfs (última versão desse módulo). Eu tentei a versão 3 manualmente sem sucesso.
Eu executei "rpcinfo -p localhost" no lado do servidor e encontrei uma questão curiosa: Alguns clientes estão usando a versão 4, alguns deles 3, 2 ou 1 (2 ou 1 ???? !!!). / p>
[root@ ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 59356 status
100024 1 tcp 50117 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 58205 nlockmgr
100021 3 udp 58205 nlockmgr
100021 4 udp 58205 nlockmgr
100021 1 tcp 38641 nlockmgr
100021 3 tcp 38641 nlockmgr
100021 4 tcp 38641 nlockmgr
Então eu encontrei um cliente que está usando o NFSV3 e eu fiz:
[root@ ~]# mount -vvv -t nfs -o vers=4 MYSERVER:/home/shared/ /home/shared/
mount.nfs: timeout set for Sun Nov 12 14:03:02 2017
mount.nfs: trying text-based options 'vers=4.1,addr=MYSERVER,clientaddr=MYCLIENTIP'
Ele trava. Mas se eu tentar vers = 3, funciona.
[root@ ~]# mount -vvv -t nfs -o vers=3 MYSERVER:/home/shared/ /home/shared/
mount.nfs: timeout set for Sun Nov 12 14:03:12 2017
mount.nfs: trying text-based options 'vers=3,addr=MYSERVERIP'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying MYSERVERIP prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying MYSERVERIP prog 100005 vers 3 prot UDP port 20048
No lado do servidor, o diretório é exportado linha por linha para IPs diferentes com os mesmos parâmetros:
(ro,async,all_squash)
Retornando na pergunta CLIENT-A, tentei registrar todas as novas conexões das portas tcp e udp do CLIENT-A no lado do servidor. Eu posso ver o CLIENTE-A tentando abrir portas. E isso tenta muito. Então eu acho que o problema não é com os clientes. Talvez.
Então, minhas perguntas são:
Obrigado pelo seu tempo :)