搜尋此網誌

2010/08/13

Tomato Port Forwarding / Port Triggering 設定

簡單介紹有關頻寬分享器常會有的功能:Port Forwarding,Port Triggering及UPnP/NAT-PMP


當頻寬分享器安裝好後,通常會有一個功能,叫Port Forwarding,但是手冊上不一定會說明怎麼使用,比如ASUS RT-N10 / RT-N16二本手冊,我根本沒看到在哪設定? 以下介紹在Tomato Firmware上有的Port Forwarding功能:

  • Port Forwarding
  • Port Triggering
  • UPnP/NAT-PMP


Port Forwarding
這是最早出現的轉Port方式,比如如果你的PC,IP為192.168.0.1,在這台機器上有一個應用程式開啟了1234這個埠(Port),負責接收網際網路的需求,但是由於頻寬分享器本身的防火牆功能,並不允許外面的連線連到192.168.0.1:1234這個端點,故需要設定Port Forwarding,告訴頻寬分享器,如果收到要到Port 1234的要求,就轉到192.168.0.1的Port 1234。Port Forwarding最不方便的是,要設定內部轉到哪台IP,不能動態設定。典型用Port Forwarding的例子是:架在內部的Web Server,要能讓外部可以連接時,都會用Port Forwarding。


Port Forwarding的設定直覺,不考慮安全性的話,通常使用者自己建立的伺服器,可以使用Port Forwarding來設定,其缺點是一經設定後,就只能將設定的Port導到指定的單一IP位址,缺乏彈性。




Port Triggering
Port Triggering和Port Forward很類似,差別在於不用指定IP Address,試想想如果PC端是用DHCP,那麼指定IP的話,不是很麻煩? Port Triggering可說是Port Forwarding的進化版,只要指示Router,收到外部對哪個Port要求Request時,送到內部哪個Port即可。但是它應該也無法同時處理二台PC上同一個Port的要求,我沒有實驗過是不是真的不行。


Port Triggering的先決條件是:要先從內部發出連線要求後,路由器才知道是哪台設備有此需求,當外部連線進來時,才知道要導向哪台機器。Port Triggering的問題有:(1) 一段時間沒有連線時,會自動中止連線 (2) 區域網路內,相同的Port Triggering規則,在同一時間只能有一個是有作用的。








Port Forwarding / Port Triggering 不是防火牆

以Internet來說,Port Forwarding和Port Triggering只是將一個TCP/IP的Port由外部映射到內部私人網路的某台主機上,你可以在Internet開一個80 Port的網頁伺服器,內部的伺服器可用非80 Port來當做服務,只要映射做得正確就沒有問題,例如:


網際網路來的80 port要求,會打到內部的192.168.0.2:1080的網頁伺服器上。換個角度來想,如果192.168.0.2這台機器安全性沒設定好,或是沒有定期更新,而有軟體上的漏洞,很可能會被外部的駭客入侵,而這台機器,又沒有和區域網路內的其它機器有隔離開來,駭客很容易再經由這台機器當跳板,入侵區域網路內的其它電腦,或是經由該機器去入侵其它公司或是公家機關的伺服器。
一般的人通常是因為要玩遊戲或是其它個人用途,才會設定Port Forwarding / Triggering,但如果想要在家中架網頁伺服器,或是郵件伺服器等,建議用更安全的方式:即DMZ,TomatoUSB 及其衍生的Shibby版中應都有DMZ;將伺服器放在DMZ中是較安全的作法。另外就是現行一些個人用的NAS,都標榜有網頁伺服器和雲端硬碟等功能,在安全的考量下,要不要使用見仁見智。


UPnP / NAT-PMP

UPnP是為了解決上面二種麻煩的設定而產生的,在有支援UPnP的軟硬體下,通常不用做任何設定,程式就可以直接設作業系統及軟體設備溝通,並建立連結。
NAT-PMP (NAT Port Mapping Protocol)是架構在UPnP下的更進階的協定,要用這功能,UPnP一定要打開,NAT-PMP神奇的地方是,它可以直接和Router溝通,可以把它想成自動在Router上設Port Forwarding,主要是由Apple提出,應用方面也以Apple的設備為主,但是不少軟體也有支援(比如BitComet)。

在Tomato Firmware上設定Port Forwarding、Port Triggering和UPnP


下圖表示如何在Tomato Firmware上設定Port Forwarding:
  • 範例--設定Port Forwarding:下面的例子為指定192.168.0.1:12185 TCP Port和192.168.0.1:9663 UDP 二個Port Forwarding,請注意畫面上的設定是沒打開(On)的,另外,設好後,右下角有個Save的按鈕,要按了以後才生效。


  • 範例--設定Port Trigger:下面的例子為指定12185 TCP Port,9663 UDP Port,7263 TCP三個Port Triggering,這種設定方式是不用指定IP的,請注意畫面上的設定是沒打開(On)的,另外,設好後,右下角有個Save的按鈕,要按了以後才生效。



  • 範例--設定UPnP/NAT-PMP:這個設定沒什麼好設的,只要確定有開啟就好,要用NAT-PMP的話,要先開UPnP,反正二個都打開就行,畫面上會顯示目前運作中的UPnP



理論上設有UPnP後,PC端應該就可以自動設定了,可是有時卻發現還是無效,原因可能是:

  • 你用Windows XP:UPnP需要手動開啟,請自行Google,Windows 7內定UPnP是開的
  • 軟體本身支援UPnP,但是Router卻沒開對應的Port:這可以手動設定


如何手動設定Router的UPnP對應

以Bitcomet和eMule來說,二者都支援UPnP,但是打開UPnP後,BotComet可以連出去,但是eMule卻出現Low ID,在用Tomato前,用RT-10還出現二個程式即使是Port Triggering設好了,都不能動的狀況,應該可以想成這二支程式在當時,只設定好作業系統的UPnP映射?

手動設定Router的Port Mapping
以Windows 7為例,其中一個設定方式如下:


  • 打開網路和共用中心,點開下圖中的網路圖示:



  • 網路結構下,應該會看到分享器(UPnP Router):




  • 按右鍵,選內容後,按下設定:




  • 上面列出已經設定好的Mapping,其中BitComet二個是程式自己設的,eMule是我設的:



    為何eMule在它的程式中設定用UPnP後,還是出現Low ID? 因為它不支援NAT-PMP,無法主動設定Router上的Mapping,而BitComet有支援NAT-PMP,它會告訴Router相關的設定,這就是為何同樣支援UPnP,但是eMule設了卻沒用的原因。
     
  • 如果要新增的話,按下新增按鈕即可:



eMule和Port Forwarding / Port Triggering / UPnP
eMule雖然有UPnP的設定,可惜的是並不能正常運作,就連Port Triggering都有非常不穩定,所以最安全的方法,還是用最古老的Port Forwarding吧!

沒有留言: