[VirtualBox] 一、NAT模式下端口映射

 

一、VirtualBox中有4中網絡鏈接方式

VirtualBox中有4中網絡鏈接方式:NAT、Bridged Adapter、Internal、Host-only Adapter,VMWare中有三種,其實他跟VMWare 的網絡鏈接方式都是同樣概念,只是比VMWare多了Internal方式。html

其區別見下圖:node

 
1.1 NAT

NAT:Network Address Translation,網絡地址轉換windows

NAT模式是最簡單的實現虛擬機上網的方式,你能夠這樣理解:瀏覽器

Guest訪問網絡的全部數據都是由主機提供的,Guest並不真實存在於網絡中,主機與網絡中的任何機器都不能查看和訪問到Guest的存在。服務器

Guest能夠訪問主機能訪問到的全部網絡,可是對於主機以及主機網絡上的其餘機器,Guest又是不可見的,甚至主機也訪問不到Guest。網絡

虛擬機與主機的關係:只能單向訪問,虛擬機能夠經過網絡訪問到主機,主機沒法經過網絡訪問到虛擬機。測試

虛擬機與網絡中其餘主機的關係:只能單向訪問,虛擬機能夠訪問到網絡中其餘主機,其餘主機不能經過網絡訪問到虛擬機。ui

虛擬機與虛擬機的關係:相互不能訪問,虛擬機與虛擬機各自徹底獨立,相互間沒法經過網絡訪問彼此。spa

 

1.2 Bridged Adapter(網橋模式)

它是經過主機網卡,架設了一條橋,直接連入到網絡中了。所以,它使得虛擬機能被分配到一個網絡中獨立的IP,全部網絡功能徹底和在網絡中的真實機器同樣。3d

網橋模式下的虛擬機,你把它認爲是真實計算機就好了。

虛擬機與主機的關係:能夠相互訪問,由於虛擬機在真實網絡段中有獨立IP,主機與虛擬機處於同一網絡段中,彼此能夠經過各自IP相互訪問。

虛擬機於網絡中其餘主機的關係:能夠相互訪問,一樣由於虛擬機在真實網絡段中有獨立IP,虛擬機與全部網絡其餘主機處於同一網絡段中,彼此能夠經過各自IP相互訪問。

虛擬機與虛擬機的關係:能夠相互訪問,緣由同上。

 

1.3 Internal(內網模式)

內網模式,顧名思義就是內部網絡模式:

虛擬機與外網徹底斷開,只實現虛擬機於虛擬機之間的內部網絡模式。

虛擬機與主機的關係:不能相互訪問,彼此不屬於同一個網絡,沒法相互訪問。

虛擬機與網絡中其餘主機的關係:不能相互訪問,理由同上。

虛擬機與虛擬機的關係:能夠相互訪問,前提是在設置網絡時,兩臺虛擬機設置同一網絡名稱。如上配置圖中,名稱爲intnet。

 

1.4 Host-only Adapter(主機模式)

主機模式,這是一種比較複雜的模式,須要有比較紮實的網絡基礎知識才能玩轉。能夠說前面幾種模式所實現的功能,在這種模式下,經過虛擬機及網卡的設置均可以被實現。

咱們能夠理解爲Guest在主機中模擬出一張專供虛擬機使用的網卡,全部虛擬機都是鏈接到該網卡上的,咱們能夠經過設置這張網卡來實現上網及其餘不少功能,好比(網卡共享、網卡橋接等)。

虛擬機與主機的關係:默認不能相互訪問,雙方不屬於同一IP段,host-only網卡默認IP段爲192.168.56.X 子網掩碼爲255.255.255.0,後面的虛擬機被分配到的也都是這個網段。經過網卡共享、網卡橋接等,能夠實現虛擬機於主機相互訪問。

虛擬機與網絡主機的關係:默認不能相互訪問,緣由同上,經過設置,能夠實現相互訪問。

虛擬機與虛擬機的關係:默承認以相互訪問,都是同處於一個網段。

 

二、virtualbox 中的win7端口映射設置

因爲virtualbox的NAT模式默認狀況下僅支持虛擬機訪問主機單向通訊,若是想實現主機訪問虛擬機便要作端口映射:

選擇網絡爲NAT模式,選中Cable Connected,點擊Port Forwarding,對端口進行映射:

僅用上面兩步就能將虛擬機的3000端口映射到主機的3000端口,主機和虛擬機端口能夠不同,可是不能使用已被佔用的!

此外!!!windows還須要開啓防火牆中的3000端口!

打開win防火牆,選擇高級設置,點擊入站規則,新建:

在新建入站規則嚮導選項卡中選擇端口(控制TCP或者UDP端口鏈接的規則),選擇規則應用於TCP的特定端口3000,...

以下是我建的一個將虛擬機3000映射到遠端任意端口的入站規則:

設置好入站規則以後務必重啓虛擬機!!!

 

三、寫一個hello world的nodejs服務器作測試

產看虛擬機IP:10.0.2.15(默認狀況下都是這個)

編寫簡單nodejs服務器:

 1 const http = require('http');
 2 
 3 const hostname = '10.0.2.15'
 4 const port = 3000;
 5 
 6 const server = http.createServer((req, res) => {
 7   res.statusCode = 200;
 8   res.setHeader('Content-Type', 'text/plain');
 9   res.end('Hello World\n');
10 });
11 
12 server.listen(port, hostname, () => {
13   console.log(`Server running at http://${hostname}:${port}/`);
14 });

注意:必定不要用127.0.0.1做爲hostname,不然會不成功的!!!

啓動nodejs服務器:

1 C:\Program Files\nodejs>node a.js
2 Server running at http://10.0.2.15:3000/

在虛擬機內的瀏覽器內輸入: http://10.0.2.15:3000/ 或者在主機的瀏覽器中輸入http://127.0.0.1:3000/都會出現hello world,代表配置端口轉發成功。

我以前沒有開啓win中的端口防火牆、nodejs服務的hostname用127.0.0.1都致使了不成功,但願後來人不要踩入一樣的坑!

 

 

 

參考連接

1.如何配置virtualBox端口轉發

2.win7 怎麼開啓1433端口

3.詳解virtualbox虛擬機上網4種方式

 

 

:: 若是您以爲不錯,請推薦給更多人,幫助他們更快地解決實際問題中的坑~


@beautifulzzzz
智能硬件、物聯網,熱愛技術,關注產品
博客:http://blog.beautifulzzzz.com
園友交流羣:414948975
相關文章
相關標籤/搜索