新しい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でリッスンしています(編集:当初考えていたようにランダムではありません)。
私がチェックしたり試したりしたものは次のとおりです。
/etc/hosts.deny
iptables
をクリアしています(開始するルールがありませんでした)現時点では、チェックするオプションや物事はまだなく、いくつかのアイデアが必要です。サーバーは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サーバーのミックスしか持っていないので、これは有効なソリューションである可能性があります。
より良い答えが出ない限り、私は数日で自分の質問に答えます。
根本的な問題は、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
サービスが応答しないという断続的な問題がありました。