autofs(5.0.7)+nfs4を、2049/tcpだけで使えるようにする。

auto.net を使用せず、 -fstype=nfs4,…. と明示的にマウント指定する場合は問題ない。

なのでauto.netでなく、auto.miscにcdromのごとく設定すればよい。

backup          -fstype=nfs4,rw                192.168.0.1:/var/shared/storage

以下は茨の道。

どうしてもauto.netしたい場合は?

auto.netで2049/tcp以外に必要なのは、2049/udp、111/udp(ポートマッパー)と 47503/udp(ポートマッパーが決めたらしい、これは可変かも)だった。関連デーモンのポート固定やファイヤウォールの設定をすれば良いのだが、折角NFSv4なのだから使用ポートを 2049/tcp のみにしよう。

auto.net内で問題が出るのは、サーバーにexport一覧を問い合わせるshowmountだけだった。showmountは、例えば次のようなアクセスがあったとき、/etc/autofs/auto.net中で実行される。

# ls /net/<サーバー名>

そして次のようにコケる。

# showmount --no-headers -e <$key=サーバー名>
clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)

showmount -e は、相手方から exportリストを得ているだけ。成功時にはこうなる

(client)# showmount -e -no-headers <server>
/var/export/storage1   <host1>,<host2>
/var/export/storage2   <host3>

対策例1

showmount -e <サーバー名>

を、

ssh <サーバー名> showmount -e

或いは

ssh -i <自動処理用鍵> -l <loginname> <サーバー名> showmount -e

に変える。 但しパスフレーズのない鍵。相手方を専用ユーザーにして、コマンド制限を・・・などとやっていると、とても面倒だ。割に合わない

対策例2

あらかじめリストをファイルに書き出しておき、それを使う。 exportfs した側がプッシュしても良いかも。

  • /etc/autofs/auto.net

    from SHOWMOUNT="$SMNT --no-headers -e $key"
    to   SHOWMOUNT="cat /etc/autofs/cache.${key}.showmount-e"
    

結論

いずれにしても、面倒で、融通が利かず、割に合わない。 auto.net を使う旨みがなくなってしまう。

net.miscで使おう。

以上