LoginSignup
0
0

More than 1 year has passed since last update.

NFSサーバの構築

Posted at

必要サービス

NFSを組むのに、以下の通り用途によって必要サービスが異なる。

用途 portmap nfsd mountd
NFSクライアント
NFSサーバ

yum install nfs-utilsで一通りインストール可能。

RPCの確認

クライアントがリモートにある記憶領域を使うための命令を送る必要がある。
その命令、システムコールをNW跨ぎで実行する技術をRPCという。
bashでたたかれたコマンドがリモートのサーバにて応答されるのはこのRPCのおかげということ。
昨今のWebAPIの利用時もサーバから別のサーバに対してコマンドをたたいてその応答を表示していたりする。そのときにもRPCは使われている。
/etc/rpcを見ると、NFSはRPC100003が使われるよう。

/etc/rpc
nfs             100003  nfsprog

RPCと接続ポートを対応させる必要がある。対応させるサービスをportmapと呼ぶ。
RPCはあくまでアプリケーション層のものでトランスポート層におけるTCP/UDPとの対応が必要って感じかな?
RPCとTCPの対応はrpcinfo - pで表示される。

rpcinfo
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper

デフォルトだと100003に対するマッピングはなされていないよう。
ただし、nfsサービスを起動すると、以下のようにNFSに関連するRPCとその対応するポートが表示された。
NFSのサービスを使ってNFSサーバへアクセスするときにNFSサービスとRPCをマッピングさせる機能なので、NFSサービスがないといけないのかな。クライアントからサーバにアクセスするときに必要な機能なので、そりゃクライアント側でサービス起動していないとマッピングもしないか。

rpcinfo
 rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  46603  status
    100024    1   tcp  37560  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  45133  nlockmgr
    100021    3   udp  45133  nlockmgr
    100021    4   udp  45133  nlockmgr
    100021    1   tcp  34228  nlockmgr
    100021    3   tcp  34228  nlockmgr
    100021    4   tcp  34228  nlockmgr

rpcinfoでNFSのRPCと特定のポートが紐づいてればOK.

Portmapの役割

サービスが起動されたことを受けて、どうやってTCPポートをアサインしてるのか。
Portmapがになっている。
Portmapにおいて事前にアサインするポート範囲を定義しておき、その中から空いてるポート番号をアサインする。
アサインとその管理をPortmapサービスが行う。
つまり、PortmapはRPCサーバにおいて、サービス起動時にサービスから登録リクエストを受け取って、空きポート番号をアサインする。
RPCクライアントにおいてRPC接続リクエストを受け取ったportmapクライアントはPortmapサーバに接続ポート番号をヒアリング。そのヒアリング情報をもとRPC接続通信と接続TCPポートを紐づける。
このあたりの役割をPortampが果たしてる。
つまり下図の感じかな。

image.png

RPCの動作については、こちらを参考にした。
サービスは特に接続ポートを意識せずに通信が行えるのはこのportmapによるもののようだ。

サーバ設定1<TCP Wrapper>

話が大きくそれたが、PortmapはTCP Wrapperを利用し、接続制御できる。
etc/hosts.allow,/etc/hosts.denyを駆使して制御するが、今回は割愛。

サーバ設定2<exportfs>

ディレクトリ公開のために/etc/exportsをいじる。

/etc/exports
/pub 192.168.0.0/255.255.0.0(rw)

上記によりサーバ上/pubディレクトリを192.168.0.0/24の送信元からのアクセスを許可し、そのアクセス時にはrwの権限を付与する意味となる。
TCP Wrapperではportampにおける接続制御でNFSとしての接続制御が/etc/exportfsという整理かな。

クライアント設定

設定といってももうサーバの設定は完了してるので、実際にマウントするだけ。

mount -t nfs <サーバIP or hostname>:/pub /mnt -v

公開してる/pubを/mntディレクトリにマウントする。
-vはログが出力されるオプション

注意:サーバ側でfirewalldにてNFS通信をDENYしてる可能性がある。
実際そこにひっかかったので、systemctl stop firewalldなどで回避する。

確認方法

クライアント側でdf -Tにてマウント状況を確認.
以下のようにFilesystemが見えてれば成功。

Filesystem         Type     1K-blocks    Used Available Use% Mounted on
<サーバIP>:/pub    nfs4      17811456 1463296  16348160   9% /mnt

意外とすんなりいけるはず。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0