2013-07-20

Ubuntu Guest 設定 Host Only + NAT 網卡連通內外網路

阿舍之前有介紹過,如果是在 Ubuntu / Linux 的 Host 上的話,只要把虛擬機器的網卡設定成「Brigade Adapter」來搭配 DHCP Server 或手動指定固定 IP 的話,就可以讓虛擬機器和 Host 處在相同的網段,然後,就可以直接存取彼此,不需要透過 Port Forwarding 的方式來處理,所以,使用起來會比較方便哩 ! 不過,阿舍有時候還是會遇到無法讓虛擬機器可以取到與 Host 相同網段的 IP 位址的環境,因此,這種時候,阿舍就會利用 NAT 網卡搭配 Host Only 網卡來解決連通的問題哩 !

啟用 Host Only 網卡
VirtualBox 的虛擬機器預設會採用 NAT 網卡來讓虛擬機器可以連線到 Host 以外的網路,所以,只要 Host 可以上網,那麼虛擬機器就可以透過 NAT 網卡來上網,但是,如果讓 Host 可以使用虛擬機器所提供的,像是 SSH 或 HTTP 等的服務的話,那麼就得透過 Port Forwarding 的方式才行,不過,Port Forwarding 會用掉 Host 的 Port,因此,當 Host 和虛擬機器都需要用到同一個 Port 時,就會變得麻煩哩 !

而 Host Only 網卡是透過將虛擬機器的網卡和 Host 的綁在(Bind) 由 VirtualBox 所建立的同一張虛擬網卡上的方式來達到虛擬主機可以和 Host 使用相用網段的效果,所以,透過啟用虛擬機器的 Host Only 網卡,就可以讓虛擬主機和 Host 直接存取彼此的服務而不用設定 IP  Forwarding 哩 ! 不過,Host Only 網卡因為是使用了獨立的網段,因此,也就無法直接連到外部的網路來上網哩 !

所以,只要在虛擬機器上同時啟用 NAT 和 Host Only 網卡的功能,那麼,就可以不需要啟用 Brigade Adapter 網卡解決要讓 Host 可以直接連通虛擬機器,然後,又要可以連外上網的問題哩 ! 虛擬機器要同時啟用這二種網卡的方式不難,只要啟用和在 Ubuntu Guest 上設定一下網卡就可以搞定囉  !

首先,請先把虛擬機器關機,之後,請在 VirtualBox 上開啟該虛擬機器的「設定值」> 「網路」畫面,然後,在「介面卡 1」的畫面上選擇「NAT」(如下圖),接著,請在點選畫面上方的「介面卡 2」頁籤後,選擇「僅限主機介面卡」(如上圖),設定完成後,請點選右下方的「確定」按鈕離開。(要提醒的是,第一張介面卡請設定為 NAT 會比較好管理哩 ! )

啟用 NAT 網卡
接下來,就可以啟動虛擬機器了,啟動後,用 ifconfig 指令來看,就會發現,虛擬機器裡,還是只有有一張網路卡而已,這是因為第二張網卡在 Ubuntu Guest 裡是還沒有設定和啟用的哩 ! 所以,請用開啟 /etc/network/interface 檔案,然後,加入下面這幾行來設定另一張網卡。(有關 Ubuntu 設定動態與靜態 IP 位址的說明,請分別參考阿舍寫的這一篇這一篇囉 ! )

auto eth1
iface eth1 inet static
address 192.168.56.88
netmask 255.255.255.0
network 192.168.56.0

要注意的是,VirtualBox 的 Host Only 網卡的預設網段是 192.168.56.0,所以,請指定一個在這個網段的 IP 位址,否則,就得要去調整你的 Host 上的 Host Only 虛擬網卡的設定才能使用其他的 IP 位址哩 ! 上面的項目設好並存檔後,就可以用下面這一行指令來啟用新設定好的網卡,如果沒有出現錯誤訊息的話,那麼,就可以直接用 SSH 來連入虛擬機器看看囉 ! ^^=

sudo ifup eth1

更新:
1. Host Only 網卡的預設網段,請在 Host 用 ifconfig 或 ip address 指令查詢 vboxnet0 網卡 ( 也就是 Host Only 網卡的名稱 ) 的網址資訊為準。

2. 新版的 Ubuntu 不再使用 eth0 和 eth1 的方式當網卡名稱,而是 enp0s3 和 enp0s8 之類的方式,所以,建議用 ip link 指令來查詢另一張卡的名稱。




推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

3 則留言 :

chusiang 提到...

這資訊對在下很有幫助,感謝分享 :D

匿名 提到...

嗨 我想請問你
我在Vbox中再開了一台VM(兩層VM的意思)
我把外層的VM網卡直接assign給內層的VM
內層的VM藉由這張網卡ping到外層VM原本的gateway
但不能在往外ping了(ex.ping 8.8.8.8)
然而我試著又把該網卡還給了外層,又可以外ping
請問這是怎麼回事?

Arthur 提到...

Hello,

阿舍沒試過在 VM 裡再開 VM 的作法,不過,阿舍覺得有可能是需要手動調整 Routing Table,讓外層的 VM 知道怎麼把封包送回到第二層的 VM,可能 Host 端也要調,要花點時間試哩 ...

如果只是要測試軟體功能的話,阿舍建議可以用 lxc 、LXD 或 Docker 等 Container 的方式會來的單純一些哩 ...

供參囉 ! ... ^^=

張貼留言

歡迎留言提問和討論 .... 😁