CentOS 6 上的 NFS 客戶端問題:rpcbind 未偵聽埠 111
我正在嘗試在新的 CentOS 6.6 伺服器上將 NFS 客戶端設置到現有的 NFS 伺服器,但遇到了我無法弄清楚的問題。開始時
rpcbind
/nfs
我得到:# /etc/init.d/rpcbind start # /etc/init.d/nfs start Starting NFS services: [ OK ] Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). [FAILED] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ]
rpcinfo -p
工作正常# rpcinfo -p program vers proto port service 100000 4 tcp 111 portmapper .. snip 100021 4 tcp 47627 nlockmgr
但是
rpcinfo -p 127.0.0.1
(或本地主機)返回錯誤:# rpcinfo -p 127.0.0.1 rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
使用 (netstat -an) 檢查埠,似乎 portmap/rpcbind 沒有在埠 111 上監聽。在埠 111 上沒有監聽,而 rpcbind 在埠 3421 上監聽(編輯:不像我最初想像的那樣隨機)。
我檢查或嘗試過的事情包括:
- 禁用 selinux(未啟用)
- 清算
/etc/hosts.deny
- 清算
iptables
(沒有規則開始)- 檢查日誌(沒有發現任何相關內容)
- 重新啟動伺服器(無效)
- 在 CentOS 5 伺服器上檢查(埠映射在埠 111 上偵聽)
- 檢查了Google:很多類似的錯誤消息,但沒有具體說明 rpcbind 沒有監聽埠 111(無論如何解決方案都沒有工作)。
- ’telnet’ 到埠 111(超時,確認那裡沒有監聽)
- 檢查 127.0.0.1/localhost 設置(它們工作正常)
在這一點上,我真的沒有任何選擇或事情要檢查,需要一些想法。在這一點上,我幾乎會嘗試任何事情,因為如果沒有 NFS,伺服器就相對沒用。
更新1:
在客戶端上執行
rpcinfo -s localhost
有效但rpcinfo -s server
無效。我想知道讓客戶端是 CentOS 6 而伺服器是 CentOS 5 是否存在問題。更新 2:
showmount
新客戶端和 NFS 伺服器上的輸出相同:# showmount -e 10.2.212.10 Export list for 10.2.212.10: /shared/uesp/maps 67.205.112.104 /shared/uesp/skins 67.205.112.104 /shared/phpsessions 10.2.212.30,[...snip...],10.2.212.11 /shared/uesp/filecache 10.2.212.30,[...snip...],10.2.212.11 /shared/uesp/wikiimages 10.2.212.30,[...snip...],10.2.212.11 /shared/eqwiki/filecache 10.2.212.30,[...snip...],10.2.212.11 /shared/eqwiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11 /shared/davewiki/filecache 10.2.212.30,[...snip...],10.2.212.11 /shared/davewiki/wikiimages 10.2.212.30,[...snip...],10.2.212.11
我已經剪掉了長長的 IP 列表,但 10.2.212.30 是新客戶端。嘗試在新客戶端上掛載 NFS 共享會導致:
# mount -v 10.2.212.10:/shared/phpsessions /mnt/phpsessions mount: no type was given - I'll assume nfs because of the colon mount.nfs: timeout set for Thu Jan 15 18:53:43 2015 mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30' mount.nfs: mount(2): Operation not permitted mount.nfs: trying text-based options 'addr=10.2.212.10' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: portmap query retrying: RPC: Unable to receive mount.nfs: prog 100003, trying vers=3, prot=17 mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused mount.nfs: trying text-based options 'vers=4,addr=10.2.212.10,clientaddr=10.2.212.30' mount.nfs: mount(2): Operation not permitted mount.nfs: trying text-based options 'addr=10.2.212.10' mount.nfs: prog 100003, trying vers=3, prot=6 mount.nfs: portmap query retrying: RPC: Unable to receive mount.nfs: prog 100003, trying vers=3, prot=17 mount.nfs: portmap query failed: RPC: Unable to receive - Connection refused ...
最後幾行重複,直到超時。
更新 3:
因此,如果我使用
iptables
將埠 111 重定向到rpcbind
客戶端上正在使用的埠,那麼我可以開始rpcinfo -p localhost
在客戶端上工作。但是,這對安裝問題沒有任何作用。我嘗試強制 NFS 使用 v2,例如:# mount -v -t nfs -o nfsvers=3 10.2.212.10:/shared/phpsessions /mnt/phpsessions
但這會導致與上述相同的錯誤消息。當我在客戶端上執行時,我得到的事實是:
# rpcinfo -s server rpcinfo: can't contact rpcbind: : RPC: Unable to receive; errno = Connection refused
這是來自 mount 的相同錯誤消息。我猜想 CentOS 6 客戶端上的掛載正試圖在執行“舊”埠映射的 CentOS 5 伺服器上使用“新”rpcbind,所以它失敗了。我認為應該可以以某種方式混合這樣的 CentOS 版本。
更新 4:
我在客戶端上創建了一個測試 NFS 共享,並能夠成功地將其掛載到伺服器上。這似乎符合與 portmap/rpcbind 不匹配有關的理論。客戶端可以充當 NFS 伺服器,因為 rpcbind (rpc v3/4) 向後兼容 portmap (rpc v2),但 portmap 不向前兼容 rpcbind。
更新 5(可能的解決方案)
更仔細地查看客戶端,我注意到
rpcbind
它似乎總是在埠 3421 上(我最初認為它是隨機的)。在伺服器上,我曾經iptables
將埠 3421 轉發到埠 111。在此之後,我能夠成功地從客戶端上的伺服器掛載 NFS 共享。這可能是一個有效的解決方案,因為當我將所有伺服器升級到 CentOS 6 時,我只會在幾週內混合使用 CentOS 5/6 伺服器。除非出現更好的答案,否則我會在幾天內回答我自己的問題。
根本問題原來是
portmap
/的埠不匹配rpcbind
。在 CentOS 6rpcbind
上,我正在偵聽埠 3421,而不是像portmap
在 CentOS 5 中那樣預期的 111。這導致nfs
了兩台機器之間的啟動和共享安裝問題。解決方案是使用
itpables
將 CentOS 6 上的埠 111 重定向到埠 3421:iptables -t nat -I PREROUTING -p tcp --dport 111 -j REDIRECT --to-ports 3421 iptables -t nat -I PREROUTING -p udp --dport 111 -j REDIRECT --to-ports 3421 iptables -t nat -I OUTPUT -p tcp -o lo --dport 111 -j REDIRECT --to-ports 3421 iptables -t nat -I OUTPUT -p udb -o lo --dport 111 -j REDIRECT --to-ports 3421
在 CentOS 5 伺服器上進行了相同的操作,但相反,將埠 3421 重定向到 111。在此之後,我能夠從 CentOS 5 伺服器成功地在 CentOS 6 客戶端上掛載 NFS 共享。
為了
nfs
在 CentOS 6 伺服器上完全工作,我還必須取消註釋所有與埠相關的行/etc/sysconfig/nfs
以使用固定埠地址。在這樣做之前,我遇到了lockd
服務沒有響應的間歇性問題。