我有两台机器,一台 NFS 服务器 (RHEL) 和一台客户端 (Debian)。服务器已设置 NFS,导出特定目录:
server:~$ sudo /usr/sbin/rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 910 status
100024 1 tcp 913 status
100021 1 udp 53391 nlockmgr
100021 3 udp 53391 nlockmgr
100021 4 udp 53391 nlockmgr
100021 1 tcp 32774 nlockmgr
100021 3 tcp 32774 nlockmgr
100021 4 tcp 32774 nlockmgr
100007 2 udp 830 ypbind
100007 1 udp 830 ypbind
100007 2 tcp 833 ypbind
100007 1 tcp 833 ypbind
100011 1 udp 999 rquotad
100011 2 udp 999 rquotad
100011 1 tcp 1002 rquotad
100011 2 tcp 1002 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 1013 mountd
100005 1 tcp 1016 mountd
100005 2 udp 1013 mountd
100005 2 tcp 1016 mountd
100005 3 udp 1013 mountd
100005 3 tcp 1016 mountd
server$ cat /etc/exports
/dir *.my.domain.com(ro)
client$ grep dir /etc/fstab
server.my.domain.com:/dir /dir nfs tcp,soft,bg,noauto,ro 0 0
一切似乎都很好,但是当我尝试安装时,我看到以下内容:
client$ sudo mount /dir
mount.nfs: access denied by server while mounting server.my.domain.com:/dir
在服务器上我看到:
server$ tail /var/log/messages
Mar 15 13:46:23 server mountd[413]: authenticated mount request from client.my.domain.com:723 for /dir (/dir)
我在这里遗漏了什么?我应该如何调试它?
答案1
如果您的 /etc/hosts.allow 和 /etc/hosts.deny 不正确,我就会遇到这种情况;检查这些文件中是否有包含 portmap 的行,然后将其注释掉(如果您不在防火墙后面,则不安全)或将客户端/服务器上的该行设置为您的特定子网。
例如,在 /etc/hosts.allow 中:
portmap: 192.168.0.0/16
...并注释掉 /etc/hosts.deny 中的所有内容,以使只有 hosts.allow 处于活动状态。NFS 使用 tcpwrappers 和这些文件以及 /etc/exports 中的内容来控制访问。
答案2
您的rpcinfo
意思是 NFS 正在尝试通过 UDP 连接。看来 NFSv4 不再通过 UDP 工作,但期望使用 TCP。
例如,Linux 内核甚至尝试通过 UDP 挂载 rootfs,即使对于 NFSv4,也需要在末尾添加一个特殊参数nfsroot
。例如:nfsroot=192.79.143.131:/diskless/client01,tcp
答案3
我在装有 macOS 客户端的 Debian 10.2 服务器上遇到了同样的问题。我的解决方案:
在 NFS 服务器上,将insecure
选项添加到共享/etc/exports
并重新运行exportfs -r
来源这里。
答案4
/proc/fs/nfsd
所有机器都坏了还是只有一台机器坏了?服务器上是否安装了 nfsd 伪文件系统?