[VirtualBox] 1、NAT模式下端口映射
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模式下端口映射