MacからLinodeへNFSマウントしてみた

Linode（リノード）の仮想マシンにNFSサーバーをインストールし、MacからNFSマウントしてみた内容を共有します。

参照：https://www.linode.com/docs/guides/using-an-nfs-server-on-ubuntu2004/
（ここにLinodeの仮想マシン間のNFSのやり方が書いていたので、LinodeとMacでNFSをやってみました。）

# NFSサーバーはLinode、NFSクライアントはMac
NFSサーバー : LinodeでUbuntu 20.04.5 LTS を選びました
```
$ lsb_release -a
Distributor ID:	Ubuntu
Description:	Ubuntu 20.04.5 LTS
Release:	20.04
Codename:	focal
```
Linodeで割り当てられたPublic IPアドレスを確認。
以下のcurlコマンドでLinode上のNFSサーバー用のIPを確認しておきます。
```
$ curl whatismyip.akamai.com
x.x.x.x
（このIPアドレスは以下「LINODE_IP_ADDR」として利用します。）
```

NFSクライアント : macOS(monterey)
```
$ sw_vers
ProductName:	macOS
ProductVersion:	12.5.1
BuildVersion:	21G83
```
MacのPublic IPアドレスを確認。
同様にcurlコマンドでMacのIPアドレス（NFSクライアント側）を確認しておきます。
```
$ curl whatismyip.akamai.com
y.y.y.y
（このIPアドレスは以下「CLIENT_IP_ADDR」として利用します。）
```
## 1. Linodeの設定（NFSサーバーを起動）
 NFSサーバー用のパッケージをインストール
```
$ sudo apt update
$ sudo apt install nfs-kernel-server
```
NFSサーバーのStatus確認（**active**になっていることを確認）
```
$ sudo systemctl status nfs-kernel-server.service
     nfs-server.service - NFS server and services
     Loaded: loaded (/lib/systemd/system/nfs-server.service; enabled; vendor preset: enabled)
    Drop-In: /run/systemd/generator/nfs-server.service.d
             └─order-with-mounts.conf
     Active: active (exited) since Mon 2022-08-29 04:09:56 UTC; 2h 29min ago
    Process: 912 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Process: 924 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
   Main PID: 924 (code=exited, status=0/SUCCESS)
```
NFSサーバー に共有ディレクトリを作成
```　
$ sudo mkdir -p /nfs/share/project1
$ sudo chown nobody:nogroup /nfs/share/project1
$ sudo chmod 777 /nfs/share/project1
```
NFS Export設定　：　/etc/exportsを編集
```
$ vi /etc/exports
```
以下のラインを追加し保存
（’CLIENT_IP_ADDR’にはMacのIPアドレスを使用）
```
/nfs/share/project1 CLIENT_IP_ADDR(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
```
exportfsコマンドで設定を適用
```
$ sudo exportfs -a
```
NFSサーバーの共有ディレクトリ（/nfs/share/project1）が反映されていることを確認
```
$ sudo exportfs -v　

/nfs/share/project1
CLIENT_IP_ADDR(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
```

NFSサーバーのサービスを再起動
```
$ sudo systemctl restart nfs-kernel-server
```

ufwコマンドを使って、NFSクライアントのIPアドレスに対してNFSポート(2049)を許可します。
```
$ sudo ufw allow from CLIENT_IP_ADDR to any port nfs
```
CLIENT_IP_ADDRに対して2049ポートが許可されていることを確認
```
$ sudo ufw status

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
2049                       ALLOW       CLIENT_IP_ADDR
OpenSSH (v6)               ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)
```
/etc/hosts.denyにすべてをDenyしてから、
/etc/osts.allowにNFSクライアントからのアクセスのみを許可する

```
$ /etc/hosts.deny
 portmap:ALL
 rpcbind mountd nfsd statd lockd rquotad : ALL

$ /etc/hosts.allow
 portmap: CLIENT_IP_ADDR
 rpcbind mountd nfsd statd lockd rquotad : CLIENT_IP_ADDR
```

#### これでCLIENT_IP_ADDRからLinodeへNFSマウントが可能になりました。

---

## 2. Mac側の設定（NFSクライアント設定）
Macに空のDirectoryを作成
```
$ sudo mkdir -p /nfs/mnt/project1
```
mount_nfsコマンドを使ってLinodeのNFSサーバーへマウントします。

```
$ sudo mount_nfs -o vers=4 -P LINODE_IP_ADDR:/nfs/share/project1 /nfs/mnt/project1
```
dfコマンドでLinodeのNFSサーバーにマウントされたか確認
```
$ df -h
LINODE_IP_ADDR:/nfs/share/project1  xGi xGi xGi x%  xxx  xxx  x%  /nfs/mnt/project1
```
## 3. NFSマウントの確認
Macでマウントポイント（/nfs/mnt/project1）にテキストファイルを作成してみます。
```
$ echo "Hey, I saved this text from my MacOS." > /nfs/mnt/project1/textfromMac.txt
```
Linodeからファイルが追加されていることを確認してみましょう。

```
$ cat /nfs/share/project1/textfromMac.txt
Hey, I saved this text from my MacOS.
```
LinodeのNFSサーバーにファイルが生成されていることが確認できました。

#### 無事にMacからLinodeへNFSマウントができました。


## まとめ

MacからLinodeへファイルのコピーはscpを使っていましたが、NFSマウントしてから両サイドからファイルの参照ができるようになり、より使いやすい環境になりました。
インターネット経由のNFSはセキュリティの懸念があるかもしれないので、通信の暗号化などについても調べてみたいと思いました。


# Linodeとは

Linode (https://www.linode.com/) は Akamaiが提供するIaaS (Infrastructure as a Service) プラットフォームプロバイダーのサービスです。リノードと発音します。
Akamaiは2022年2月にLinode社の買収を発表しました。
https://www.akamai.com/ja/newsroom/press-release/akamai-to-acquire-linode
クラウドコンピューティングをよりシンプルに、手頃な価格で、誰もが利用できるようにすることで、イノベーションを加速することができます。
https://www.linode.com/ja/alternative-cloud-provider/

## 関連記事

アカマイ・テクノロジーズ合同会社のQiitaではLinode関連など開発者向けの記事を記載しております。

https://qiita.com/organizations/Akamai