Monday, April 23, 2012

Pengalaman menggunakan Network File System (NFS)

Beberapa hari ini jadi seperti jaman dulu ketika sering berkutat dengan Linux, pasalnya saya coba melakukan setup NFS server di Solaris untuk kemudian di-mount oleh mesin lain dengan sistem operasi Windows 2008 Server. Menjadi seperti dulu karena pekerjaan ini membuat saya perlu sedikit troubleshoot tentang NFS dan juga sedikit riset tentang detail NFS protocol dan juga protokol-protokol lain yang mendukungnya.

Setup NFS server dan testing NFS client untuk mounting di lokal pada mesin Solaris sangatlah mudah. NFS merupakan protokol yang dibuat oleh Sun yang juga merupakan pembuat sistem operasi Solaris, jadi asumsi awal saya memang aplikasi NFS package pasti sudah ada di Solaris dan tinggal mengaktifkan saja.



Mengaktifkan NFS di Solaris, dengan bantuan Google, menjadi sangat mudah. Langkahnya:

  1. Jalankan perintah untuk menjalankan NFS server

    svcadm -v enable -r network/nfs/server
  2. Share direktori/folder yang diinginkan, misalkan direktori yang akan di-share adalah /disk

    share -F nfs -o rw /disk
  3. Agar setiap restart direktori tersebut tetap di-share maka masukan perintah tersebut ke dalam file

    /etc/dfs/dfstab
Test mounting direktori yang sudah dishare di mesin lokal.
  1. Jalankan perintah mount untuk mapping direktori yang di-share ke direktori lain misalnya direktori  /mount_point

    mount -F nfs server:/disk /mount_point
  2. Setelah itu test dengan membuat sebuah file di direktori  /disk  dan kemudian cek direktori  /mount_point
Lebih detail tentang setup dan konfigurasi NFS pada sistem operasi Solaris bisa dibaca pada buku petunjuk "System Administration Guide: Network Services"

Untuk setup NFS client di Windows 2008 Server, petunjuk langkah-langkahnya ada di sini. Jika hanya ingin melakukan direktory map ke mesin lain, yang perlu dilakukan adalah:
  1. Install Service for NFS Component, langkahnya seperti yang tertulis di dokumen tersebut.

    1. Click Start, point to Administrative Tools, and then click Server Manager.
    2. In the left pane, click Roles.
    3. Under Roles Summary in the right pane, click Add Roles. The Add Roles Wizard appears. Click Next.

    4. Select the File Services check box to install this role on the server, and then click Next.

    5. Select the Services for Network File System check box, and then click Next.
    6. Confirm your selection, and then click Install.
    7. When the installation completes, the installation results appear. Click Close.
  2. Check jika service "Client for NFS" sudah jalan dengan membuka Service for NFS, caranya:

    click 
    Start, point to Administrative Tools, and then click Services for Network File System.

  3. Kemungkinan perlu juga untuk mengubah setting Windows Firewall, seperti dijelaskan di dokumen tersebut. Untuk memudahkan coba set disable dulu fasilitas Windows Firewall-nya.
  4. Map sebuah drive letter (misalnya Z:) untuk direktori yang berasa di NFS Server (dalam kasus ini yang berada di Solaris), caranya:

    1. On a UNIX-based server running NFS software, create an NFS shared resource. Create a test file on the shared resource.
    2. Log on to the computer running Windows Server 2008 and Client for NFS with one of the Windows user accounts that you created for this test.
    3. Open Windows Explorer (My Computer) and on the Tools menu, click Map Network Drive.
    4. Type either the UNIX-style server and shared resource name (hostname://sharedresourcename) or the Universal Naming Convention (UNC) path of the NFS shared resource on the UNIX file server, and then click OK.

    Hostname selain dengan format hostname://sharedirectory bisa juga dengan format \\hostname\sharedictory.
    Atau cara lain adalah dengan menggunakan perintah mount dari command prompt, yaitu sperti ini

        mount hostname://disk z:

    Perintah tersebut sama dengan

        net use hostname://disk z:

    Lihat petunjuk perintah mount di technet library.
Untuk membuat sebuah mesin bisa 'melihat' direktori yang di-share, maka ada yang perlu diperhatikan disisi network yaitu akses port. Akses NFS bekerja pada beberapa port, jika pada port yang dibutuhkan diblok oleh switch atau firewall maka akan membuat mesin yang akan mengakses direktori yang di-share menjadi gagal. Ini yang terjadi kemarin sehingga saya harus lebih detail mengerti tentang protokol NFS.

Perlu diingat NFS didesain menggunakan protokol Remote Procedure Call (RPC, dulu disebut SunRPC atau ONC RPC ) yang menggunakan TCP atau UDP sebagai protokol transport-nya, jadi sebaiknya kedua jenis protokol tersebut tidak diblok di firewall. RPC menggunakan eXternal Data Representation (XDR) sebagai format argument (request) dan return value (reply).

NFS juga menggunakan protokol MOUNT sebagai file handle.




Jika kita melakukan pencarian, mungkin kita akan mendapatkan informasi bahwa NFS bekerja di port 2049. Tapi sebenarnya NFS bergantung pada protokol lain yang nomor portnya juga berbeda. Saya berbicara tentang NFS v3 disini. NFS versi 4, dari apa yang saya baca, hanya membutuhkan satu port saja yaitu 2049.

NFS menggunakan RPC, dan memang sesuai desainnya RPC dapat digunakan untuk meminta komunikasi dengan suatu program dengan menggunakan port lain artinya port yang kemudian digunakan untuk komunikasi dengan program tersebut bersifat random. Ilustrasi berikut mungkin bisa menggambarkan kalimat tersebut:

Gambar dikutip dari buku "NFS Ilustrated".

Untuk memahami lebih jelas bagaimana protokol NFS bekerja, ada baiknya melihat sequence diagram berikut ini.

Gambar sebagian dari dokumen sequence diagram NFS protocol,
diambil dari www.eventhelix.com


Berikut ini adalah protocol/program yang terlibat dalam proses NFS


Portmapper atau Rpcbind (sun rpc) - port: 111
NFS mount protocol - port: random
Lock manager protocol  - port: random
Network status manager - port: random
NFS - port: 2049

Selain itu protokol atau program lain sebagai extension dapat terlibat dalam NFS service adalah:

Remote quota reporting (RQUOTAD)  - port: random

Protokol-protokol tersebut menggunanakan RPC dan nilai port yang random tersebut biasanya bernilai besar, di Solaris nilainya bisa berada pada range 2^15 sampai 2^16-1 (32768 - 65535). Pada sistem operasi Linux, port-port random tersebut dapat buat menjadi fix. Nomor port yang dianjurkan pada sistem operasi Linux bisa dilihat di sini. Port -port tersebut di Windows 2008 server juga tidak random, nomor port yang digunakan dapat dilihat di sini.

Begini jadinya jika port dengan nilai besar diblok oleh firewall.



Kita lihat hasil snoop network diatas, pada dua kali percobaan mounting dari mesin 10.254.206.39 (lihat pada baris no 16 dan 30) menghasilkan reply yang memberikan nilai port 39679 (lihat pada baris no 18 dan 32). Kemudian mesin 10.254.206.39 berusaha melakukan TCP handshaking dengan menngirimkan TCP paket ke mesin 10.254.4.13 dengan port 39679, tapi karena port tersebut diblok maka tidak mendapat balasan sehingga proses mounting gagal.

Saran saya, jika ingin melakukan file/resource sharing dengan menggunakan NFS, lakukanlan hanya pada mesin yang berdekatan, yang berada dalam satu segment network dan tidak "halangi" oleh firewall. Jika memang terpaksa ada firewall berarti kita harus tau apakah port-port yang terlibat random atau tidak jika random maka buka saja semua port yang nilainya diatas 30000.


Untuk lebih detail mengenai NFS protocol bisa dibaca dokumen-dokumen RFC maupun pada tautan berikut:

NFS v3 - RFC1813 (Mount protocol dan Lock Manager protocol ada di dokumen ini pada bab Appendix)
RPC v2 - RFC1831
XDR - RFC1832
Binding protocol / Portmapper - RFC1833

Membaca RFC dokumen yang menspesifikasikan protokol tidak lah mudah (untuk dimengerti), jadi ada baiknya membaca buku NFS Illustrated


2 comments:

Unknown said...

thanks infonya.. btw follow back y..

masa iya said...

Sampai sekarang cuma tahu fat, ntfs dan reiserfs saja karena belum pernah memakai OS solaris. Apakah hanya untuk OS tertentu ??

Followers