![NFS 客户端 (ubuntu) 在使用 openbsd 服务器/FIN_WAIT_2 一段时间后冻结](https://linux22.com/image/217090/NFS%20%E5%AE%A2%E6%88%B7%E7%AB%AF%20(ubuntu)%20%E5%9C%A8%E4%BD%BF%E7%94%A8%20openbsd%20%E6%9C%8D%E5%8A%A1%E5%99%A8%2FFIN_WAIT_2%20%E4%B8%80%E6%AE%B5%E6%97%B6%E9%97%B4%E5%90%8E%E5%86%BB%E7%BB%93.png)
我有一个 openbsd 服务器通过 NFS 协议共享目录。在客户端安装新版本的 ubuntu 后,我仍然挂载 NFS 目录,但在一段时间(随机)之后:nautilus、ls 命令等完全冻结。在卸载 NFS 目录之前,我无法访问我的文件系统。
我寻找信息但没有任何帮助。
我的服务器运行 pf (不带清理),我在两侧使用 NFSv3,rpcinfo 等工作正常。有关信息,我的网络通过wireguard进行通信。
有人可以告诉我要寻找什么或去哪里寻找吗?
谢谢。
更新
我想我发现了问题。在某个时刻,客户端发送带有标志的数据包F到服务器(tcpdump 结果):
12:16:45.022393 192.168.100.2.998 > 192.168.100.1.2049: F 141:141(0) ack 117 win 1284 <nop,nop,timestamp 3929122361 2338823414> (DF)
并被卡住,因为以下数据包是:
12:16:45.022470 192.168.100.1.2049 > 192.168.100.2.998: . ack 142 win 1030 <nop,nop,timestamp 2338823422 3929122361>
12:17:45.187125 192.168.100.2.998 > 192.168.100.1.2049: . ack 117 win 1284 <nop,nop,timestamp 3929182521 2338823422> (DF)
12:17:45.187153 192.168.100.1.2049 > 192.168.100.2.998: . ack 142 win 1030 <nop,nop,timestamp 2338823542 3929182521>
12:18:45.849519 192.168.100.2.998 > 192.168.100.1.2049: . ack 117 win 1284 <nop,nop,timestamp 3929243193 2338823542> (DF)
12:18:45.849548 192.168.100.1.2049 > 192.168.100.2.998: . ack 142 win 1030 <nop,nop,timestamp 2338823664 3929243193>
12:19:47.294335 192.168.100.2.998 > 192.168.100.1.2049: . ack 117 win 1284 <nop,nop,timestamp 3929304637 2338823664> (DF)
12:19:47.294359 192.168.100.1.2049 > 192.168.100.2.998: . ack 142 win 1030 <nop,nop,timestamp 2338823786 3929304637>
这样的线条无限期地出现......
事实上,连接保持在FIN_WAIT_2。在客户端:
client$ netstat -an | grep 2049
tcp 0 0 192.168.100.2:998 192.168.100.1:2049 FIN_WAIT2
并在服务器上:
vps$ doas pfctl -s states | grep 2049
all tcp 192.168.100.1:2049 <- 192.168.100.2:998 ESTABLISHED:FIN_WAIT_2
答案1
检查是否pf
阻止某些内容很简单:只需添加log
到(所有?)block
规则并使用tcpdump -neti pflog0
来查看会发生什么。
接下来,确保服务器上所有与 NFS 相关的端口(rpcinfo -p
为您提供列表)都可以从客户端访问(例如nc -z <server_ip> 2049
)。
第三,确保Linux使用与服务器相同的协议(OpenBSD默认使用UDP,但这可以通过-t
在运行时添加标志nfsd
*来更改)和保留端口(即<1024),我不这样做思考默认情况下是这样。
我的情况
我成功地在 OpenBSD 服务器和 Linux 客户端 (Debian 11.6) 之间使用 NFS,跨越防火墙,在客户端上使用以下设置:
/etc/auto.master
:
+auto.master
/nfs /etc/auto.nfs
/etc/auto.nfs
:
music -fstype=nfs,vers=3,rw,soft,rsize=32768,wsize=32768,noatime,timeo=1200,retrans=10,proto=tcp,resvport,nolock,noacl 10.17.18.10:/shared/media/music
在防火墙上,我对服务器侦听的所有端口都有规则,如pass
所列。tcp
udp
rpcinfo -p