Ubuntu で NFS サーバと NFS クライアントの設定

Ubuntu で NFS サーバと NFS クライアントを設定する手順。apt によるパッケージのインストール、/etc/exports による共有設定、systemd によるサービス管理、ufw によるファイアウォール設定、mount コマンドと /etc/fstab によるマウントを説明する。

前準備

Ubuntu のシステム更新

システムを最新の状態にすることで、セキュリティと安定性が向上する. Ubuntu で OS のシステム更新を行うときは, 次のコマンドを実行する.

Ubuntu のインストールは別ページ »で説明する.

# パッケージリストの情報を更新
sudo apt update
# インストール済みのパッケージを包括的に更新 (依存関係も考慮)
sudo apt full-upgrade
# 変更をシステム全体に確実に反映させるために再起動
sudo shutdown -r now

サーバ側

  1. インストール

    NFS サーバ機能を提供する nfs-kernel-server パッケージをインストールする.

    # パッケージリストの情報を更新
    sudo apt update
    sudo apt -y install nfs-kernel-server
    
  2. 共有設定

    共有するディレクトリとアクセス権限を /etc/exports に記述する. 次の例は,/home ディレクトリを CIDR 表記「XXX.YYY.ZZZ.0/24」(ネットワークアドレス XXX.YYY.ZZZ.0,サブネットマスク 255.255.255.0)のネットワークに対して共有する設定である.「XXX.YYY.ZZZ.0/24」は各自の環境に合わせて書き換える

    echo "/home XXX.YYY.ZZZ.0/24(rw,sync,root_squash,no_subtree_check)" | sudo tee -a /etc/exports
    

    主なオプションは次の通りである.

    • rw: 読み書きを許可する.読み取りのみを許可する場合は ro を指定する.
    • sync: 書き込み要求があった時点でディスクに書き込む.データの一貫性が保たれるが,書き込み性能は低下する.
    • root_squash: クライアント側の root ユーザをサーバ側の匿名ユーザ (通常 nobody) として扱う.NFS サーバの既定値であり,クライアント側の root によるサーバ上のファイル操作を制限できる.クライアント側の root をサーバ側の root として扱う no_root_squash は,クライアントを完全に信頼できる場合に限って使用する.
    • no_subtree_check: サブツリーチェックを行わない.ファイル操作のたびに親ディレクトリを検査しないため,性能と安定性が向上する.

    設定を変更したら,NFS サービスに反映させる.

    sudo systemctl restart nfs-kernel-server.service
    

    サービスを再起動せずに /etc/exports だけを再読み込みするときは,次のコマンドを実行する.

    sudo exportfs -ra
    

    現在の共有設定を確認するときは,次のコマンドを実行する.

    sudo exportfs -v
    
  3. ファイアウォールの設定

    NFSv4 は TCP の 2049 番ポートを使用する.Ubuntu の既定のファイアウォールである ufw を使う場合,サービス名 nfs を指定すると 2049 番ポートが開放される.アクセス元は必要な範囲に限定する.

    # すべてのインターフェースからNFSアクセスを許可する場合
    sudo ufw allow nfs
    # 特定のIPアドレス (例: 192.168.1.100) からのみ許可する場合
    # sudo ufw allow from 192.168.1.100 to any port nfs
    # 特定のネットワーク (例: 192.168.1.0/24) からのみ許可する場合
    # sudo ufw allow from 192.168.1.0/24 to any port nfs
    

クライアント側

NFS 共有をマウントするために必要なツールを含む nfs-common パッケージをインストールする.

sudo apt update
sudo apt install -y nfs-common

サーバが公開している共有を確認する.「111.222.333.44」は NFS サーバの IP アドレスまたはホスト名に置き換える.

showmount -e 111.222.333.44

マウントポイントを作成し,mount コマンドでマウントする.「111.222.333.44」は NFS サーバの IP アドレスまたはホスト名に,「:/home」はサーバ側で共有設定したパスに置き換える.クライアント側の既存の /home に直接マウントすると,クライアント上のローカルの /home が隠れてログインできなくなることがあるため,専用のマウントポイントを使用する.

sudo mkdir -p /mnt/nfs/home
sudo mount -t nfs 111.222.333.44:/home /mnt/nfs/home

mount コマンドによるマウントは一時的なものであり,再起動すると解除される.システム起動時に自動的にマウントするには,/etc/fstab に次のような行を追加する.nofail は NFS サーバが利用できないときでもシステムの起動を継続させるオプション,_netdev はネットワークが利用可能になってからマウントさせるオプションである.

echo "111.222.333.44:/home /mnt/nfs/home nfs defaults,nofail,_netdev 0 0" | sudo tee -a /etc/fstab

/etc/fstab の記述内容は,次のコマンドで確認できる.

sudo mount -a
df -h /mnt/nfs/home

アクセス時に自動でマウントし,未使用時に自動で解除する方法として autofs もある.