출처는 http://www.ysy2080.com/uribury/1170
NFS?
NFS는 Network File System의 약어로 다른 호스트에 있는 파일 시스템의 일부를 자신의 디렉토리처럼 사용할 수 있도록 해주는 것이다. 즉 하나의 서버에 디스크를 집중 관리하고 그것을 공유하여 나머지 시스템들이 사용할 수 있게 해주는 것이다.
1) nfs설정을 시작하기전에 nfs패키지들이 설치되어있는지 확인해보자
rpm -qa portmap
rpm -qa nfs-utils
대부분 설치되어있으며, 설치가 안되어있을경우 간단히 yum install portmap nfs-utils
2)portmap과 nfs를 시작한다
/etc/init.d/portmap start
/etc/init.d/nfs start
※반드시 portmap부터 시작 후 nfs를 시작해야 된다
nfs부터 시작 할 경우
NFS 쿼터를 시작 중: 서비스를 등록할 수 없습니다: RPC: 받을 수 없음; errno = 연결이 거부됨
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp 에러메시지 출력됨
3) NFS 서버의 공유 목록을 관리하는 파일은 /etc/exports 파일이다. 이 파일을 편집하여 공유 목록을 관리하게 된다.
설정형식 : 공유디렉토리 접근할 호스트(옵션)
ex) /backup 121.156.48.157(rw,all_squash)
/backup디렉토리를 클라이언트(121.156.48.157) IP에서 접급할 수 있다
설정옵션
rw : 읽기, 쓰기 가능
ro : 읽기만 가능
secure : 클라이언트 마운트 요청시 포트를 1024 이하로 한다.
noaccess : 엑세스 거부
root_squach : 클라이언트의 root가 서버의 root 권한을 획득하는 것을 막는다.
no_root_squash : 클라이언트의 root와 root를 동일하게 한다.
sync : 파일 시스템이 변경되면 즉시 동기화 한다.
all_squach : root를 제외하고 서버와 클라이언트의 사용자를 동일한 권한으로 설정 한다.
no_all_squach : root를 제외하고 서버와 클라이언트의 사용자들을 하나의 권한을 가지도록 설정한다.
부팅시 자동으로 올라오도록 설정
chkconfig --level 3 nfs on
chkconfig --level 3 portmap on
exportfs 명령어를 이용하여 /etc/exports 파일에 설정한 공유 목록이 정상적으로 공유가 되는지 확인
[root@ns etc]# exportfs -v
/backup 121.156.48.157(rw,wdelay,root_squash,all_squash,no_subtree_check,anonuid=65534,anongid=65534)
4) nfs포트는 portmap(111)과 rpc.nfs(2049)를 제외하고서는 모두 랜덤방식으로 포트가 변경되기때문에 방화벽을 사용 할 경우 포트를 고정시켜주어야 한다. (참골치아프다 --'')
현재포트를 확인하려면 rpcinfo -p로 확인 할 수있다. 랜덤으로 되어있을텐데 귀찮게 뭐하러 확인하나;;;
portmap(111) rpc.nfs(2049)를 제외한 나머지 포트는 고정시키자
rpc.statd 4000
rpc.lockd 4001
rpc.mountd 4002
rpc.rquotad 4003
포트번호는 상관없으나 대부분이렇게 고정하므로 나역시도...
rpc.statd포트를 4000번으로 고정
/etc/init.d/nfslock에서 74번줄을 변경
# See if we have an HA-callout program specified
[ -n "$STATD_HA_CALLOUT" ]
&& STATDARG="$STATDARG -H $STATD_HA_CALLOUT"
daemon rpc.statd -p 4000 <---이 부분
/etc/sysconfig/nfs 파일에서(없으면 생성 할 것!!) rpc.lock과 rpc.mountd포트를 등록한다
LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002
/etc/services에서 4003포트를 rquotad로 변경
ex)
rquotad 4003/tcp # rpc.rquotad tcp port
rquotad 4003/udp # rpc.rquotad udp port
nfs를 다시시작하여 적용되었는지 확인 (netstat는 길어서 생략)
[root@ns etc]# rpcinfo -p
프로그램 버전 원형 포트
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 4000 status
100024 1 tcp 4000 status
100011 1 udp 4003 rquotad
100011 2 udp 4003 rquotad
100011 1 tcp 615 rquotad
100011 2 tcp 615 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100021 1 udp 4001 nlockmgr
100021 3 udp 4001 nlockmgr
100021 4 udp 4001 nlockmgr
100021 1 tcp 4001 nlockmgr
100021 3 tcp 4001 nlockmgr
100021 4 tcp 4001 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 4002 mountd
100005 1 tcp 4002 mountd
100005 2 udp 4002 mountd
100005 2 tcp 4002 mountd
100005 3 udp 4002 mountd
100005 3 tcp 4002 mountd
그렇다면 이제 iptables에 4000 ~ 4004번까지 tcp,udp를 등록해주자
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 4000:4004 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -m udp --dport 4000:4004 -j ACCEPT
등록을 마쳤으면 당연히 방화벽재시작
5) 드디어 설정은 끝났다 알고나면 설정도 별건아닌거 같다 (뭐든지 알고나면 별거 아니라는...)
※클라이언트서버도 portmap을 실행시켜주어라!!
mount -t nfs 222.122.13.146:/backup /home/ysy2080/nfs
Filesystem Size Used Avail Use% Mounted on
/dev/hda2 2.0G 624M 1.3G 34% /
/dev/hda1 99M 36M 59M 38% /boot
tmpfs 252M 0 252M 0% /dev/shm
/dev/hda9 12G 1.2G 9.5G 11% /home
/dev/hda8 996M 34M 911M 4% /tmp
/dev/hda7 7.6G 2.5G 4.8G 34% /usr
/dev/hda6 7.6G 2.0G 5.3G 27% /usr/local
/dev/hda5 7.6G 1.1G 6.2G 15% /var
222.122.13.146:/backup
147G 3.6G 136G 3% /home/ysy2080/nfs
드디어 성공!!
※ mount시 error
mount: mount to NFS server '222.122.13.146' failed: RPC Error: Program not registered.
2시간만에 구글링으로 알아냈다....;;;
hosts.allow hosts.deny파일이 604이상이 되야된다;;;
NFS 주요 데몬
* NFS 마운트 데몬이다. * /etc/exports 설정에 따라 클라이언트의 마운트 요청을 처리한다. |
* 클라이언트가 rpc.mountd에 접속이 유지되면, rpc.nfsd를 사용하여 클라이언트의 요구에 따라 처리한다. * /etc/exports 설정에 따라 클라이언트는 다양한 작업을 할 수 있다. |
* 파일 잠금과 관련된 데몬으로 현재 사용 중인 파일을 다른 사람이 사용할 수 없게 잠그는 역할을 한다. |
* 파일 잠금과 해제의 역할을 한다. |
→ RPC(Remote Procedure Call) ㅍ로그램을 port(tcp/udp)에 매핑시켜주는 데몬이다. → NFS를 사용하려면 꼭 필요한 데몬이다. → RPC를 사용하는 프로그램(NFS)이 시작되면 portmap은 서비스를 제공할 port를 portmap에 등록시킨다. → portmap은 Time Service를 필요로 한다. (Time Service는 xinetd 데몬에 포함되어 있다.) → portmap이 자신의 운영체제에 설치되어 있는지 확인하자. [출처] nfs의 포트고정시키기(방화벽 사용을 위함)|작성자 붉은여우 |