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

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介:


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都导致了不成功,希望后来人不要踩入同样的坑!


本文转自beautifulzzzz博客园博客,原文链接:http://www.cnblogs.com/zjutlitao/p/7617741.html,如需转载请自行联系原作者

相关实践学习
基于ACK Serverless轻松部署企业级Stable Diffusion
本实验指导您在容器服务Serverless版(以下简称 ACK Serverless )中,通过Knative部署满足企业级弹性需求的Stable Diffusion服务。同时通过对该服务进行压测实验,体验ACK Serverless 弹性能力。
目录
打赏
0
0
0
0
23
分享
相关文章
LVS详解(五)——LVS NAT模式实战
LVS详解(五)——LVS NAT模式实战
178 3
Linux三种网络模式 | 仅主机、桥接、NAT
Linux三种网络模式 | 仅主机、桥接、NAT
1360 0
centos使用iptables实现nat端口转发
centos使用iptables实现nat端口转发
671 4
HTTPS为什么可以穿越NAT端口映射设备
HTTPS能穿越NAT端口映射设备的原因在于,NAT设备仅在IP和端口层面进行地址转换,不对应用层协议(如TLS)的内容进行解析或干预。因此,HTTPS的加密通信可在客户端与服务器间直接建立,NAT设备充当透明中介,确保数据包正确路由,而不涉及加密或认证过程。这样即使没有在NAT设备上配置证书,HTTPS连接也能顺利建立并保持安全。
118 6
|
11月前
|
VMware workstation 中centos7虚拟机在nat模式下怎么配置网卡,指定我想要的IP并且可以联网
https://blog.csdn.net/2302_78534730/article/details/132825156?spm=1001.2014.3001.5502
429 0
在Linux中,LVS-NAT模式的原理是什么?
在Linux中,LVS-NAT模式的原理是什么?
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
【Azure 应用服务】App Service/Azure Function的出站连接过多而引起了SNAT端口耗尽,导致一些新的请求出现超时错误(Timeout)
|
8月前
|
VMware NAT 模式 虚拟机网络电缆被拔出,连不上网
VMware NAT 模式 虚拟机网络电缆被拔出,连不上网
218 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等