看板 FreeBSD 關於我們 聯絡資訊
NFS client 是 Gentoo Linux, kernel 是 2.6.29-gentoo, 跟 NFS 相關的套件裝的是 nfs-utils 1.1.5, 系統有裝 iptables 不過 default policy 都是 pass, 只是用來搭 sshguard 擋暴力 try 密碼的東西而已; 該開的 RPC service 和 portmap 這些東西都有開。 NFS server 是 FreeBSD 7.1-STABLE (目前已升到 7.2-PRELEASE 做測試), 有使用 pf 搭 sshguard, 其餘都是 pass, hosts.allow 第一條 rule 就是 ALL : ALL : allow, 該開的 RPC service 都有打開。 目前 Linux 這端無論使用 autofs 或是寫死在 /etc/fstab, 過了一段時間之後跟 FreeBSD 的 NFS 連線都會 hang 住, 觀察發現無論用哪種方法 Linux 這端都會在閒置一段時間後切斷 NFS 的連線, 也就是會把 tcp socket 給 shutdown 掉。 問題就在這個 shutdown 的過程有時候會成功有時候卻不成功, 在使用 tcpdump 觀察後發現會成功的流程是: 1. Linux (client) -----FIN----> FreeBSD (server) 2. Linux (client) <----ACK----- FreeBSD (server) 3. Linux (client) <----FIN----- FreeBSD (server) 4. Linux (client) -----ACK----> FreeBSD (server) 會 hang 住的情況就是只有進行完 1. 和 2., FreeBSD 這端並沒有主動發送 FIN 給 Linux 這端, 導致 Linux 這端的 tcp socket 進入 FIN_WAIT2 狀態: tcp 0 0 linux:789 freebsd:nfs FIN_WAIT2 而 FreeBSD 那端對應的 nfsd 也會停在 CLOSE_WAIT 狀態。 Google 查過各式各樣的關鍵字不過都沒有看到有效的解法, 比方說是在 mount option 裡加入 rsize=1024 和 wsize=1024 也是無效, 在 FreeBSD 裡把 net.inet.tcp.keepidle 改成一分鐘也是沒有改善, 打死它都不肯回傳一個 FIN, 不曉得有沒有人遇過相似的問題並解決的呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.107.89