nfs設定
Rev.11を表示中。最新版はこちら。
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からのアクセスを許可する。ALL: ALL
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)、まず使用ポートを固定させるように設定を行う必要がある。
プロセス |
デフォルト 使用ポート |
補足 |
---|---|---|
nfsd |
2049 |
|
portmap |
111 |
|
rpc.mountd |
動的に割当 |
-pオプションで指定可 |
rpc.statd |
動的に割当 | -pオプションで指定可 |
lockd |
動的に割当 |
sysctlのfs.nfs.nlm_tcpportで指定可 (UDPの場合はnlm_udpport)(*1) |
使用ポートは表1に示した方法でポートを指定できるが、nfsの起動スクリプト/etc/init.d/nfs,nfslockでは/etc/sysconfig/nfsというファイルがあれば、そこからポート番号の設定を取得してデーモン起動時に引数を渡してくれるようになっているので、以下のように/etc/sysconfig/nfsを作成しておけばよい。
MOUNTD_PORT=2050 <== rpc.mountdのポートを指定 STATD_PORT=2051 <== rpc.statdのポートを指定 LOCKD_TCPPORT=2052 <== lockdのポートを指定以上のポートの指定が完了したら、デーモンをリスタートしてポート番号を反映させる。
# /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ポート111(portmap), 2049(nfsd), 2050(rpc.mountd), 2051(rpc.statd), 2052(lockd)の接続を許可している。
# 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 -j REJECT --reject-with icmp-host-prohibited
COMMIT
最後に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にエントリを追加しておけばよい。
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 <== マウントされている #