manekineko倉金家ホームページ

趣味の部屋/インターネットサーバー/サーバー構築メモ その2

LANとNFSの設定

2010年6月24日(木)
今まで自動(DHCP)でつないでいたLANをサーバーとして稼動させるため固定に変更します。
また他のマシンとファイル共有(NFS)の設定を行い、データ移行の準備を行います。


LANの再設定
インターネット接続はLinuxをインストールしたとき自動(DHCP)に設定していましたが、サーバーとして稼動させるにはIPアドレスを固定する必要があります。
管理メニューよりネットワーク(ネットワーク設定)を起動。
デバイスのeth0を選んでいったん停止して編集。
・コンピュータの起動時にデバイスを起動
自動的にIPアドレスを取得:dhcpとなっていますので
・固定のIPアドレス設定 に変更
 手動IPアドレス設定はルーターの設定に合わせて
    アドレス:192.168.1.5
 サブネットマスク:255.255.255.0
 ディフォルトゲートウェイアドレス:192.168.1.1
といった感じで登録。
DNSにはネームサーバーが稼動するまではルーターのDNS機能を使うことにして、ルーターのアドレス192.168.1.1などを登録しておきます。(プロバイダーのDNSを登録してもよい。)
保存して起動、さらに再起動してちゃんとつながることを確認し、OK。
昔に比べるとえらい楽になったなあ。

NFSクライアントの設定
古い(現行)のサーバーのファイルを見たりコピーするために、NFSクライアントとしての設定を行います。

まずマウントポイントを作成します。
どこでもいいのでしょうが、/mntフォルダに作成することにします。
設定とホームディレクトリを読み込むために/etcと/homeを読み込めるようにします。
#mkdir /mnt/oldetc
#mkdir /mnt/oldhome
などとしてディレクトリを作成。

/etc/fstabにマウントの設定をしておけば起動時にマウントしてくれますが、とりあえずマウントは手動で行うことにします。fstabに自動マウントを設定した場合相手のコンピュータが起動していないなどでマウントできない場合タイムアウトまで延々待たされますので、設定するならnoautoオプションでマウント情報を与えておくのみにしたほうがいいです。
さらにすぐマウント/アンマウントができるようにスクリプトを書いて実行権限をつけ、デスクトップに置いておきます。

マウントスクリプト mountNFS.sh
読み込む相手のIPアドレスを192.168.1.2とすれば
#! /bin/sh
mount -t nfs 192.168.1.2:/home /mnt/oldhome
mount -t nfs 192.168.1.2:/etc /mnt/oldetc
exit

アンマウントスクリプト umountNFS.sh
#! /bin/sh
umount -t nfs /mnt/oldhome
umount -t nfs /mnt/oldetc
exit

現行サーバーにはすでにNFSサーバーとしての設定がしてあって稼動していますので、マウント一発、ファウルが見れるはずです。
#./mountNFS.sh (またはファイルをダブルクリック)
でマウント、/mnt/oldhomeを覗いてみると、OK!
ちょっとファイルを開いてみると、見事に文字化けしています。
前のサーバーの言語コードはEUC-JPで今度のはUTF-8だから当然といえば当然。エディタのエンコーディングをEUC-JPに指定してちゃんと読めました。(残念ながら自動判別というのがない。)

内容を確認して今度はアンマウント。
#./umountNFS.sh (またはファイルをダブルクリック)
アンマウント確認、OK!

NFSサーバーとファイアウォールの設定
今度はこちらのコンピュータ内のファイルを公開するためにNFSサーバーとしての設定をしますが、ファイアウォールがらみで設定をしなくてはなりません。NFSはディフォルトでは空いているポートを使うため、そのままではファイアウォールが構築できません。
設定の方法は3つ。
1)ファイアウォールを使わない。
2)ファイアウォールをローカルアドレス(192.168.xxx.xxx)に対してすべて許可するように設定してNFSはディフォルトのまま使う。(ローカルアドレス内でのみNFSが使える。)
3)ポートを固定してファイアウォールを使う。固定IPのインターネット回線からならNFSがつなげられる。
1)は論外。
2)は以前やった方法。実に簡単。実質これでまったく問題はない。
3)は設定がちょっと面倒。でも別宅がある人にはいいかもしれない。
セキュリー的にはたぶん2)がもっとも安全。
設定するファイルは
/etc/hosts.allow
/etc/hosts.deny
/etc/exports
/etc/sysconfig/nfs … 2)の方法でやるなら設定不要。
/etc/sysconfig/iptables

各設定ファイルを設定
/etc/hosts.deny
portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

/etc/hosts.allow
portmap: 192.168.0.0/255.255.0.0
lockd: 192.168.0.0/255.255.0.0
mountd: 192.168.0.0/255.255.0.0
rquotad: 192.168.0.0/255.255.0.0
statd: 192.168.0.0/255.255.0.0

/etc/exports
/etc 192.168.0.0/255.255.0.0(ro)
/home 192.168.0.0/255.255.0.0(ro)
これでLAN内のコンピュータに対しては読出しモードで接続を許可します。
続いてファイアウォールの設定を行います。
2)の方法でやるなら
/etc/sysconfig/iptablesの
  -A RH-Firewall-1-INPUT -i lo -j ACCEPT の次に
  -A RH-Firewall-1-INPUT -s 192.168.0.0/16 -j ACCEPT
を書くだけ。(ただしRH-Firewall-1-INPUTという記述はRedHat系のみ?)
実際やってみてOK。
あまり簡単すぎておもしろくないので3)をやってみます。

インターネットからもつなぐなら同様にhosts.allowとexportsを設定します。
/etc/sysconfig/nfs を編集します。
以下の記述の頭の#を消して指定を有効化します。
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

NFSを起動または再起動します。
#service iptables restart
#service portmap restart
続けて
#rpcinfo -p
で使用しているポートの確認。以下のようになっています。
  プログラム バージョン プロトコル ポート
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 662 status
100024 1 tcp 662 status
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 32769 nlockmgr
100021 3 udp 32769 nlockmgr
100021 4 udp 32769 nlockmgr
100021 1 tcp 32803 nlockmgr
100021 3 tcp 32803 nlockmgr
100021 4 tcp 32803 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 892 mountd
100005 1 tcp 892 mountd
100005 2 udp 892 mountd
100005 2 tcp 892 mountd
100005 3 udp 892 mountd
100005 3 tcp 892 mountd
この結果と/etc/sysconfig/nfsを見ながら/etc/sysconfig/iptablesに以下のようにこれらのポートを許可する設定を書き加えます。
場所は後ろのほうの
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
の直前がいいかと。
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 662 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2020 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 2020 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT

以上完了したらファイアウォールを再起動し、NFSの起動(または再起動)と自動起動の設定
#service iptables restart
#service portmap restart
#service nfs restart
#service nfslock restart
#chkconfig portmap on
#chkconfig nfs on
#chkconfig nfslock on
再度つないで確認し、OKです。