*

FreeBSD で NFS (2) 【NFSサーバ設定と /etc/exports 詳解】

公開日: : 最終更新日:2014/02/03 FreeBSD, FreeBSD くらいあんと, NFS

Seichan です.こんばんわ.あけましておめでとうございます.
前回「FreeBSD で NFS (1)」で書いたとおり,NFSサーバまわりの設定について.
以前 FreeBSD 5.0-RELEASE あたりで Pukiwiki の「FreeBSD で NFS(Network File System) サーバ & クライアント」に纏めていましたが,時代も変わってきてますので再まとめしています.よろしければ Pukiwiki 側もご覧ください.

 SPONSORED LINK
 

NFS サーバ側設定

NFS サーバ側では,NFS サービスを提供するデーモンや,共有領域の設定を行います.

デーモン

NFS サーバ側で動作させることが必要なデーモンは「FreeBSD で NFS (1)」にて説明したとおり,nfsd, mountd, rpcbind, rpc.lockd, rpc.statd です.これらがシステム再起動後も自動的に起動するよう /etc/rc.conf に次のように記載します.

nfs_server_enable="YES"
mountd_enable="YES"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"
rpcbind_enable="YES"

また,一度 NFS サービスを起動出来る所まで確認するため,mountd が要求するファイル /etc/mountd を次のとおり,touch コマンドで空ファイルとして作成しておきます.

# touch /etc/exports

NFS サーバデーモンの起動

/etc/rc.conf ファイル記載後,サーバを再起動せずに NFS サービスを起動するには次の通りコマンドを実行します.
デーモン起動の順番は rpcbind, mountd, nfsd, rpc.lockd, rpc.statd の順番となります.これは /etc/rc.d 以下の各制御スクリプトの REQUIRE 行を見ればわかります.それぞれのファイルを見て理解するのが一番良いと思いますが,FreeBSD 8.0 より service コマンドが利用可能で,このコマンドを使って実行順序を確認する事が出来ます.

ということで,先に実行順序の確認をしてみましょう.実行すると,次のようにスクリプトのパスがずらっと表示されます.

# service -e
/etc/rc.d/hostid
/etc/rc.d/hostid_save
/etc/rc.d/cleanvar
/etc/rc.d/ip6addrctl
/etc/rc.d/devd
/etc/rc.d/newsyslog
/etc/rc.d/syslogd
/etc/rc.d/rpcbind
/etc/rc.d/virecover
/etc/rc.d/dmesg
/etc/rc.d/mountd
/etc/rc.d/nfsd
/etc/rc.d/statd
/etc/rc.d/lockd
/etc/rc.d/motd
/etc/rc.d/sshd
/etc/rc.d/sendmail
/etc/rc.d/cron
/etc/rc.d/mixer
/etc/rc.d/gptboot
/etc/rc.d/bgfsck

デーモンの起動順序が確認出来たところで,実際に実行してみます.

# /etc/rc.d/rpcbind start
Starting rpcbind.
# /etc/rc.d/mountd start
Starting mountd.
# /etc/rc.d/nfsd start
NFSv4 is disabled
Starting nfsd.
# /etc/rc.d/statd start
Starting statd.
# /etc/rc.d/lockd start
Starting lockd.

デーモンが起動したら,NFS サーバの起動が完了です.ですが,このままでは何も共有を提供していないサーバですので,共有するディレクトリおよび,どの NFS クライアントに提供するかを設定する必要があります.

NFS サーバの共有設定

NFS サーバの設定の殆どがこの共有設定となります.書式とルールをしっかり理解しないと不必要なネットワークに対して共有してしまうなど,セキュリティ的によろしくない事になりかねませんので注意しましょう.

基本の共有

とりあえず共有をかけてクライアントがマウント出来る所を確認しましょう.どこのディレクトリでも良いのですが,この例では /usr を共有します.理由は FreeBSD で各種サーバを構築している場合,/usr/src や /usr/obj, /usr/ports を NFS で共有すると環境の統一が楽に出来るからです.
# 当然,共有したい領域が別にあれば読み替えてください.

/etc/exports につぎのような行を追加します.ネットワークとサブネットマスクは環境に合わせて読み替えてください.

/usr    -network 192.168.241.0 -mask 255.255.255.0

/etc/exports 作成後,mountd を再読み込み(reload) する事で,exports の内容を読み直して mountd が動作します.正常に読み直されているかは showmount コマンドで確認することが出来ます.
showmount コマンドで確認しても正常に表示されない場合,記載ミスが考えられますので /var/log/messaeges にどう出ているのかを確認しましょう.

# /etc/rc.d/mountd reload

# showmount -e
Exports list on localhost:
/usr                               192.168.241.0

NFS クライアントからマウント

NFS クライアントから,共有をマウントしてみましょう.さすがに NFS サーバの /usr をそのまま NFS クライアントの /usr にマウントする事は出来ないので,/mnt にマウントします.mount コマンド実行時,エラーが出ていなければマウントは成功しています.mount コマンドや df コマンドで確認してみましょう.

# mount -t nfs nfsserver:/usr /mnt
# mount
/dev/da0p2 on / (ufs, local, journaled soft-updates)
devfs on /dev (devfs, local, multilabel)
nfsserver:/usr on /mnt (nfs)

ここまでの基本動作確認が出来たら umount で一度マウントを解除してください.

# umount /mnt

/etc/exports 詳解

NFS クライアントからマウントするところまで確認が出来たら,実際に NFS サーバで必要な領域を細かく指定していきます.ここからが良くハマるポイントになりますので注意しましょう.
シチュエーション毎に記載していきます.

複数のネットワークに対する共有

共有を複数のネットワークに対して行いたい場合は次のようになります.共有したい宛先毎に行を分けるのがポイントです.この場合,192.168.241/24 と 10.192.168/24 に対して /usr を公開します.

/usr    -network 192.168.241.0 -mask 255.255.255.0
/usr    -network 10.192.168.0 -mask 255.255.255.0

ちなみに,CIDR 形式で記載する事も可能です.次の例は混ぜて記載していますが,混乱の元ですのでどちらかに統一する事をお薦めします.

/usr    -network 192.168.241.0 -mask 255.255.255.0
/usr    -network 10.192.168/24

特定のホストに対する共有

ネットワーク単位ではなく,特定のホストに対してのみ共有したい場合は次のようになります.上の行は特定の IP アドレスに対して,下の行は特定のホスト名に対しての共有です.

/usr    192.168.241.100
/usr    client1.seichan.org

ホスト名での指定は,最終的には逆引きされた IP アドレスになりますので,この点は注意してください.DNS もしくは /etc/hosts に正しくエントリがある場合にのみ作用します.名前と IP アドレスの解決が出来ない状態で mountd reload を行うと messages には次のようにエラーが表示されます.

mountd[1934]: bad exports list line /usr  client1.seichan.org

複数のディレクトリの共有

複数のディレクトリを共有する場合は次のようになります.共有するディレクトリと,共有したい相手のリストを必要分記載します.この場合,192.168.241.0/24 にいる NFS クライアントは /usr と /pub を,10.192.168.0/24 にいるクライアントは /usr のみマウント出来ます.

/usr    -network 192.168.241.0 -mask 255.255.255.0
/usr    -network 10.192.168.0 -mask 255.255.255.0
/pub    -network 192.168.241.0 -mask 255.255.255.0

ファイルシステム内の細かい共有

複数のディレクトリの共有を行う際にハマりやすいポイントとして,ファイルシステムが同じ所のディレクトリの共有をかける場合,ディレクトリは一行に纏めて記載する必要がある.ということです.
たとえば,今までの例では /usr で大きく共有をかけていますが,実際には /usr/src, /usr/obj と /usr/ports のみ共有をかけたいとします.その場合,次のような記載ではエラーとなります.

/usr/src  -network 192.168.241.0 -mask 255.255.255.0
/usr/obj  -network 192.168.241.0 -mask 255.255.255.0

次のように bad exports list というエラーが記録され,showmount の結果では先に記載した設定のみが反映されています.

# tail /var/log/messages
mountd[1934]: can't change attributes for /usr/obj: Invalid radix node head, rn: 0 0xfffffe0002ec4800
mountd[1934]: bad exports list line /usr/obj    -ro -network 192.168.241.0 -mask 255.255.255.0

# showmount -e
Exports list on localhost:
/usr/src                           192.168.241.0

これを正しい状態にするには,次のように一行に記載します.

/usr/src /usr/obj  -network 192.168.241.0 -mask 255.255.255.0

長くなってしまいましたので,exports 詳解は次回に引き続きます.

SPONSORED LINK
  ☆ ブログランキング参加しました (*≧∀≦)ノシ
にほんブログ村 IT技術ブログ FreeBSDへ 

関連記事

no image

qmail で SMTP-AUTH 環境を作ってみたけど…

咳が止まらず死ぬほどしんどいので会社休んで医者通いしてきた Seichan です.こんばんわ… 無く

記事を読む

no image

orz

間違って,make world 中のマシンをリブートしてしもた… もっかい make world や

記事を読む

no image

antibadmail その後

2005/12/24 に antibadmail を導入し,約3週間たちました.現状の状態を報告して

記事を読む

no image

qmail で SMTP-AUTH がでけたぽぃ

苦節3日.Yuuji Hirose さん作の SMTP-AUTH with qmapop schem

記事を読む

no image

UPS

UPS 買いました.APC の ES 500. 前々から買いたいと言うか,必要だと思ってはいたのです

記事を読む

FreeBSD

GEOM のモジュールを理解する

Seichan です.こんばんわ. GEOM の状態がどういう風になっているのかを確認したい.なん

記事を読む

no image

Multiple vulnerabilities in OpenSSH

今度は OpenSSH に関する SA が出てますなぁ… make world 終わったばっかりなの

記事を読む

no image

FreeBSD 6.0 RELEASE キター

newvers.sh のコミットログには Welcome to 6.0-RELEASE. の文字が.

記事を読む

no image

mod_php の pgsql.so

自宅サーバにインストールしてある ports/Packages を最新版にすべく作業して Apach

記事を読む

no image

NFS オプションを変えてみた

ので,パフォーマンステスト中

記事を読む

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Google Adsense

ssl_icon
PHPki で簡単証明書運用 (5) 【管理ユーザのメンテナンスとCRLの取得】

Seichanです.こんばんわ. いつものとおり,だいぶ日が経ってし

ssl_icon
PHPki で簡単証明書運用 (4) 【作成した証明書を管理する】

Seichanです.こんばんわ. 先日の「PHPki で簡単証明書運

ssl_icon
PHPki で簡単証明書運用 (3) 【署名されたサーバ証明書を作る】

Seichan です.こんばんわ. さて,先日の「PHPki で簡単

ssl_icon
PHPki で簡単証明書運用 (2) 【初期設定と Root CA 証明書作成】

Seichan です.こんばんわ. さて,先日の「PHPki で簡単

ssl_icon
PHPki で簡単証明書運用 (1) 【PHPki の修正と導入 (修正版)】

Seichan です.こんばんわ. 先日「PHPki で簡単証明書運

→もっと見る

PAGE TOP ↑