Aaron's Blog logo Aaron's Blog

서버측 설정

portmap과 NFS를 실행해야 합니다. 그리고 nsflock도 실행해주세요.

설치가 되어있지 않다면 설치해주세요. 

CentOS는 기본적으로 설치가 되어있으니 설치과정은 넘어갑니다.

/etc/init.d/portmap start

portmap (을)를 시작 중: [  OK  ]

/etc/init.d/nfs start

NFS 서비스를 시작 중:  [  OK  ]
NFS 쿼터를 시작 중: [  OK  ]
NFS 데몬을 시작 중: [  OK  ]
NFS mountd를 시작 중: [  OK  ]

/etc/init.d/nfslock start

rpcinfo -p

로 확인하면 아래와 같이 포트번호와 사용중인 목록이 나옵니다.

nfs랑 portmap이 보이면 잘 실행되고 있는것 입니다.

100000    2   tcp    111  portmapper
100000    2   udp    111  portmapper
100011    1   udp    625  rquotad
100011    2   udp    625  rquotad
100011    1   tcp    628  rquotad
100011    2   tcp    628  rquotad
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100021    1   udp  54868  nlockmgr
100021    3   udp  54868  nlockmgr
100021    4   udp  54868  nlockmgr
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100021    1   tcp  36016  nlockmgr
100021    3   tcp  36016  nlockmgr
100021    4   tcp  36016  nlockmgr
100005    1   udp    654  mountd
100005    1   tcp    657  mountd
100005    2   udp    654  mountd
100005    2   tcp    657  mountd
100005    3   udp    654  mountd
100005    3   tcp    657  mountd

마운트할 디렉토리를 설정하기 위해 /etc/exports 파일을 열어 아래의 내용을 추가합니다.

vi /etc/exports

/home/nfs 192.168.5.123(rw)

/home/nfs 폴더에 대해서 192.168.5.123 아이피에 rw(읽기쓰기)권한을 준다는 설정입니다.

nfs 재실행합니다.

/etc/init.d/nfs restart

NFS mountd를 종료 중: [  OK  ]
NFS 데몬을 종료 중: [  OK  ]
NFS quota를 종료 중: [  OK  ]
NFS 서비스를 종료 중:  [  OK  ]
NFS 서비스를 시작 중:  [  OK  ]
NFS 쿼터를 시작 중: [  OK  ]
NFS 데몬을 시작 중: [  OK  ]
NFS mountd를 시작 중: [  OK  ]

서버측 설정이 끝났습니다.

NSF 설정을 확인하고자 할때는

showmount -e

이 명령어로 확인이 가능합니다.


클라이언트측

portmap과 nfs를 실행합니다. 

/etc/init.d/portmap start

portmap (을)를 시작 중: [  OK  ]

/etc/init.d/nfs start

NFS 서비스를 시작 중:  [  OK  ]
NFS 쿼터를 시작 중: [  OK  ]
NFS 데몬을 시작 중: [  OK  ]
NFS mountd를 시작 중: [  OK  ]

마운트를 실행합니다
 

mount -t nfs 192.168.5.123:/home/nfs /home/nfs

192.168.5.123서버의 /home/nfs 폴더를 /home/nfs 폴더에 마운트 하는 명령어 입니다.

명령이 잘 실행되었다면 NFS설정이 완료된 것입니다.

마운트한 폴더를 삭제할때는 먼저 마운트를 해제해주세요.

umount /home/nfs

서버나 클라이언트 쪽에서 부팅시 자동으로 올라오도록 설정하기 위해서는 아래의 명령어를 실행하면 됩니다.

chkconfig –level 3 nfs on

chkconfig –level 3 portmap on

여기까진 어렵지 않은데 방화벽이 있을경우가 설정이 복잡해집니다.

NFS 사용할때 랜덤방식으로 포트번호가 변경되기 때문에 포트를 고정시켜주는 작업이 필요하고

이 고정된 포트에 대해서 방화벽을 해제해주셔야 합니다.

서버측에서 방화벽이 있는 경우 아래의 작업을 추가로 진행해주어야 합니다.

rpcinfo -p

로 사용중인 포트를 다시 확인해봅시다.

100000    2   tcp    111  portmapper
100000    2   udp    111  portmapper
100011    1   udp    625  rquotad
100011    2   udp    625  rquotad
100011    1   tcp    628  rquotad
100011    2   tcp    628  rquotad
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100021    1   udp  54868  nlockmgr
100021    3   udp  54868  nlockmgr
100021    4   udp  54868  nlockmgr
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   2049  nfs
100021    1   tcp  36016  nlockmgr
100021    3   tcp  36016  nlockmgr
100021    4   tcp  36016  nlockmgr
100005    1   udp    654  mountd
100005    1   tcp    657  mountd
100005    2   udp    654  mountd
100005    2   tcp    657  mountd
100005    3   udp    654  mountd
100005    3   tcp    657  mountd

111 포트와 2049번 포트를 제외하고 나머지 포트는 NFS가 실행될때마다 변경되는데요 포트를 고정시켜야 합니다.

vi /etc/init.d/nfslock

start() {
    if [ ! -f /var/lock/subsys/nfslock ]; then
        # Start daemons.
        if [ “$USERLAND_LOCKD” ]; then
          echo -n $”Starting NFS locking: “
          daemon rpc.lockd -p 4000

/etc/init.d/nfslock을 열어 daemon rpc.lockd -p 4000 로 수정해주세요.

vi /etc/sysconfig/nfs

LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002

/etc/sysconfig/nfs에서 TCP, UDP, MOUNTD 포트번호를 고정합니다.

vi /etc/services

pxc-splr-ft  4003/tcp                   # pxc-splr-ft

pxc-splr-ft 4003/udp                   # pxc-splr-ft

rquotad         4003/tcp                        # rpc.rquotad tcp port
rquotad         4003/udp                        # rpc.rquotad udp port

/etc/services를 열어 4003번 포트에 대한 내용을 추가해야합니다. 기존 4003번 포트는 주석처리해주세요.

자 이제 수정한 값을 적용하기 위해 NFS를 재실행합니다.

/etc/rc.d/init.d/nfslock restart

/etc/rc.d/init.d/nfs restart

포트가 잘 변경되었는지 확인해봅시다.

rpcinfo -p

100000    2   tcp    111  portmapper
100000    2   udp    111  portmapper
100024    1   udp    614  status
100024    1   tcp    617  status
100011    1   udp    668  rquotad
100011    2   udp    668  rquotad
100011    1   tcp    671  rquotad
100011    2   tcp    671  rquotad
100003    2   udp   2049  nfs
100003    3   udp   2049  nfs
100003    4   udp   2049  nfs
100003    2   tcp   2049  nfs
100003    3   tcp   2049  nfs
100003    4   tcp   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
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

4001번 4002번 포트를 잘 사용하고 있네요.

이제 NFS에 사용되는 포트들에 대해서 방화벽을 해제합니다.

vi /etc/sysconfig/iptables

-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 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 tcp -p tcp –dport 4000:4004 -j ACCEPT
-A RH-Firewall-1-INPUT -m state –state NEW -m udp -p udp –dport 4000:4004 -j ACCEPT

그리고 iptables를 재실행합니다.
 

/etc/rc.d/init.d/iptables restart

서버측의 hosts.allow 또는 hosts.deny에 클라이언트측 서버에 대한 접근을 허용 또는 막아놓았다면 이에 대한 허용처리도 해주어야 합니다.

vi /etc/hosts.allow

portmap : 192.168.5.123
mountd : 192.168.5.123

nfs가 실행이 되지 않았거나, 방화벽이 열리지 않았거나, host가 막혀있다면

authentication error
RPC Error: Program not registered.

클라이언트측에서 mount 명령어를 실행할때 이런 종류의 에러메시지를 받을 수 있습니다.

이런 메시지가 나타난다면, 서버측과 클라이언트 측의 nfs 관련 서비스가 잘 실행되고 있는지 확인해주시고,

방화벽이나 특정 ip에 대해서 접근을 막아놓지 않았는지 확인해보세요.

구글링을 통해 보니 이런 오류메시지가 나왔을때

다른 분들의 경험에서는 hosts.allow, hosts.deny파일의 퍼미션이 604이상이 되어야 한다고도 하네요.