VirtualBox中有4中网络链接方式:NAT、Bridged Adapter、Internal、Host-only Adapter,VMWare中有三种,其实他跟VMWare 的网络链接方式都是同样概念,只是比VMWare多了Internal方式。html
其区别见下图:node
NAT:Network Address Translation,网络地址转换windows
NAT模式是最简单的实现虚拟机上网的方式,你能够这样理解:浏览器
Guest访问网络的全部数据都是由主机提供的,Guest并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Guest的存在。服务器
Guest能够访问主机能访问到的全部网络,可是对于主机以及主机网络上的其余机器,Guest又是不可见的,甚至主机也访问不到Guest。网络
虚拟机与主机的关系:只能单向访问,虚拟机能够经过网络访问到主机,主机没法经过网络访问到虚拟机。测试
虚拟机与网络中其余主机的关系:只能单向访问,虚拟机能够访问到网络中其余主机,其余主机不能经过网络访问到虚拟机。ui
虚拟机与虚拟机的关系:相互不能访问,虚拟机与虚拟机各自彻底独立,相互间没法经过网络访问彼此。spa
它是经过主机网卡,架设了一条桥,直接连入到网络中了。所以,它使得虚拟机能被分配到一个网络中独立的IP,全部网络功能彻底和在网络中的真实机器同样。3d
网桥模式下的虚拟机,你把它认为是真实计算机就好了。
虚拟机与主机的关系:能够相互访问,由于虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此能够经过各自IP相互访问。
虚拟机于网络中其余主机的关系:能够相互访问,一样由于虚拟机在真实网络段中有独立IP,虚拟机与全部网络其余主机处于同一网络段中,彼此能够经过各自IP相互访问。
虚拟机与虚拟机的关系:能够相互访问,缘由同上。
内网模式,顾名思义就是内部网络模式:
虚拟机与外网彻底断开,只实现虚拟机于虚拟机之间的内部网络模式。
虚拟机与主机的关系:不能相互访问,彼此不属于同一个网络,没法相互访问。
虚拟机与网络中其余主机的关系:不能相互访问,理由同上。
虚拟机与虚拟机的关系:能够相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。
主机模式,这是一种比较复杂的模式,须要有比较扎实的网络基础知识才能玩转。能够说前面几种模式所实现的功能,在这种模式下,经过虚拟机及网卡的设置均可以被实现。
咱们能够理解为Guest在主机中模拟出一张专供虚拟机使用的网卡,全部虚拟机都是链接到该网卡上的,咱们能够经过设置这张网卡来实现上网及其余不少功能,好比(网卡共享、网卡桥接等)。
虚拟机与主机的关系:默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。经过网卡共享、网卡桥接等,能够实现虚拟机于主机相互访问。
虚拟机与网络主机的关系:默认不能相互访问,缘由同上,经过设置,能够实现相互访问。
虚拟机与虚拟机的关系:默承认以相互访问,都是同处于一个网段。
因为virtualbox的NAT模式默认状况下仅支持虚拟机访问主机单向通讯,若是想实现主机访问虚拟机便要作端口映射:
选择网络为NAT模式,选中Cable Connected,点击Port Forwarding,对端口进行映射:
仅用上面两步就能将虚拟机的3000端口映射到主机的3000端口,主机和虚拟机端口能够不同,可是不能使用已被占用的!
此外!!!windows还须要开启防火墙中的3000端口!
打开win防火墙,选择高级设置,点击入站规则,新建:
在新建入站规则向导选项卡中选择端口(控制TCP或者UDP端口链接的规则),选择规则应用于TCP的特定端口3000,...
以下是我建的一个将虚拟机3000映射到远端任意端口的入站规则:
设置好入站规则以后务必重启虚拟机!!!
产看虚拟机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都致使了不成功,但愿后来人不要踩入一样的坑!
参考连接
:: 若是您以为不错,请推荐给更多人,帮助他们更快地解决实际问题中的坑~
@beautifulzzzz 智能硬件、物联网,热爱技术,关注产品 博客:http://blog.beautifulzzzz.com 园友交流群:414948975