1. 程式人生 > >[VirtualBox] 1、NAT模式下端口映射

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

外網 question ... () 基礎知識 style network www 默認

1、VirtualBox中有4中網絡連接方式

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

其區別見下圖:

技術分享

1.1 NAT

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

NAT模式是最簡單的實現虛擬機上網的方式,你可以這樣理解:

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

Guest可以訪問主機能訪問到的所有網絡,但是對於主機以及主機網絡上的其他機器,Guest又是不可見的,甚至主機也訪問不到Guest。

虛擬機與主機的關系:只能單向訪問,虛擬機可以通過網絡訪問到主機,主機無法通過網絡訪問到虛擬機。

虛擬機與網絡中其他主機的關系:只能單向訪問,虛擬機可以訪問到網絡中其他主機,其他主機不能通過網絡訪問到虛擬機。

虛擬機與虛擬機的關系:相互不能訪問,虛擬機與虛擬機各自完全獨立,相互間無法通過網絡訪問彼此。

1.2 Bridged Adapter(網橋模式)

它是通過主機網卡,架設了一條橋,直接連入到網絡中了。因此,它使得虛擬機能被分配到一個網絡中獨立的IP,所有網絡功能完全和在網絡中的真實機器一樣。

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

虛擬機與主機的關系:可以相互訪問,因為虛擬機在真實網絡段中有獨立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,後面的虛擬機被分配到的也都是這個網段。通過網卡共享、網卡橋接等,可以實現虛擬機於主機相互訪問。

虛擬機與網絡主機的關系:默認不能相互訪問,原因同上,通過設置,可以實現相互訪問。

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

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

由於virtualbox的NAT模式默認情況下僅支持虛擬機訪問主機單向通信,如果想實現主機訪問虛擬機便要做端口映射:

技術分享

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

技術分享

僅用上面兩步就能將虛擬機的3000端口映射到主機的3000端口,主機和虛擬機端口可以不一樣,但是不能使用已被占用的!

此外!!!windows還需要開啟防火墻中的3000端口!

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

技術分享

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

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

技術分享

設置好入站規則之後務必重啟虛擬機!!!

3、寫一個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

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