1. 程式人生 > >CentOS6.9下NFS配置說明

CentOS6.9下NFS配置說明


NFS是Network File System的縮寫,即網路檔案系統。它的主要功能是通過網路(一般是區域網)讓不同的主機系統之間可以共享檔案或目錄。NFS客戶端可以通過掛載(mount)的方式將NFS服務端共享的資料目錄掛載到NFS客戶端本地系統中(就是某一個掛載點下)。從NFS客戶端的機器本地看,NFS服務端共享的目錄就好像是客戶自己的磁碟分割槽或者目錄一樣,而實際上確是遠端的NFS服務端的目錄。NFS主要用於類Unix系統之間的共享, 最早是由Sun公司發展出來的。

NFS網路檔案系統類似windows系統的網路共享、安全功能、網路驅動器對映,這也和linux系統裡的samba服務類似。應用於網際網路中小型叢集架構後端作為資料共享,如果是大型網站,那麼有可能還會用到更復雜的分散式檔案系統,例如Moosefs(mfs)、glusterfs、FastDFS。



一、NFS原理流程及RPC服務的介紹
既然NFS是通過網路來進行伺服器端和客戶端之間的資料傳輸,那麼兩者之間要傳輸資料就要有相對應的網路埠,NFS伺服器到底使用哪個埠來進行資料傳輸呢?基本上NFS這個服務的埠開在2049,但由於檔案系統非常複雜。因此NFS還有其他的程式去啟動額外的埠,這些額外的用來傳輸資料的埠是隨機選擇的,是小於1024的埠;既然是隨機的那麼客戶端又是如何知道NFS伺服器端到底使用的是哪個埠呢?這時就需要通過遠端過程呼叫(Remote Procedure Call,RPC)協議來實現了!

NFS RPC最主要的功能就是記錄每個NFS功能所對應的埠號,並且在NFS客戶端請求時將該埠和功能對應的資訊傳遞給請求資料的NFS客戶端,讓客戶端可以連結到正確的埠上去,從而實現資料傳輸。只在第一次建立連線時候幫助網路應用程式找到正確的port,當雙方正確連線時,埠就和應用繫結,PPC就無用了。相當於媒婆。  


RPC怎樣知道NFS的每個埠呢?
原因是,當NFS服務啟動時會隨機取用數個埠,並主動向RPC服務註冊取用的相關埠資訊,這樣,RPC服務就可以知道每個埠所對應的NFS功能了,然後RPC服務使用固定的埠號111來監聽NFS客戶端提交的請求,並將正確的NFS埠應答給NFS客戶端,這樣一來,就可以讓NFS客戶端與服務端進行資料傳輸了。

提示:在啟動NFS SERVER之前,首先要啟動RPC服務(即rpcbind服務,下同)否則NFS SERVER就無法向RPC服務註冊,另外,如果RPC服務重新啟動,原來已經註冊好的NFS埠資料就會全部丟失。因此此時RPC服務管理的NFS程式也要重新啟動以重新向RPC註冊。特別注意:一般修改NFS配置文件後,是不需要重啟NFS的,直接在命令執行exportfs –rv即可使修改的/etc/exports生效。


客戶端NFS和服務端NFS通訊過程

1、首先伺服器端啟動RPC服務,並開啟111埠

2、啟動NFS服務,並向RPC註冊埠資訊

3、客戶端啟動RPC(rpcbind服務),向服務端的RPC(rpcbind)服務請求服務端的NFS埠

4、服務端的RPC(rpcbind)服務反饋NFS埠資訊給客戶端。

5、客戶端通過獲取的NFS埠來建立和服務端的NFS連線並進行資料的傳輸

二、NFS服務端軟體的安裝
1、安裝nfs服務主程式nfs-kernel-server
這個軟體提供nfs的主要服務,提供檔案系統的完整功能。這裡要提醒一下,NFS伺服器會直接使用到核心的模組,所以核心必須要支援 NFS 才行。如果作業系統的版本是自行編譯的核心的話,需要注意編譯NFS的核心支援。安裝命令如下:
-------------------------------------------------
[[email protected] ~]# yum install nfs-utils
-------------------------------------------------

2、安裝RPC主程式rpcbind以前的程式名叫做portmap
NFS 服務都是通過 RPC 來具體實現的,所以要正常使用NFS服務,需要啟動 rpcbind來實現埠的對映工作,通過下面命令安裝:
------------------------------------------------
[[email protected] ~]# yum install rpcbind
------------------------------------------------

三、檢視NFS相關服務是否啟動
1、啟動rpcbind服務
---------------------------------------------------
[[email protected] ~]# service rpcbind start
---------------------------------------------------

2、啟動NFS主服務:
----------------------------------------
[[email protected] ~]# service nfs start
----------------------------------------

3、設定rpcbind主程式開機啟動
----------------------------------------
[[email protected] ~]# chkconfig rpcbind on
----------------------------------------

4、設定NFS主程式開機啟動
------------------------------------
[[email protected] ~]# chkconfig nfs on
------------------------------------

5、通下面的命令產看上面的服務是否開機啟動
---------------------------------------------
[[email protected] ~]# chkconfig --list rpcbind
[[email protected] ~]# chkconfig --list nfs
---------------------------------------------


四、NFS server端的配置

1、主要的配置檔案:/etc/exports
這個檔案是NFS的主要配置檔案,如果不存在新建這個檔案,後面介紹他的用法。

2、NFS檔案系統的維護命令:exportfs
這個是維護NFS共享資源的命令,我們可以利用這個命令重新共享/etc/exports更新的目錄資源、將NFS server共享的的目錄解除安裝或重新共享等,這是NFS系統裡面相當重要的一個命令,後面會具體介紹。

五、/etc/exports配置檔案的語法與引數
1、先舉個例子:將/media/目錄共享給區域網中192.168.1.0/24網段的使用者可讀寫並且資料同步寫入到硬碟和記憶體,所以使用者只讀。/etc/exports配置檔案的內容如下:
=============================================
[[email protected] ~]# vim.tiny /etc/exports
/media     192.168.1.0/24(rw,sync)        *(ro)
[共享目錄]   [可以訪問的主機(許可權)]       [*代表所有使用者(許可權)]
=============================================
這個配置檔案很簡單,每一行前面是要共享的目錄,是以目錄為單位。然後這個目錄可以依照不同的許可權共享給不同的主機,不同的主機用空格分開,主機後面是以小括號"()"定義許可權引數,若許可權引數不只一個時,則以逗號","分開,並且主機名與小括號是連在一起的,主機與共享目錄之間用空格分開,在這個檔案內也可以利用#號來進行註釋。

2、主機設定主要有以下幾種方式:
可以使用完整的IP或者網路號,例如:
單個主機:192.168.1.100  網路號:192.169.1.0/24或192.168.1.0/255.255.255.0

可以使用主機名,但這個主機名必須要在/etc/hosts內,或可以使用DNS找到該名稱,重點是可以找到IP地址,如果是主機名可以支援萬用字元,例如"*"或"?"均可接受。

3、小括號內常用的許可權引數如下:
================================================================
ro:共享目錄只讀;
rw:共享目錄可讀可寫
sync:同步,將資料同步寫入記憶體緩衝區與磁碟中,效率低,但可以保證資料的一致性;
async:非同步,將資料先儲存在記憶體緩衝區中,必要時才寫入磁碟,效率高,但有丟失資料的風險;
wdelay(預設):如果有多個客戶端要對同一個共享目錄進行寫操作,則將這些操作集中執行。對有很多小的IO寫操作時,使用該選項可以有效的提高效率;
no_wdelay:如果有多個客戶端要對同一個共享目錄進行寫操作則立即寫入。當設定了async選項時,no_wdelay選項無效,應與sync配合使用;
root_squash(預設):將來訪的root使用者對映為匿名使用者或使用者組;
no_root_squash:來訪的root使用者保持root帳號許可權;
all_squash:所有訪問使用者都對映為匿名使用者或使用者組;
no_all_squash(預設):訪問使用者先與本機使用者匹配,匹配失敗後再對映為匿名使用者或使用者組;
anonuid=<UID>:指定匿名訪問使用者的本地使用者UID,預設為nfsnobody(65534);
anongid=<GID>:指定匿名訪問使用者的本地使用者組GID,預設為nfsnobody(65534);
secure(預設):限制客戶端只能從小於1024的tcp/ip埠連線伺服器;
insecure:允許客戶端從大於1024的tcp/ip埠連線伺服器;
subtree_check :若輸出目錄是一個子目錄,則nfs伺服器將檢查其父目錄的許可權;
no_subtree_check(預設) :即使輸出目錄是一個子目錄,nfs伺服器也不檢查其父目錄的許可權,這樣可以提高效率;
hide:共享一個目錄時,不共享該目錄的子目錄;
no_hide:共享子目錄;
================================================================
如果想了解更多的引數,可以使用man exports

六、NFS許可權控制
NFS伺服器的架設比較簡單,最大的問題在於許可權方面的管理。前面已經介紹了NFS提供了ro和rw選項,可以控制客戶端對共享檔案的讀或寫許可權。其實NFS共享檔案的訪問許可權並不僅僅由這些選項決定,它由三方面控制,第一方面就是伺服器端nfs配置檔案裡許可權引數的控制,第二方面就是伺服器端檔案在作業系統裡的許可權控制,包括共享的目錄和裡面檔案的許可權,也就是檔案的屬性中的rwx(讀、寫、執行)。第三方面就是客戶端,共享的目錄需要先掛載到客戶端指定的目錄上,客戶端才能通過掛在目錄訪問,所以客戶端掛載目錄的許可權也起作用,就是目錄屬性中的rwx(讀、寫、執行)後面客戶端將再介紹。只有客戶端的使用者同時滿足上面的三個條件才能訪問共享目錄裡面的檔案。

作業系統對使用者的判斷其實並不是通過使用者名稱,而是通過/etc/passwd檔案中所記錄的UID號,由於NFS客戶端和NFS伺服器是兩臺不同的機器,即使他們的作業系統有相同的使用者名稱,其UID也不一定一樣,那麼客戶端使用者訪問NFS伺服器的過程是怎樣的那?下面舉例說明下。

檢視使用者UID的命令如下:
--------------------------------
[[email protected] ~]# id -u 使用者名稱
--------------------------------

客戶端使用者訪問共享目錄檔案的過程如下:
先假設客戶端使用者名稱為laopi,UID暫定,用於掛載的共享目錄為/Client目錄,使用者laopi對這個目錄的許可權為讀寫執行(目錄的執行許可權是可以進入這個目錄),伺服器端共享目錄為/Server目錄許可權為drwxr-xr-x(目錄的所有者使用者為pipci,UID為1000),nfs共享配置檔案裡設定為rw

1、當客戶端使用者laopi的UID與伺服器端使用者pipci的UID相同時,即laopi的UID也為1000,這種情況由於使用者laopi對掛載目錄/Client具有讀寫權執行限,nfs共享配置檔案裡設定為讀寫,NFS伺服器上pipci使用者對共享目錄/Server具有讀寫執行許可權,所以客戶端使用者對共享目錄/Server也具有讀寫執行許可權,因為UID相同。

2、當客戶端使用者laopi的UID與伺服器端使用者pipci的UID不同時,假設laopi的UID為1010,這種情況由於使用者laopi對掛載目錄/Client具有讀寫權執行限,nfs共享配置檔案裡設定為讀寫,但是NFS伺服器上UID為1010的使用者對共享目錄/Server只具有讀寫許可權,所以客戶端使用者對共享目錄/Server也只具有讀寫許可權,因為UID為1010的使用者對/Server目錄來說是其他使用者。如果也想讓laopi使用者具有讀寫執行的許可權可以為目錄/Server新增其他使用者的執行許可權

3、當客戶端使用者為root,因為正常所有Linux作業系統裡的root使用者UID都為0,所以限制許可權的只有nfs共享配置檔案裡設定引數了,如果許可權引數有root_squash選項和rw選項,則就的看共享目錄對匿名用有什麼許可權,如果許可權引數root_squash改為no_root_squash選項,那就沒有限制了。

七、exportfs命令:輸出共享目錄
NFS服務啟動時會讀取/etc/exports配置檔案中的內容,把檔案中設定的共享目錄輸出供客戶端使用,在NFS服務啟動後,如果對/etc/exports進行了更改,需要通過exports命令對共享的目錄進行輸出,輸出完成後,客戶端才能訪問新設定的共享目錄。exportfs命令的用法如下:

[[email protected] ~]# exportfs  [引數]

引數:
-a :全部輸出或取消輸出/etc/exports中共享的內容
-r :重新讀取/etc/exports中的配置
-u :取消一個或多個共享目錄的輸出
-i :忽略/etc/exports中的配置,而使用預設或命令列中指定的選項
-o :通過命令新增共享目錄,重啟後失效。
-v :如果不跟其他選項一起使用,則顯示當前共享的所有目錄及他們的選項設定,如果輸出或取消輸出共享目錄,則顯示進行了那些操作。

具體例子:
[[email protected] ~]# exportfs -v        #產看所以共享目錄
[[email protected] ~]# exportfs -rv       #使/etc/exports更改的配置生效
[[email protected] ~]# exportfs -Au       #取消當前所有的共享目錄
[[email protected] ~]# exportfs -Av       #只檢視/etc/exports中共享的目錄同時恢復取消的共享目錄
[[email protected] ~]# exportfs -o rw,async 192.168.2.100:/mnt     #新增共享目錄/mnt,注意命令格式-o引數後面是許可權,多個許可權用逗號分開,許可權後面是可以訪問的主機或網段,後面是共享的目錄,主機和共享目錄之間有冒號(:)並且不可以有空格。
[email protected]:~# exportfs -uv 192.168.2.100:/mnt     #取消exportfs命令新增的共享目錄

八、NFS客戶端配置
1、NFS客戶端同樣要安裝rpcbind軟體並啟動該服務
------------------------------------------------
[[email protected] ~]# yum install rpcbind
------------------------------------------------

2、啟動rpcbind服務
---------------------------------------------------
[[email protected] ~]# service rpcbind start
---------------------------------------------------

3、設定rpcbind主程式開機啟動
----------------------------------------
[[email protected] ~]# chkconfig rpcbind on
----------------------------------------

4、通下面的命令產看上面的服務是否開機啟動
---------------------------------------------
[[email protected] ~]# chkconfig --list rpcbind
---------------------------------------------

5、通過命令showmount檢視共享的目錄
在掛載遠端NFS共享目錄前,做好先使用showmount命令檢視NFS伺服器的共享目錄列表,已確定這些共享目錄是否執行本地訪問。showmount命令的格式如下:

[[email protected] ~]# showmount  [選項]  [主機的IP或名稱]

常用的選項如下:
-a:該選項一般在NFS伺服器上使用,用於顯示已經掛載了伺服器共享目錄的客戶端及他們所使用的共享目錄。
-d:與-A類似,但只顯示目錄,不顯示具體的客戶端。
-e:顯示指定NFS伺服器輸出的共享目錄列表
-h:顯示幫助資訊
-v:顯示版本資訊
--no-headers:不輸出標題資訊

具體例子:
[email protected]:~$ showmount -e 192.168.1.102       #顯示NFS伺服器192.168.1.102 輸出的共享目錄

6、建立掛載點並掛載共享目錄
使用者可以自定義掛載點,而與需與NFS伺服器上共享目錄一樣的路徑,使用者可以建立多個掛載點,掛載同一個共享目錄。建立的目錄如果由使用者全權控制,使用者對掛載目錄應該有讀寫執行的許可權。
掛載共享目錄使用的命令與掛載本地檔案系統使用的命令一樣,都是使用mount命令,其格式如下:

[[email protected] ~]# mount  [選項]  NFS伺服器IP或主機名:共享目錄  掛載點

命令格式中的冒號(:)一定不要少,他是在NFS伺服器IP或主機名和共享目錄中間,沒有空格,mount命令與nfs相關選項說明如下:

-t nfs:指定要掛載的檔案系統型別為NFS,不加這個選項也可以,mount命令會自動識別
-o ro:只掛載的檔案系統為只讀
-o rw:可讀寫
-o port=n:指定連線NFS伺服器使用的埠號
-o retry=n:指定放棄掛載前嘗試的時間,單位為分鐘。前臺掛載的預設值為2,後臺掛載的預設值為10000
-o fg:指定以前臺方式完成掛載工作。如果與NFS伺服器之間的連線存在問題,那麼mount命令會一直重複嘗試掛載,直到成功或超時為止。在這個過程中,mount命令會佔用終端視窗,使用者無法在視窗中執行其他命令
-o bg:與fg相反,使用後臺方式完成掛載工作。如果與NFS伺服器之間的連線存在問題,那麼mount命令會在後臺進行掛載,而不會佔用終端視窗。

注意:-o選項可以通過逗號(,)分隔,聯合使用。

具體例子: 把NFS伺服器192.168.1.102的共享目錄/media掛在到本地的/media目錄,掛載選項設定為只讀,後臺掛載方式,放棄掛載前嘗試的時間為1分鐘
-------------------------------------------------------------------------------
[[email protected] ~]# mount -t nfs -o rw,bg,retry=1  192.168.1.102:/media  /media
-------------------------------------------------------------------------------

7、解除安裝NFS檔案系統
與解除安裝普通的本地檔案系統一樣,可以通過umount命令把它解除安裝,終止與NFS伺服器的連線。但在解除安裝前,應該確保已經沒有任何程序在使用該檔案系統。使用者可以通過fuser命令進行檢查。
解除安裝NFS檔案系統的命令格式如下所示:
[[email protected] ~]# umount [遠端檔案系統或掛載點]

解除安裝上面例子掛載的NFS檔案系統的方法:
[[email protected] ~]# umount /media  或[[email protected] ~]# umount 192.168.1.102:/media

8、fuser命令簡單用法
linux環境下,當使用umount命令解除安裝掛載點時,會遇到“device is busy”提示,這時fuser就能查出誰在使用這個資源;當然umount –lf  [掛載點] 也可以強制解除安裝

執行下面命令看一下哪個使用者哪個程序佔用著此目錄,假設掛載的目錄為/media
[[email protected] ~]# fuser -mvu /media

執行下面命令殺掉佔用此目錄的程序
[[email protected] ~]# fuser -mvk /media
或者fuser -mvki  /media(每殺掉一下程序會讓你確認)

選項說明
-m name 指定一個掛載檔案系統上的檔案或者被掛載的塊裝置(名稱name)。
-u 在每個PID後面新增程序擁有者的使用者名稱稱
-v 詳細模式
-k 殺掉訪問檔案的程序
-i 殺掉程序之前詢問使用者,如果沒有-k這個選項會被忽略

九、使用autofs按需掛載共享目錄
NFS檔案系統具有動態性,即需要的時候才有必要掛載。我們怎麼才可以做到僅在訪問時候才動態掛載共享目錄那,我們用autofs服務來實現。Autofs與Mount/Umount的不同之處在於,它是一種看守程式。如果它檢測到使用者正試圖訪問一個尚未掛載的檔案系統,它就會自動檢測該檔案系統,如果存在,那麼Autofs會自動將其掛接。另一方面,如果它檢測到某個已掛接的檔案系統在一段時間內沒有被使用,那麼Autofs會自動將其解除安裝。因此一旦運行了Autofs後,使用者就不再需要手動完成檔案系統的掛接和解除安裝。

1、安裝autofs軟體
------------------------------------
[[email protected] ~]# yum install autofs
------------------------------------

2、啟動autofs服務
------------------------------------------------
[[email protected] ~]# service autofs start
------------------------------------------------

3、設定autofs服務開機啟動
-----------------------------------------------
[[email protected] ~]# chkconfig autofs on
-----------------------------------------------

4、通下面的命令產看上面的服務是否開機啟動
---------------------------------------------
[[email protected] ~]# chkconfig --list autofs
---------------------------------------------

4、autofs配置檔案設定
/etc/auto.master是autofs的主要配置檔案,該檔案的配置比較簡單,只需要設定掛載點的父目錄和對映檔案即可,格式如下所示:
-------------------------------
 掛載點父目錄    對映檔案
------------------------------

 掛載點父目錄:例如要把共享目錄掛載到本地的/media/nfsdd目錄下,那麼這個掛載點父目錄就是/media,而子目錄nfsdd並不需要手工建立,他會由autofs服務管理,在需要掛載時動態建立,這個父目錄最好是空白的,因為如果不是空的那麼當啟動這個服務時這個父目錄裡的檔案會全部不可見。
 
 對映檔案:該檔案是由使用者自行制定並建立(一般設定為/etc/auto.nfs),在該檔案中設定了NFS檔案系統應該如何掛載。

對映檔案格式如下:
-----------------------------------------------------
掛載點   掛載選項   NFS伺服器IP或主機名:共享目錄
-----------------------------------------------------
其中掛載點為/etc/auto.master檔案中設定的父目錄下的子目錄,子目錄為相對目錄,如上面的掛載點應該是nfsdd而不是/media/nfsdd ,掛載選項與mount命令中的選項一樣,但是選項前面需要加一個減號(-),配置檔案更改後需要重啟autofs服務才能使配置生效。

5、舉例說明: 假設需要把NFS伺服器192.168.1.102共享目錄/media自動掛載到本地目錄/media/nfsdd

先配置/etc/auto.master檔案,內容如下:
-----------------------------------
/media   /etc/auto.nfs
-----------------------------------
在配置對映檔案/etc/auto.nfs,內容如下:
------------------------------------------------
nfsdd   -rw,bg,retry=1  192.168.1.102:/media
------------------------------------------------
選項前面需要加一個減號(-)

配置完上面的檔案重啟autofs服務
[[email protected] ~]# systemctl restart autofs.service

十、NFS伺服器防火牆配置
當NFS伺服器上啟用了防火牆,客戶端通過命令showmount -e 192.168.1.102檢視共享的目錄可能會出現clnt_create: RPC: Port mapper failure - Unable to receive: errno 0 (Success)這個錯誤,解決的辦法有兩種,一種是直接關閉防火牆,第二種是新增策略,新增策略比較麻煩因為除了固定的埠port 111和2049之外還有很多服務開啟不固定的埠,通過下面的方法處理:
1、檢視NFS需要開啟的服務和對應的埠號
------------------------------------------------
[[email protected] ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  32923  mountd
    100005    1   tcp  33612  mountd
    100005    2   udp  42439  mountd
    100005    2   tcp  44098  mountd
    100005    3   udp  60318  mountd
    100005    3   tcp  45099  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  44604  nlockmgr
    100021    3   udp  44604  nlockmgr
    100021    4   udp  44604  nlockmgr
    100021    1   tcp  32829  nlockmgr
    100021    3   tcp  32829  nlockmgr
    100021    4   tcp  32829  nlockmgr
[[email protected] ~]#
-------------------------------------------------
通過上面的顯示可以看到NFS啟動了portmapper、rquotad、mountd、nfs、nlockmgr五個服務和對應的埠號, portmapper和nfs是固定埠,我們可以將剩下的三個服務的埠也固定下來。

2、CentOS 6.x提供了一個固定NFS服務的埠配置檔案,那就是/etc/sysconfig/nfs這個檔案。在這個檔案裡面就能夠指定特定的埠,這樣每次啟動NFS時,相關服務啟動的埠就會固定,這樣我們就能夠設定正確額防火牆了,這個配置檔案的內容很多,我們只需要修改rquotad、nlockmgr、mountd三個服務對應的配置選項就可以,對應選項如下:
RQUOTAD_PORT=875
LOCKD_TCPPORT=32829
LOCKD_UDPPORT=44604
MOUNTD_PORT=32923
注意,要把選項前面對應註釋符#號刪掉,埠號就是等號後面的數字,可以自定義也可以用選項預設帶的。

修改上面的配置後需要重啟nfs服務
[[email protected] ~]# service nfs restart  

2、新增防火牆規則
[[email protected] ~]# iptables -I INPUT -p tcp --dport 111 -j ACCEPT    
[[email protected] ~]# iptables -I INPUT -p udp --dport 111 -j ACCEPT    
[[email protected] ~]# iptables -I INPUT -p tcp --dport 2049 -j ACCEPT     
[[email protected] ~]# iptables -I INPUT -p udp --dport 2049 -j ACCEPT      
[[email protected] ~]# iptables -I INPUT -p tcp --dport 875 -j ACCEPT      
[[email protected] ~]# iptables -I INPUT -p udp --dport 875 -j ACCEPT     
[[email protected] ~]# iptables -I INPUT -p tcp --dport 32923 -j ACCEPT     
[[email protected] ~]# iptables -I INPUT -p udp --dport 32923 -j ACCEPT     
[[email protected] ~]# iptables -I INPUT -p tcp --dport 32829 -j ACCEPT       
[[email protected] ~]# iptables -I INPUT -p udp --dport 44604 -j ACCEPT

開放上面的埠,客戶端就可以正常用了,需要注意的是新增規則時候最好把規則新增到最前面用-I不要用-A要不然很可能被前面的規則遮蔽了。