ディスクレスサーバを作っている時の話。
ネットワークブート用のセグメントを使って、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を割り当てることが出来ます。)
参考
- [linux-users:51681] Re: NFSでTimed outが出ます
- http://search.luky.org/linux-users.5/msg01650.html
- 9章. NFS(Network File System)
- http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/ch-nfs.html
- 17章. TCPラッパーと xinetd
- http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ja/ref-guide/ch-tcpwrappers.html