無料Wikiサービス | デモページ
Linuxなどのメモ書き

nfs設定


1. 概要

NFSの設定に関するメモ。iptablesでファイアウォールを動作させている時のポートの固定の仕方など。

2. 前提

Fedora Core 6環境で行ったので、RedHat系以外だと設定ファイルなどが異なる場合がある。nfs-utils,autofsはインストール済みであるものとする。

3. 構成

図1に示すような構成にする。


図1 ネットワーク構成

  • NFSサーバーはserv00
  • serv00は/exportを公開する
  • 接続を許すホストは192.168.0.0/24のホスト
  • nfsはTCP接続を使用する


4. NFSサーバー(serv00)の設定

4.1 公開ディレクトリの設定

NFSで公開するディレクトリを/etc/exportsに追加する。

/etc/exports

#<公開するディレクトリ>  <接続を許すホスト><オプション>
/export     192.168.0.0/24(rw,all_squash,sync)

編集したら'/usr/sbin/exportfs -r'として、設定を反映させる。現在の設定は'/usr/sbin/exportfs -v'で確認できる。

4.2 接続ホストの指定

NFS接続を許すホストを指定する。指定したホストだけに接続を許可するため、/etc/hosts.denyで全てのアクセスを拒否する設定を行い、/etc/hosts.allowでNFSに関連するデーモンについて192.168.0.0/24からのアクセスを許可する。

/etc/hosts.deny
ALL: ALL
/etc/hosts.allow
portmap lockd rquotad mountd statd: 192.168.0.0/255.255.255.0

4.3 NFSの動作開始

NFSのサービスを開始する。

# /etc/init.d/nfs start

起動時に自動でNFSサービスが起動するように設定する。

# /sbin/chkconfig --level 345 nfs on
# /sbin/chkconfig --list nfs
nfs             0:off   1:off   2:off   3:on    4:on    5:on    6:off

以上でサーバー側の設定は完了。ただし、iptablesでファイアウォールを動かしている場合はNFS関連の通信を通すように設定する必要がある(4.4参照)。

4.4 ファイアウォール環境の場合

NFSサーバーでiptablesを設定している場合はNFS関連の通信を通すように設定する。

4.4.1 ポートの固定

iptablesで通信を許可するにはNFS関連のデーモンで使用するポートを指定する必要があるが、一部のデーモンはデフォルトではポートを動的に割り当てるため(表1)、まず使用ポートを固定させるように設定を行う必要がある。


表1 各プロセスを使用ポート
プロセス
デフォルト
使用ポート
補足
nfsd
2049

portmap
111

rpc.mountd 動的に割当
-pオプションで指定可
rpc.statd
動的に割当 -pオプションで指定可
lockd
動的に割当 sysctlのfs.nfs.nlm_tcpportで指定可
(UDPの場合はnlm_udpport)(*1)
(*1) nlmとはNFS lock managerの略。lockdはカーネルプロセスで実行されるのでsysctlの値からポートを取り込んでいる。カーネルが2.2.18以前だとrpc.lockdが起動されてユーザ空間で処理されるようになっている模様。

使用ポートは表1に示した方法でポートを指定できるが、nfsの起動スクリプト/etc/init.d/nfs,nfslockでは/etc/sysconfig/nfsというファイルがあれば、そこからポート番号の設定を取得してデーモン起動時に引数を渡してくれるようになっているので、以下のように/etc/sysconfig/nfsを作成しておけばよい。

/etc/sysconfig/nfs
MOUNTD_PORT=2050   <== rpc.mountdのポートを指定
STATD_PORT=2051    <== rpc.statdのポートを指定
LOCKD_TCPPORT=2052 <== lockdのTCPポートを指定
LOCKD_UDPPORT=2052 <== lockdのUDPポートを指定
以上のポートの指定が完了したら、デーモンをリスタートしてポート番号を反映させる。
# /etc/init.d/nfslock restart

# /etc/init.d/nfs restart

4.4.2 iptablesの設定

4.4.1でNFS関連のデーモンのポートを固定できたので、これらのポートの通信を通すようにiptablesを設定する。

iptablesコマンドで直接エントリを追加してもよいが、再起動後も設定が有効になるようマスタのファイル(/etc/sysconfig/iptables)を直接修正する。

修正はFedora Core6デフォルトのiptablesファイルに以下の青字のエントリを追加すればよい。これらのエントリは192.168.0.0/24からのTCP/UDPポート111(portmap), 2049(nfsd), 2050(rpc.mountd), 2051(rpc.statd), 2052(lockd)の接続を許可している。

/etc/sysconfig/iptables
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -s 192.168.0.0/24 -m tcp -p tcp \
     -m multiport --dports 111,2049,2050,2051,2052 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -s 192.168.0.0/24 -m udp -p udp \
     -m multiport --dports 111,2049,2050,2051,2052 -j ACCEPT
<== 追加行
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
青字以外のエントリはFedora Core6インストール時に「ファイアウォール有り」を指定した時の設定のまま。送信に関するフィルタ設定については省略。

最後にiptablesの設定を読み込んで動作に反映させれば、ファイアウォールの設定は終わり。
# /etc/init.d/iptables restart

5. NFSクライアント(client00)の設定

5.1 静的mount

client00:/serv00をserv00:/exportにマウントするには以下のようにする。(/serv00ディレクトリは作成しておくこと)

# mount -t nfs serv00:/export /serv00/
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hda1             99188468  46142908  47925648  50% /
/dev/shm                500504         0    500504   0% /dev/shm
/dev/hda3            135325776   4109968 124230748   4% /home
serv00:/export       234443424  19734272 202607936   9% /serv00
<== mountされている

起動時に自動でmountさせるには/etc/fstabにエントリを追加しておけばよい。

/etc/fstab
LABEL=/                 /                       ext3    defaults        1 1
/dev/devpts             /dev/pts                devpts  gid=5,mode=620  0 0
/dev/shm                /dev/shm                tmpfs   defaults        0 0
LABEL=/home             /home                   ext3    defaults        1 2
/dev/proc               /proc                   proc    defaults        0 0
/dev/sys                /sys                    sysfs   defaults        0 0
LABEL=SWAP-hda2         swap                    swap    defaults        0 0
skylancer00:/export     /serv00                 nfs     tcp,hard        0 0

5.2 autofsによる動的mount

5.1の方法だと/serv00にアクセスしなくても常時mountされている状態になる。アクセスのあった時に動的にマウントさせたい場合はautofsを使用する。

/etc/auto.masterに既に登録すみのauto.miscを修正して、client00:/misc/serv00からserv00へNFSマウントする場合、以下のエントリをauto.miscに追加する。

/etc/auto.misc

serv00          -fstype=nfs,tcp,hard    serv00:/export
設定ファイルを修正したら設定を反映させる。
# /etc/init.d/autofs reload

以上で/misc/backup以下にアクセスすると自動でNFSマウントされるようになる。
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hda1             99188468  46142908  47925648  50% /
/dev/shm                500504         0    500504   0% /dev/shm
/dev/hda3            135325776   4109980 124230736   4% /home
<== マウントされていない
# ls /misc/backup/
<== アクセス発生
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/hda1             99188468  46142908  47925648  50% /
/dev/shm                500504         0    500504   0% /dev/shm
/dev/hda3            135325776   4109980 124230736   4% /home
skylancer00:/backup/tank
                     234443424  19734336 202607872   9% /misc/backup
<== マウントされている
#



最終更新 2007/01/16 18:01:10 - kztomita
(2007/01/16 13:28:51 作成)
添付ファイル
nfs_env.png - kztomita