web-dev-qa-db-ja.com

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(またはlocalhost)はエラーを返します。

# 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で待機している)
  • Checked Google:多くの同様のエラーメッセージが表示されますが、ポート111でリッスンしないrpcbindについては特に何もありません(それでも解決策はありませんでした)。
  • ポート111への「telnet」(タイムアウトして何もそこで待機していないことを確認する)
  • 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の不一致と関係があるという理論と一致しているようです。 rpcbind(rpc v3/4)はポートマップ(rpc v2)と下位互換性がありますが、portmapはrpcbindとの上位互換性がないため、クライアントはNFSサーバーとして機能できます。

pdate 5(可能な解決策)

クライアントを注意深く見ると、rpcbindは常にポート3421にあるように見えました(最初はランダムであると思いました)。サーバー上でiptablesを使用してポート3421をポート111に転送しました。この後、クライアント上のサーバーからNFS共有を正常にマウントすることができました。私はすべてのサーバーをCentOS 6にアップグレードするので、数週間はCentOS 5/6サーバーのミックスしか持っていないので、これは有効なソリューションである可能性があります。

より良い答えが出ない限り、私は数日で自分の質問に答えます。

3
uesp

根本的な問題は、portmap/rpcbindのポートの不一致であることが判明しました。 CentOS 6では、私のrpcbindは、CentOS 5のportmapのように予期された111ではなく、ポート3421でリッスンしていました。これにより、nfsの起動と共有のマウントの両方で問題が発生しました2つのマシン間。

解決策は、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共有を正常にマウントすることができました。

CentOS 6サーバーでnfsを完全に動作させるには、/etc/sysconfig/nfsのすべてのポート関連行のコメントを外して、固定ポートアドレスを使用する必要もありました。これを行う前に、lockdサービスが応答しないという断続的な問題がありました。

2
uesp