NFSの接続でタイムアウトが発生した時の対処(mount: RPC: Timed out)

ディスクレスサーバを作っている時の話。

ネットワークブート用のセグメントを使って、PXEブートしたサーバから、NFSサーバをマウントし、ルートファイルシステムをごっそりコピーしようとすると、マウントできず、以下のエラーが表示された。

mount: RPC: Timed out


色々、設定を見直すも、

  • iptables(ファイヤーウォール)は動かしていない
  • portmap(ポートマッパー)は稼動している
  • NFSのデーモンはもちろん、rpc系のプロセス(rpc.mountd, rpc.lockd, rpc.statdなど)も全て生きている
  • ネットワーク的な疎通はできている(ftpやpingはOK)
  • /etc/hosts.denyに記載はない
  • サーバはNFSv3、クライアントもv3に対応していると思われる
  • showmountコマンドで、設定が正しく反映されて稼動していることを確認
  • 他のクライアントからは正常にNFSマウントできる


さて、どうしたものか。
ちなみに、この際のNFSサーバ側のログ(syslog)は以下。

Mar  6 10:43:00 blaze mountd[20658]: authenticated mount request from 10.2.2.240:679 for /tftpboot/Linux (/tftpboot)
9章. NFS(Network File System)
http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/ch-nfs.html

↑のページによると、

NFSは、クライアントシステムが共有NFSリソースをマウントしようとする時にのみ、認証を実行します。NFSサービスへのアクセスを制限するにはTCPラッパーを使用します。
TCPラッパーは、/etc/hosts.allowファイルと/etc/hosts.denyファイルを読み込み、ある特定のクライアントやネットワークによるNFSサーバーへのアクセスの許可/拒否を判定します。
TCPラッパーによるアクセス制御の設定についての詳細は章17章を参照ください。

とある。が、上記のsyslogを見る限りは、認証は上手く通っているように見える。でも、どこの認証が通っているかもよくわからないなぁ?と思い、他にも色々探していたのですが、何とか答えが見つかった。

[linux-users:51681] Re: NFSでTimed outが出ます
http://search.luky.org/linux-users.5/msg01650.html

↑のURL内での回答を以下に引用させていただきます。

nfs は tcp wrapper が接続してくるクライアントを監視していますから、
ip number -> ip name への逆引きができるようになっていないとうまく
接続できません。

おぉ、確かに、NFSクライアントは、ネットワークブート用のセグメント(つまり、DNSには登録されないようなアドレス)から接続に来るため、/etc/hostsにでも名前を定義しておかないと、IPアドレス⇒ホスト名の逆引きが出来ない状態でした。


なので、/etc/hostsに、IPアドレスと名前のマッピングの定義をしてやることで無事NFSマウントできるようになりました。
NFSのタイムアウトエラーで、困ったときのご参考まで。


ちなみに、/etc/hostsに静的にホスト名とIPアドレスを登録したので、PXEブート(ネットワークブート)時にDHCPから割り当てるIPアドレスを固定にしました。(DHCPサーバの機能で、MACアドレスに紐づくIPアドレスを登録しておくことで、固定のIPを割り当てることが出来ます。)