源:https://blogs.oracle.com/scoter/networking-in-virtualbox-v2
作者:Simon Coter | 产品管理总监 翻译者:Neil
从Fat Bloke过去写的这个关于Oracle VM VirtualBox的重要部件的博客文章开始,我将更新同为VirtualBox 5.1的一些内容。
VirtualBox中的网络功能非常强大,但是操作起来可能有点艰巨,因此这篇文章可以快速理解在VirtualBox中设置网络的不同方法,其中有几点建议可供于选择哪种配置以及何时使用。
Oracle VM VirtualBox 5.1允许你为每个guest虚拟机(尽管在GUI中仅显示4个虚拟NIC)配置最多8个虚拟NIC(网络接口控制器),并且你可以配置每个客户端的NIC
1. 虚拟化的NIC类型可以暴露给客户机。可用的选项有:
PCnet-PCI II(Am79C970A)
PCnet-Fast III(Am79C973)
英特尔PRO / 1000 MT桌面(82540EM)
英特尔PRO / 1000 T服务器(82543GC)
英特尔PRO / 1000 MT服务器(82545EM)
虚拟化网络适配器(virtio-net)
2. NIC如何处理主机的物理网络。主要模式有:
网络地址转换(NAT)
桥接网络
内部联网
仅主机(host-only)网络
NAT与端口转发
NIC类型的选择取决于客户机是否有那个网卡的驱动程序。VirtualBox说明了基于客户指定创建虚拟机系统类型的NIC,你几乎不需要修改它。
但是,网络模式的选择取决于您想要怎么使用vm(客户端或服务器)以及你是否希望网络上的其他计算机可以看到它。那么让我们来看一下每个模式的更多细节:
网络地址转换(NAT)
NAT对于当前版本的虚拟机是一种默认模式,当Guest是一个vm 的“客户端”类型时,它在很多情况下是非常有用的。(即大多数网络连接都是出站的)。这是它的工作原理:
当客户机操作系统启动时,通常使用DHCP获取IP地址。VirtualBox将会显示DHCP请求,并告知客户机操作系统其分配的IP地址和路由出站连接的网关地址。在这种模式下,每个vm都被分配相同的IP地址(10.0.2.15),因为每个vm都认为它们在自己的隔离网络上。当他们发送自己的流量通过网关(10.0.2.2)VirtualBox重写数据包,这使它们看起来像从主机发出数据来的而不是Guest(在主机内运行)。
这意味着即使主机在网络中移动(例如笔记本电脑在各个位置之间移动),客户端也可以工作,也可以从无线到有线的连接。
然而,另一台计算机如何启动与Guest的连接呢?例如连接到在Guest中运行的Web服务器。由于没有进入客户机操作系统的路由,所以NAT模式不是任何时候都能用的。因此对于运行在vm的服务器,我们需要一个不同的网络模式
NAT网络特性:
NAT方式开启虚拟机操作:
(1) 开启一块网卡,选择网络地址转换(NAT)模式
(2) 启动虚拟机,查看IP
(3) 测试连通性,验证NAT特性
1、 如果主机可以上网,虚拟机可以上网
2、 虚拟机之间不能ping通
这个说法没错,但是如何验证呢?两个虚拟机都是NAT模式,相同的IP地址使用ping命令好像无法验证哦,我ping的时候是通的,但这是本机ping本机肯定是通的,如何验证值得思索?
3、 虚拟机可以ping通主机
这是我的主机IP
测试可以ping通。
4、主机不能ping通虚拟机
桥接网络
当你希望你的vm成为一名完全的网络公民,即与网络上的主机处在相同层级时,使用桥接网络; 在这种模式下,虚拟NIC“桥接”到主机上的物理NIC。
这样做的结果是,每个VM都可以用与主机相同的方式访问物理网络。它可以像主机一样访问网络上的任何服务,如外部DHCP服务,名称查找服务和路由信息。逻辑上讲,网络就像这样,如下所示:
这种模式的缺点是,如果您运行许多vm,你会很快耗尽IP地址,或者你的网络管理员会厌倦了你要求分配静态IP地址的请求。其次,如果您的主机有多个物理网卡(例如无线和有线)当您的主机跳转网络时,您必须重新配置网桥。
那么如果你想在vm中运行服务器,又不想让你的网络管理员参与其中呢?也许下面的两种模式之一是为您而设计,或者可能是更多方式的组合,如一个NAT vNIC + 1仅主机vNIC
桥接网络特点:
桥接方式开启虚拟机操作:
(1) 开启一块网卡,选择桥接模式,选择当前主机上网的网卡。
这里有两块网卡可以选择,对于主机的无线网卡和以太网卡。
(2) 开启虚拟机,查看ip
这里的IP明显跟主机IP在一个网段。不信我们查看下:
我们会发现虚拟机和主机有相同的网关,而且IP地址都是通过相同的DHCP服务器获得的。
(2)验证该模式下的特性:
1、如果主机可以上网,虚拟机可以上网
直接访问百度就会自动跳转到这个登录界面,不过已经可以验证我们想要的。
2、虚拟机之间可以ping通;虚拟机可以ping通主机;主机可以ping通虚拟机
这是必须的,因为桥接模式下,虚拟机和主机,以及跟主机在同一个网段内的其他主机,和该网段内桥接的其他虚拟机都在一个网段内,都是通过同一个DHCP服务器获得的IP,自然可以ping通。
3、 会消耗IP池 的IP地址,因为是通过DHCP获取IP嘛
内部网络
当您配置一个或多个vm位于内部网络上时,VirtualBox可确保该网络上的所有流量都保留在主机中,并且仅在该虚拟网络上的vm可见。配置如下所示:
内部网络(在本例中为“intnet”)是一个完全隔离的网络,因此非常“安静”。当您需要一个单独的,干净的网络时,这种方式对实验是有利的,您可以使用vm来创建复杂的内部网络,为内部网络提供自己的服务。(例如ActiveDirectory,DHCP等)。注意,即使主机不是内部网络的成员,即使主机未连接到网络(例如在飞机上),该模式也允许vm运行。
注意,在此模式下,VirtualBox不提供诸如DHCP之类的“便利”服务,因此您的计算机必须静态配置或使用其中一台vm提供DHCP服务。
可以使用多个内部网络。您可以配置vm以具有多个网卡以跨内部和其他网络模式进行配置,从而根据需要提供路由。
但这一切听起来很复杂。如果您想要主机与VirtualBox一起提供IP地址给客户的内部网络怎么办?请往下看,你可能会考虑到主机网络
内部网络特点:
内部网络的操作:
(1)开启一块网卡,选择内部网络方式。
这个模式下开机虽有网卡但没有IP地址,我们需要手动配置一个静态IP
(2)配置静态IP地址如下:
这里配置了以后,我发现desktop版的Ubuntu需要刷新才会更新IP地址,而服务器版的IP地址设置就直接生效了,如果刷新就没有IP了。我这里是服务器版的Ubuntu,所以直接生效。
这是我另一台虚拟机,手动设置的IP地址,要想让这两台机器可以ping通,当然要设置在同一网段。
(3)测试连通性:
同为内部网络模式的虚拟机之间:
我的主机IP地址为::10.69.86.175
测试结果:虚拟机之间可以ping通,虚拟机跟主机之间皆ping不通。
仅主机(host-only)网络
主机网络就像内部网络,您可以指定客户机所在的网络,在这种情况下为“vboxnet0”
所有vm坐在这个“vboxnet0”网络上都会看到对方,另外主机也可以看到这些vm。但是,外部机器无法看到此网络上的客户机,因此称为“仅主机”模式。
逻辑上,网络如下所示:
这看起来非常类似于内部网络,但是主机现在处于“vboxnet0”,并且可以提供DHCP服务。要配置主机网络的行为方式,请查看VirtualBox Manager...首选项...网络对话框:
主机网络特性:
仅主机(host-only)网络开启虚拟机操作:
(1) 打开--管理--网络--仅主机(host-only)网络,选择新建一块(虚拟)网卡,配置这块网卡的IP地址,开启DHCP服务器,就像这样:
(2)点开虚拟机--设置--网络,开启一块网卡,选择
开启一块网卡,选择host-only方式host-only)网络模式,选择刚才新建的那块网卡。
(2) 点击确认以后,最好重启virtualbox软件,然后在开机。(因为我遇到过,没重启直接打开虚拟机发现网卡没开启)查看IP地址。
这个IP就是通过DHCP服务器获得的,明显在地址池范围内。
(3) 测试其特性
1、 虚拟机不可以上网。此时虚拟机和主机相当于一个独立的局域网内,无法访问外网。
2、虚拟机可以ping通主机;主机可以ping通虚拟机;虚拟机之间也可以ping通,(前提是都是通过刚才方式在本机上开启的虚拟机)
注意:虚拟机与主机通信是通过主机的名为VirtualBox Host-Only Network的网卡,因此ip是该网卡ip 192.168.0.1,而不是你现在正在上网所用的ip。
端口转发与NAT网络
现在你可能会认为我们已经提供了足够的模式来处理每一个可能性,但这里还有一个.
如果您在移动演示上或开发环境上,例如笔记本电脑,并且你有一个或多个需要其他机器连接的vm,你将持续在不同的客户机和主机的网络之间跳转。
在这种情况下:
保存当天进入端口的转发!
例如,如果您的vm在端口80上运行Web服务器,则可以设置如下所示的规则:
其内容如下:“主机端口8080上的任何连接将转发到该vm的端口80”。
这提供了一个移动演示系统,每次将笔记本电脑连接到不同的LAN /网络时,它不需要重新配置。
概要
VirtualBox有一个非常有力的选项,就是允许你设置几乎任何您的心想的配置。
有关更多信息,请查看虚拟网络上的VirtualBox用户手册 。
关于端口转发与NAT网络测试的相关操作:
(1)依然是启用一块网卡,选择NAT模式,添加端口转发规则。
点击端口转发设置端口转发规则:
我这里设置了两个端口转发规则,一个是为了测试SSH,一个是测试WEB服务。
(2)开启虚拟机,打开SSH服务、Nginx服务。
这是NAT模式下的IP地址
这说明开启了ssh服务
这说明开启了Nginx服务
(3)测试端口转发:
我的本机IP为10.69.86.175
因为我之前设置的转发就是2222端口映射到22端口。
成功连上虚拟机。
成功通过8080端口转发,访问到虚拟机80端口的web服务。
p.s:文档补充内容都是我操作中的过程,如错误欢迎指正,如有更好的方法也希望分享。