NFSサーバの構築(CentOS7)

# やりたい事
* AWS環境でNFSサーバーを構築する
* nfsv3に対応できる形にしておく
  * aws efsはnfsv3,nfsv2非対応であるため方式から除外
  * https://docs.aws.amazon.com/ja_jp/efs/latest/ug/limits.html
* NFSに利用するPortを固定したい
  * nfsv4を利用する場合は考慮が不要な点(TCP:2049のみ利用)

 
# 構成
* AWS環境を利用
* AMI:ami-8e8847f1
* OS:CentOS Linux release 7.5.1804 (Core)
* NFSパッケージ：nfs-utils-1.3.0-0.54.el7.x86_64
* 参考値
    * ServerIP:10.0.0.84
    * ClientIP:10.0.0.176

# 参考
* https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/storage_administration_guide/nfs-serverconfig#s2-nfs-nfs-firewall-config

* https://blog.apar.jp/linux/2712/

# 構築（Server側）

* 共有用のディレクトリを作成する
  * この際、必要に応じてパーミッションを変更する 

```
mkdir -p /export/data
```

* /etc/exportsの編集

```
vi /etc/exports
# 以下を追加
/export/data 10.0.0.176(rw,no_root_squash)
# clientIPに対しアクセス許可を付与、読み取り・書込みを許可、rootでアクセス
```

* サービス周り

```
# 有効化
systemctl enable nfs-server
# systemctl enable rpcbind
# 起動
systemctl start nfs-server
# systemctl enable rpcbind
# 確認
systemctl status nfs-server rpcbind
```

* 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  44717  status
    100024    1   tcp  40203  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  42773  nlockmgr
    100021    3   udp  42773  nlockmgr
    100021    4   udp  42773  nlockmgr
    100021    1   tcp  40671  nlockmgr
    100021    3   tcp  40671  nlockmgr
    100021    4   tcp  40671  nlockmgr
#
```


# 一度クライアント側からの接続を試る

* この際、NFS　ServerのSGはTCP:2049のみ空けています

```
mount -t nfs 10.0.0.84:/export/data /mnt/nfs
```

* 見えてます。

```
# df -h
Filesystem              Size  Used Avail Use% Mounted on
/dev/xvda1              8.0G  885M  7.2G  11% /
devtmpfs                222M     0  222M   0% /dev
tmpfs                   244M     0  244M   0% /dev/shm
tmpfs                   244M  8.5M  235M   4% /run
tmpfs                   244M     0  244M   0% /sys/fs/cgroup
tmpfs                    49M     0   49M   0% /run/user/1000
10.0.0.84:/export/data  8.0G  885M  7.2G  11% /mnt/nfs
```

# nfsv3向けにServer側のPortを固定する

* nfsv3で解放すべきサービスは以下なのでmountdで利用するportを固定する
  * portmapper(TCP:111)
  * mountd(不定)

```
vi /etc/sysconfig/nfs
# 以下を設定
RPCMOUNTDOPTS="-p 892"
```

* サービス再起動

```
systemctl restart nfs-server
```

* 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  44717  status
    100024    1   tcp  40203  status
    100005    1   udp    892  mountd
    100005    1   tcp    892  mountd
    100005    2   udp    892  mountd
    100005    2   tcp    892  mountd
    100005    3   udp    892  mountd
    100005    3   tcp    892  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  50887  nlockmgr
    100021    3   udp  50887  nlockmgr
    100021    4   udp  50887  nlockmgr
    100021    1   tcp  37257  nlockmgr
    100021    3   tcp  37257  nlockmgr
    100021    4   tcp  37257  nlockmgr
```

# SGの整理

* NFS Server側のSGを以下のように設定
* inboud
  * TCP:111
  * TCP:892
  * TCP:2049
* outbound
  * default(any all)