:::

VirtualBox用NAT也能架伺服器:連接埠轉送機制

6月 04, 2008 , , 8 Comments Edit Copy Download

摘錄自透過Virtualbox下的Windows的網路印表機問題的說明:

因為客端虛擬機器(Guest OS)是以私有的內部網路透過VirtualBox與主端連接,所以客端所提供的網路服務,不管是主端或是在相同區段的其它電腦,不但看不見,而且是不能使用的。(意思是,在GuestOS的服務,其他人都不能使用)

但是VirtualBox可以透過port forwarding的port轉送機制,讓客端的網路服務也可以被外部所存取。在這情形下,VirtualBox會聆聽主機端(Host OS)的確定ports,當有資料送過來時,把資料打包,再重新轉送到內部的客端系統裡去工作。

對於主端的應用程式或是其它網路上的電腦而言,它看起來就像是主端系統所提供的網路服務一樣。(這也意味著,你不可以在主端及客端提供二個相同的服務,比如網頁伺服器服務)經由此種模式,你可以獲得在客端虛擬機器上提供網路服務的優點,比如當你的主端系統對於網路服務是較弱的,比如容易當機或是容易被入侵等,你就可以運用此種方式在主端系統上提供服務。

雖然如此,但是VirtualBox的連接埠轉送機制得靠指令碼來設定VboxManage,對於不習慣指令碼的Windows使用者來說特別不友善,所以乾脆就寫一個指令產生機,方便大家設定吧。


Virtual Box NAT連接埠轉送機制指令產生器(for Windows)
:(如何查詢網路卡?)

(如指定多個轉接埠時,得用不同名稱,以免被覆蓋)
說明
  • 連接埠轉送機制指令碼的使用方法:請把輸出的網頁存成bat檔案,存到任意地方並開啟執行即可。
  • 執行指令的時候必須先關閉虛擬機器才會生效
  • Windows TCP/IP連接埠範圍:根據微軟的說明,Windows XP和2003可供保留的連接埠範圍是從1025到MaxUserPort(預設為5000)以及49152到65535,因此設定時請使用這範圍的連接埠,以免與其他服務相衝。
  • 設定完成之後,必需要開啟Host OS的防火牆才行。如何手動開啟 Windows XP 網際網路連線防火牆中的連接埠,其他的設定就麻煩網管吧。
  • 網路卡位於[設定值] > [網路] > [介面卡] > [進階] > [介面卡類型]的選單中,請見參考此圖
    如果網路卡為PCnet-開頭,則值應該設定為「pcnet」;如果網路卡為Intel PRO/1000開頭,則應該設定為「e1000」。當你發生「configutation error: Faild to get the "MAC" value」的錯誤時,應該就是網路卡設錯了,請見此討論的說明

參考網頁:透過Virtualbox下的Windows的網路印表機問題 [論壇 - Ubuntu基本設定] - Ubuntu 正體中文站 (翻譯自VirtualBox的說明)

總共8 則留言 ( 我要發問 , 隱藏留言 顯示留言 )

  1. 當連接埠轉遞的設定相衝、或是設定錯誤時,需要取消連接埠轉遞的設定

    VboxManage中使用setextradata取消設定的方法是:

    VBoxManage setextradata

    最後不要輸入值,就能夠取消設定。

    --------
    舉例來說:

    假如你是如此設定虛擬機器:
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort" 80
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/HostPort" 50080
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/Protocol" TCP

    取消設定的方法是:
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort"
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/HostPort"
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/Protocol"

    仔細看,取消的語法中不輸入最後的「80」、「50080」跟「TCP」,這樣就能夠取消設定了。

    回覆刪除
  2. 加入的網路卡的參數設定

    如果你在虛擬機器使用的網路卡為「PCnet-」開頭,那麼參數就應該設為「pcnet」,例如:
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/pcnet/0/LUN#0/Config/http/GuestPort" 80

    如果你的網路卡使用的是「Intel PRO/1000」開頭,那麼參數應該設為「e1000」,例如:
    C:\"Program Files"\"Oracle"\"VirtualBox"\VBoxManage setextradata "vm" "VBoxInternal/Devices/e1000/0/LUN#0/Config/http/GuestPort" 80

    請注意這兩個例子中間的變化!

    回覆刪除
  3. 如果你的虛擬機器使用Ubuntu,在轉移時會讓虛擬機器的網路卡設定失效,因為Ubuntu會認伺服器的網路卡。

    解決辦法:
    到文字模式或終端機底下
    輸入指令
    sudo -i
    先變成有高權限的使用者
    cd /etc/udev/rules.d
    然後輸入指令
    ls
    找看看是否有 70-persistent-net.rules 和 75-persistent-net-generator.rules
    這兩個檔案,並且將他刪除
    指令為
    rm 70-persistent-net.rules
    rm 75-persistent-net-generator.rules
    刪除後重新啟動系統(指令 reboot )
    系統就會去抓取新的網路卡

    詳細設定請看sWeb Lab 「Ubuntu之網路卡更動導致沒抓到網路卡解決辦法」
    http://sweblab.blogspot.com/2009/04/ubuntu.html

    回覆刪除
  4. 事隔多年,VirtualBox已經大幅度改版。其中一個最令我覺得好用的改進,就是NAT的「連接埠轉送」的設定變得更容易使用了。

    http://ithelp.ithome.com.tw/question/10108486
    iT邦幫忙有baiyuan寫的圖文介紹教學
    以後就不需要像這篇這樣子用指令設定,可以直接用GUI視窗來設定就好了。

    回覆刪除
    回覆
    1. 歐那連接不見了哩~想找在virtualbox裡面架設了nginx伺服器 要轉接哪些port才能讓host主機同網域的能順利測試網站呢?

      刪除
    2. https://nsrc.org/workshops/2014/btnog/raw-attachment/wiki/Track2Agenda/ex-virtualbox-portforward-ssh.htm
      看英文的吧
      其實不難設定,自己摸一摸也可以知道

      有問題可以在這裡提問喔

      刪除
    3. 或是看YouTube的錄影
      https://www.youtube.com/watch?v=_CZar_4_vbk

      刪除
    4. https://www.pcsetting.com/devtools/77
      或是看PcSetting Blog的「VirtualBox 設定 Port 轉發功能教學-以 SSH 和 HTTP 為例」
      這個應該就直接貼近你要的目標吧

      刪除