NFS3 na stałych portach

Krótka instrukcja jak przykleić serwer NFS do konkretnych portów. Wszelkie zapiski dotyczą tzw. rozwiązania NFS zintegrowanego z jądrem Linuxa (nfs-kernel-server). Zostały one przetestowane na Ubuntu 8.04. działąją także na Ubuntu 10.04.

Zakładam, że pakiety nfs-kernel-server oraz nfs-common są już zainstalowane.

Wszystkie usługi związane z NFS zostaną przyklejone do następujących portów:

  • portmapper 111
  • nfs 2049
  • status 32765
  • mountd 32767
  • nlockmgr 32768

Na firwallu należy więc otworzyć porty: 111, 2049 oraz zakres 32765-32768.

Co musimy przykleić?

To pierwsze i najważaniejsze pytanie. Warto więc zacząć pod polecenia:

rpcinfo -p

które zwróci nam coś takiego…

program vers proto   port
 100000    2   tcp    111  portmapper
 100000    2   udp    111  portmapper
 100024    1   udp  32765  status
 100024    1   tcp  32765  status
 100003    2   udp   2049  nfs
 100003    3   udp   2049  nfs
 100003    4   udp   2049  nfs
 100021    1   udp  55241  nlockmgr
 100021    3   udp  55241  nlockmgr
 100021    4   udp  55241  nlockmgr
 100003    2   tcp   2049  nfs
 100003    3   tcp   2049  nfs
 100003    4   tcp   2049  nfs
 100021    1   tcp  33425  nlockmgr
 100021    3   tcp  33425  nlockmgr
 100021    4   tcp  33425  nlockmgr
 100005    1   udp  32767  mountd
 100005    1   tcp  32767  mountd
 100005    2   udp  32767  mountd
 100005    2   tcp  32767  mountd
 100005    3   udp  32767  mountd
 100005    3   tcp  32767  mountd

Do przyklejenia są następujące usługi:

  • mountd
  • status
  • nlockmgr

Powyższy wynik został uzyskany, gdy już niektóre usługi były przyklejone, lecz omówię teraz wszystko od początku.

mountd

Otwórz plik:

/etc/default/nfs-kernel-server

znajdź linijkę:

RPCMOUNTDOPTS=

i zamień ją na:

RPCMOUNTDOPTS="-p 32767"

Gotowe. Mountd będzie przyklejony do portu 32767.

status

1. Otwórz plik:

/etc/default/nfs-common

2. Znajdź linijkę:

NEED_STATD=

i zamień na

NEED_STATD=yes

3. Następnie znajdź linijkę:

STATDOPTS=

i zamień na

STATDOPTS="--port 32765 --outgoing-port 32766"

Gotowe. Statystyki będą teraz dosŧepne na portach 32765 i 32766.

nlockmgr

Z tą usługą będzie trochę więcej problemów, gdyż jest ona obsługiwana przez dynamicznie ładowany moduł jądra. Niezbędny parametr należy więc wpisać jako opcja do modułu. Aby to zrobić, otwórz plik:

/etc/modprobe.d/local.conf

i dopisz linijkę:

options lockd nlm_udpport=32768 nlm_tcpport=32768.

Gotowe. Kolejna usługa została przyklejona tym razem do port 32768.

Aktywacja zmian

Po wprowadzeniu zmian należy je wszystkie aktywować następującymi poleceniami.

1 Zatrzymanie usług:

sudo /etc/init.d/nfs-kernel-server stop
sudo /etc/init.d/nfs-common stop
sudo /etc/init.d/portmap stop

2. Przeładowanie modułu jądra:

ERROR! Niestety na chwilę obecną nie umiem przeładować lockd, gdyż jest on cały czas używany przez nfsd. Nfsd zaś jest nieustannie zajęty i nie wiem czym 🙁

WORKAROUND: Restart komputera. Wiem, to fatalne i brutalne rozwiązanie, ale chwilowo lepszego nie mam.

3. Uruchomienie usług… Ale jeżeli zrobiłeś punkt 2, to usługi wstaną same.