NFS はversion 4 で 単一ポート(2049) の TCP通信で実現されるようになりました。
これによって、リモナビを使って容易にNAT超えのNFSが実現できます。
🔹NFS の検証構成
以下の構成で実際に NFS マウントを実現してみようと思います。
NFSクライアント、NFSサーバ 上にそれぞれ Sender | Receiver を配置する構成とします。
この検証は 両ホストとも、Ubuntu を使用しますので、 Sender | Receiver は共に Docker版を利用します。
🔹設定イメージ
設定内容はこれまで通りですが、 OSの NFS 設定には 接続元|先TCP接続情報 が必要なため、従来とh若干順番が異なります。
1) NFSサーバに リモナビ Receiver をインストール
- Receiver Dockerコンテナ内から見たホストマシンのIPアドレスの取得
docker inspect remonavi-receiver | grep "Gateway" ........ [*a]
- ホストマシンから見た、Receiver Docker コンテナの IPアドレス
docker inspect remonavi-receiver | grep "IP" ........ [*b]
2) NFSクライアントに リモナビ Sender をインストール
- Sender Dockerコンテナ内から見たホストマシンのIPアドレスの取得
docker inspect remonavi-sender | grep "Gateway" ........ [*c]
3) リモナビ Gateway にて、 NFS Server へのGateway設定を追加
接続ホスト : [*a] の IPアドレス
接続ポート : 2049
4) リモナビ Receiverにて (3) Gateway の利用設定
5) リモナビ Seneer (3) Gateway の利用設定
接続ポート : 任意 [*d]
6) NFSサーバの設定
- NFS サーバのインストール
apt install nfs-kernel-server
- NFS サーバの設定
/etc/exports 編集 /{公開ディレクトリ} {ReceiverコンテナのIP情報 [*b]}(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash) 例) /mnt 172.17.0.0/16(rw,sync,fsid=0,crossmnt,no_subtree_check,no_root_squash) /mnt : /mnt を公開する 172.17.0.0/16 : NFSサーバへの接続元IPネットワーク 今回は Receiver Docker が接続元なので [*b] 情報とする [*b]では IPAddressとPrefixが取得できま
- NFS サーバの再起動
systemctl restart nfs-kernel-server.service
7) NFSクライアントの設定
- NFS クライアントのインストール
apt install nfs-common
- NFS マウント設定
mount -t nfs -o vers=4,port=[*d] [*c]:{NFSサーバのマウント元} {クライアントホストのマウント先} 例) mount -t nfs -o vers=4,port=9165 172.17.0.1:/public /home/mnt/public 9165 : Sender設定のポート番号 172.17.0.1 : Sender の Dockerアドレス /public : NFSサーバで公開したディレクトリをルールートにしたディレクトリ指定 NFSサーバ上の /mnt/public 相当
🔹おわりに
NFS クライアント、サーバ共に、TCP/IPレベルでの接続情報が必要なため、リモナビ側で先に接続経路を確立したのちに、NFS 設定をします。
注意点は Sender | Receiver が Docker で、それぞれのホストに直にインストールする場合、接続IPアドレスが、Docker コンテナの IPアドレスとなる点です。
この情報のために、先に Receiver | Sender Docker を動作させ、以下のコマンドで接続IP情報を取得しています。
docker inspect {コンテナ名} | grep {検索したい文字列}
Gateway : Docker コンテナから見たホスト側の IPアドレスじょうh
IP : ホスト側から見た Docker コンテナが利用する IPアドレス情報