virtualbox网络模式
2012-08-16 17:31:22 阿炯

VirtualBox的提供了四种网络接入模式,它们分别是:
1、NAT-网络地址转换模式(NAT,Network Address Translation)
2、Bridged Adapter-桥接模式
3、Internal-内部网络模式
4、Host-only Adapter-主机模式

而在CommandLine下则有八种方式,除上面列出的四种外还有下列四种:
1.UDP Tunnel networking
2.VDE networking
3.Limiting bandwidth for network I/O
4.Improving network performance

VirturalBox为每个虚拟机提供八种虚拟的PCI 网卡,对于每一种虚拟网卡,可以从下列六种网络硬件中任选一种:
AMD PCNet PCI II (Am79C970A)
AMD PCNet FAST III (Am79C973, the default)
Intel PRO/1000 MT Desktop (82540EM)(Windows Vista and later versions)
Intel PRO/1000 T Server (82543GC)(Windows XP)
Intel PRO/1000 MT Server (82545EM)(OVF imports from other platforms)
Paravirtualized network adapter (virtio-net)

AMD PCNet FAST III (Am79C973)是默认推荐的,因为它几乎被所有的操作系统支持,甚至是GNU GRUB boot manager都支持。Intel PRO系列是为了支持那些不再被操作系统提供驱动的系统,如Windows Vista。Intel PRO/1000 MT Desktop 支持Windows Vista及之后的Windows系统,Intel PRO/1000 T Server可以在无需安装驱动的情况下被Windows XP识别,Intel PRO/1000 MT Server支持从其他平台上导入的OVF格式文件。Paravirtualized network adapter(virtio-net)比较特殊,如果你选择了Paravirtualized network adapter(virtio-net),那么则需要自己保证,有对应的,特殊的软件接口,去实现对应的网络处理的。


下面分别对这四种网络模式进行分析解释:

第一种 NAT模式

NAT模式是最简单的实现虚拟机上网的方式,可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存在。


VBox中的NAT借助了VBox内置的NAT引擎和DHCP服务,在VBox管理程序的网络图形界面下,除了将虚拟机放入NAT以及端口转发外,没有任何其它可操作的配置。换句话说,用户只需要将虚拟机放入NAT,VBox会按照默认方式自动设置好一切,用户也没法修改相关网络设置。

比如,VBox会自动将所有放入NAT的虚拟机放入10.0.2.0/24网段,并将它们的网关自动设置为10.0.2.2。此外,宿主机为每个设置为NAT连接方式的虚拟机维护一个私有的虚拟NAT设备,每个虚拟NAT设备都以宿主机的物理网卡作为外部接口:每个虚拟NAT设备将虚拟机流向外部的流量做地址转换,即转换为物理网卡的地址,以便它们能通过物理网卡连接到外部网络。


由于每个虚拟机都使用了自己私有的虚拟NAT设备将自己隔离开了,所以虚拟机之间不能互相通信。

注意,宿主机默认不能访问虚拟机,除非设置端口转发。其实很容易理解宿主机为什么不能访问虚拟机,想象一下,外网主机无法访问通过NAT隔离的内网主机一样。NAT引擎为每个虚拟机都维护一个私有的虚拟NAT设备的另一方面,是所有虚拟机的IP地址都是10.0.2.15,相当于隔离了一个私网,只不过这个私网内只有一个地址且固定,它们并不会地址冲突。


NAT网络

NAT网络连接模式和NAT连接模式类似,都提供网络地址转换和端口转发功能。但是NAT网络以NAT服务的方式存在,多个虚拟机全部连接在虚拟交换机上,虚拟交换机再连接在虚拟NAT上,并且使用一个DHCP服务来分配地址。其模型如下:


在NAT网络服务下,虚拟机之间可以互相通信,也可以和宿主机通信,但是宿主机不能和虚拟机通信,除非使用了端口转发功能。在NAT网络服务下,虚拟机之间可以互相通信,也可以和宿主机通信,但是宿主机不能和虚拟机通信,除非使用了端口转发功能。

Vmware Workstation的NAT和Vbox的NAT网络是类似的,只不过VMware的NAT比VBox的NAT网络多了一个操作:还会在宿主机上创建一个连接到虚拟交换机的虚拟网卡,有了这个虚拟网卡,宿主机和虚拟机之间就可以互相通信。

虚拟机与主机关系:
只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。

虚拟机与网络中其他主机的关系:
只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。

虚拟机与虚拟机之间的关系:
相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。

一台虚拟机的多个网卡可以被设定使用 NAT, 第一个网卡连接了到专用网 10.0.2.0,第二个网卡连接到专用网络 10.0.3.0,等等。默认得到的客户端ip(IP Address)是10.0.2.15,网关(Gateway)是10.0.2.2,域名服务器(DNS)是10.0.2.3,可以手动参考这个进行修改。

应用场景:虚拟机只要求可以上网,无其它特殊要求,满足最一般需求。

NAT方案优缺点:
笔记本已插网线时: 虚拟机可以访问主机,虚拟机可以访问互联网,在做了端口映射后(最后有说明),主机可以访问虚拟机上的服务。
笔记本没插网线时: 主机的“本地连接”有红叉的,虚拟机可以访问主机,虚拟机不可以访问互联网,在做了端口映射后,主机可以访问虚拟机上的服务。

第二种 Bridged Adapter模式

VBox的桥接类型是创建一个看不见的虚拟交换机,虚拟机中设置为桥接模式的网卡和宿主机的物理网卡都连接在这个虚拟交换机上。所以:
桥接网络内的虚拟机和物理网卡在同一个网段,各虚拟机及宿主机之间可以互相通信
虚拟机桥接网络的网关默认和物理网卡的网关相同,所以物理网卡能上网,虚拟机就能上网

网桥模式是常用的一种模式,同时模拟度也是相当完美。可以这样理解,它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。

虚拟机与主机关系:
可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于网络中其他主机关系:
可以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于虚拟机关系:
可以相互访问,原因同上。

IP:一般是DHCP分配的,与主机的“本地连接”的IP 是同一网段的。虚拟机就能与主机互相通信。
笔记本已插网线时:(若网络中有DHCP服务器)主机与虚拟机会通过DHCP分别得到一个IP,这两个IP在同一网段。 主机与虚拟机可以ping通,虚拟机可以上互联网。
笔记本没插网线时:主机与虚拟机不能通信。主机的“本地连接”有红叉,就不能手工指定IP。虚拟机也不能通过DHCP得到IP地址,手工指定IP后,也无法与主机通信,因为主机无IP。
这时主机的VirtualBox Host-Only Network 网卡是有ip的,192.168.56.1。虚拟机就算手工指定了IP 192.168.56.*,也不能ping主机。


注意:如果主机是直接用拨号上网的,不是通过路由,那么此方式不可用。只有主机能上网,虚拟机才能上网。

特点: 虚拟机与主机关系: 可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于网络中其他主机关系:以相互访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP相互访问。

虚拟机于虚拟机关系: 可以相互访问,原因同上。

应用场景: 虚拟机要求可以上网,且虚拟机完全模拟一台实体机。

原理: 通过主机网卡,架设一条桥,直接连入到网络中。它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和 在网络中的真实机器一样。(虚拟机是通过主机所在网络中的DHCP服务得到ip地址的,所以按理来说,两者是完全独立的,但事实却是虚拟机是没 有独立硬件的,它还是要依靠主机的网卡,因此主机要断开网络,虚拟机也就没法拿到ip了)

缺点:
1、会获取跟宿主机一个段的ip地址,比如宿主机ip 192.168.1.101 ,虚拟机会获取192.168.1.103的ip, 但是公司的ip应该都是严格管理的,所以这种方法不好维护,如果主机所在局域网中得其他机器不需要使用虚拟机上的功能,最好使用Host-Only建立独立局域网
2、如果宿主机上通过PPPOE拨号上网的,虚拟机也无法使用桥接


第三种 Internal模式

内部网络是在宿主机上创建一个虚拟交换机,该虚拟交换机不和宿主机上的任何网卡相连,只有放在内部网络的各虚拟机网卡才会连接到此虚拟交换机。所以内部网络中的虚拟机之间可以互相通信,但它们不能和宿主机互相通信。

内网模式,顾名思义就是内部网络模式,虚拟机与外网完全断开,只实现虚拟机于虚拟机之间的内部网络模式。

虚拟机与主机关系:
不能相互访问,彼此不属于同一个网络,无法相互访问。

虚拟机与网络中其他主机关系:
不能相互访问,理由同上。

虚拟机与虚拟机关系:
可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。

IP: VirtualBox的DHCP服务器会为它分配IP ,一般得到的是192.168.56.101,因为是从101起分的,也可手工指定192.168.56.*。
笔记本已插网线时:虚拟机可以与主机的VirtualBox Host-Only Network 网卡通信
这种方案不受主机本地连接(网卡)是否有红叉的影响。

第四种 Host-only Adapter模式

每个Host-Only网络都会在宿主机上创建一个虚拟交换机,同时还会在宿主机创建一个连接到此虚拟交换机的虚拟网卡。Host-Only网络可以创建多个,即多个虚拟交换机+多个连接到各自虚拟交换机的虚拟网卡。所以Host-Only网络内的虚拟机之间以及宿主机之间可以互相通信。但因为虚拟交换机没有连接到物理网卡,所以Host-Only网络内的流量不能超出该网络,比如无法上外网,无法和其它Host-Only或其它类型的网络通信。

由于Host-Only网络会在宿主机上创建对应的虚拟网卡,所以可以通过网络共享(即转发,ip_forward)的方式将物理网卡网络共享给某Host-Only网络内的宿主机虚拟网卡,然后设置该Host-Only网络内虚拟机的网关,便可以让该Host-Only网络内的流量通过物理网卡跨出该虚拟网络。

这是一种比较复杂的模式,需要有比较扎实的网络基础知识才能玩转。可以说前面几种模式所实现的功能,在这种模式下,通过虚拟机及网卡的设置都可以被实现。可以理解为Vbox在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。

虚拟机与主机关系:
默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机于主机相互访问。

虚拟机与网络主机关系
默认不能相互访问,原因同上,通过设置,可以实现相互访问。

虚拟机与虚拟机关系
默认可以相互访问,都是同处于一个网段。

虚拟机访问主机用的是主机的VirtualBox Host-Only Network网卡的IP:192.168.56.1 ,不管主机“本地连接”有无红叉,永远通。
主机访问虚拟机,用是的虚拟机的网卡3的IP:192.168.56.101 ,不管主机“本地连接”有无红叉,永远通。
虚拟机访问互联网,用的是自己的网卡2, 这时主机要能通过“本地连接”有线上网,(无线网卡不行)

通过对以上几种网络模式的了解,可以灵活运用,模拟组建出所想要的任何一种网络环境了。比如想模拟出来一个一台主机,监控一个局域网上网情况的网络环境。首先开启了两台虚拟机vhost1与vhost2,当然如果硬件允许,同样可以再增加vhost3、vhost4…所有的vhost我都设置成internat内网模式,网络名称为intnal,网关为192.168.56.100,意思就是通过192.168.56.100网卡上网。其中有一台vhost1设置为双网卡,一张为内网模式(192.168.56.100),一张为网桥模式(192.168.1.101)。两张网卡设置双网卡共享上网,虚拟机之间为局域网,其中有一台虚拟机vhost1通过与外网相连,所有局域网中的虚拟机又通过vhost1来实现上外网。这样vhost1就可以监控整个虚拟机局域网上网情况了。

Overview of Networking Modes

Mode

VM→Host

VM←Host

VM1↔VM2

VM→Net/LAN

VM←Net/LAN

Host-only

+

+

+

Internal

+

Bridged

+

+

+

+

+

NAT

+

Port forward

+

Port forward

NATservice

+

Port forward

+

+

Port forward




看了上面精简版本的网络设置,再来看一下较为全面的网卡介绍与各种组网方式的使用,不过也只是比上文详细一些,其背后的原理依然没有较深入的讲解。

目录:
1.1 虚拟化网络硬件
1.2 网络模式介绍
1.3 Network Address Translation(NAT)
1.3.1 配置NAT端口转换
1.3.2 NAT模式的局限性
1.4 Network Address Translation Service
1.5 桥接网络(Bridged Networking)
1.6 内部网络(Internal networking)
1.7 仅主机模式(Host-only networking)
1.8 UDP通道网络(UDP Tunnel networking)
1.9 VDE networking
1.10 限制I/O网络的带宽
1.11 提高网络性能

VirtualBox为虚拟机提供8种虚拟PCI Ethernet 网卡,对于每一种网卡,都可以单独选择以下特性:
1)连同硬件一起虚拟化;
2)虚拟化模式的虚拟网卡将会运行在你的主机物理网络硬件上。(the virtualization mode that the virtual card will be operating in with respect to your physical networking hardware on the host.)

VirtualBox用户图形界面中可以配置四种模式的网卡,也可以在命令行通过VBoxManage modifyvm进行配置。VBoxManage modifyvm

1.1 虚拟网络硬件

对于每一种网卡,你都可以选择不同的硬件应用于虚拟机上,VirtualBox可以对以下六种网络硬件进行虚拟化。
AMD PCNet PCI II (Am79C970A);
AMD PCNet FAST III (Am79C973, the default);
Intel PRO/1000 MT Desktop (82540EM);
Intel PRO/1000 T Server (82543GC);
Intel PRO/1000 MT Server (82545EM);
Paravirtualized network adapter (virtio-net).

PCNet FAST III 是默认的,因为几乎所有的原始操作系统都支持这种网络硬件,GNU GRUB 启动管理器也是默认的。例外的是,被选作一些客户机操作系统的Intel PRO/1000系列适配器不再被PCNet网卡所支持,例如Windows Vista。

Intel PRO/1000 MT Desktop运行在Windows Vista及以后版本。没有安装附加驱动的Windows XP 客户机能够识别Intel PRO/1000 T Server网络硬件。而Intel PRO/1000 MT Server则引用自其他平台。

"Paravirtualized network adapter (virtio-net)" 网络硬件是特殊的,如果选择这一项,VirtualBox将不会虚拟一般网络硬件(即被一般客户机原始系统所支持)。然而VirtualBox提供了一个特殊的软件接口以实现客户机的虚拟化环境,从而避免了模仿网络硬件和提高网络性能的复杂性。从v3.1开始,VirtualBox提供了支持行业标准"为Virtio"的网络驱动,这个网络驱动是开源项目KVM的一部分。

"virtio"网络驱动可应用于以下客户机操作系统:
Linux内核版本2.6.25及其以后版本可以配置提供virtio支持,一些分布式也会将virtio移植到旧的内核版本中。
For Windows 2000,XP和Vista的virtio驱动可以在KVM项目的主页下载安装。
http://www.linux-kvm.org/page/WindowsGuestDrivers

假如您使用Intel虚拟化网卡和桥接网络的话,VirtualBox会有限支持所谓的巨型帧,即网络数据包超过1500字节的数据。换言之,AMD网络设备不支持巨型帧,在这样的情况下,巨型数据包将会在传输和接受方向上被丢弃。客户机操作系统试图通过这个特性来观察一个数据包的丢失,这将会导致客户机上的应用程序产生意外的行为。在其默认的配置情况下不会导致客户机操作系统出问题,只是巨型帧需要被明确的使用。

1.2 网络模式简介

八种网络适配器都可以分别配置以下的模式:

Not attached
在这种模式下,VirtualBox会告诉客户机有一个网卡的存在,但没有连接——就好像没有以 太网线缆插入该网卡。这种方式就像把虚拟以太网线缆拔出并破坏连接,这可以有效地告知客户机操作系统没有网络连接可用并强制重新配置。

NetworkAddress Translation(NAT)
如果你只是想要通过虚拟机浏览网页、下载文件和查阅邮件的话,那这个默认的模式应该可以满足你。但在使用Windows文件共享时会有一些限制,下文提及。

NAT Network
这是在VirtualBox4.3时引入的一种新的NAT类型模式。下文1.4将会提及。

Bridged networking
这是一种为了满足更高级的网络需求的模式,比如在客户机上进行网络模拟和运行服务器。启用之后,VirtualBox将会链接到你安装的网卡之一,并直接交换网络数据包,绕过你的物理机网络堆栈。

Internal networking
可用于创建不同的虚拟机之间的访问机制,但是不能够访问物理主机和外部网路中的机器。

Host-only networking
这是一种用于创建物理主机与虚拟机之间的访问机制的模式,不需要物理主机的网络接口。相反,在物理主机上创建了一个虚拟网络接口(类似于回环接口),提供物理主机与虚拟机之间的链接。

Generic networking
很少使用的模式,共享相同的通用网络接口,通过允许用户选择能被VirtualBox包含或者分布在一个扩展包里的驱动。这种模式下有两种可用的子模式:
UDP Tunnel
这可以用于直接相互连接在不同的物理主机上运行的虚拟机,容易而且透明,覆盖现有的网络基础设施。

VDE(虚拟分布式以太网)networking
此选项可用于在Linux或FreeBSD的主机上连接虚拟分布式以太网交换机。目前,这需要从源代码编译的VirtualBox,因为Oracle提供的安装包不包含它。

下面对这些网络模式进行详细的描述。

1.3 Network Address Translation(NAT)

NAT模式是虚拟机访问外网的最简单的方式。通常不需要对物理主机和虚拟机做任何配置。正因如此,NAT在VirtualBox中是默认的联网方式。

一台应用NAT模式的虚拟机就像一台通过路由器连入互联网的真机,在这里,VirtualBox的网络引擎充当路由器,在VirtualBox中,这台路由器放置在每一台虚拟机和物理主机之间。出于实现最大安全分离的考虑,默认情况下虚拟机之间不能够相互访问。

NAT模式的一个劣势是,像经过路由分配之后的私有网路一样,虚拟机不能访问外网,也不能被外网所访问。如此一来你便无法在虚拟机上运行一台服务器,除非你给虚拟机设置端口转发(下文1.3.1提及)。

虚拟机操作系统所发出的网络数据包将会被VirtualBox的NAT引擎以TCP/IP协议所接收,并通过主机操作系统再次发送出去。对于主机上的应用程序或是与主机处于同一网段的其他电脑来说,这就好像是主机上的VirtualBox应用程序通过主机的IP地址把数据包发了出去。VirtualBox将会监听对所发数据包的回复,然后重新打包并发送给私有网络上的虚拟机。

VirtualBox集成了DHCP服务器,虚拟机会接收在该服务器上的网络地址和私有网络配置。因此,分配到虚拟机上的IP地址通常和物理主机的网络完全不同。应用NAT模式是,虚拟机会配置多张网卡,第一张网卡用于与10.0.2.0私有网络连接,第二张网卡用于与10.0.3.0网络连接,诸如此类。如果需要改变虚拟机分配的IP的排序,可以到这里:Section 9.11, "Fine-tuning the VirtualBox NAT engine".

1.3.1 配置NAT端口转换

NAT模式下,虚拟机连接的是内部的私有网络,无法被物理主机访问,所以虚拟机的网络服务无法与物理主机或其他通过网段的外界主机相连。但VirtualBox可以像路由器一样通过端口转换来实现与外网相连。也就是说,VirtualBox会监听物理主机的端口并转发所有发送到虚拟机上的数据包,不论虚拟机的端口号相同与否。

对于网络上的物理主机或其他主机、虚拟机的应用程序,看似是被代理了服务,实际上是运行在物理主机上的。这也意味着你不能在同一个端口号同一台物理主机上运行相同的服务。但你仍然可以在虚拟机上运行该服务——例如,在物理主机或者其他虚拟机上不能得到许可的服务,能够在与物理主机不同的操作系统上运行。

你可以在VirtualBox用户界面的网络设置中进行端口转换的相关配置,也可以用命令行VBoxManage,详见:Section 8.8, "VBoxManage modifyvm".

你需要知道虚拟机用的服务用的是哪些端口,以确定物理主机用哪些端口(通常情况下建议设置为同样的端口号)。你可以用任意在物理主机上没有被占用的端口。

例如,用以下命令设置传入NAT连接到虚拟机上的SSH服务:
VBoxManage modifyvm "虚拟机名称" --natpf1 "guestssh,tcp,2222,22"

以上例子中,所有发送到物理主机2222端口的TCP流量将被转发到虚拟机的22端口上。tcp是定义的用于转发的协议(也可以用udp)。guestssh纯粹是用于描述的,如果省略的话会自动赋值。-natpf后的数字用于指定网卡。要移除转发规则,用以下命令:
VBoxManage modifyvm "虚拟机名称" --natpf1 delete "guestssh"

如果虚拟机需要使用静态分配的IP地址而不使用内置的DHCP服务,那就需要在注册转发规则时指定虚拟机的IP:
VBoxManage modifyvm "虚拟机名称" --natpf1 "guestssh,tcp,2222,10.0.2.19,22"

这个例子中的字段跟上个例子基本相同,差别在于,告知NAT引擎可以访问10.0.2.19的虚拟机。

需要把所有的传入流量从一个特定的主机接口转发到虚拟机,用以下命令指定主机接口IP:
VBoxManage modifyvm "虚拟机名称" --natpf1 "guestssh,tcp,2222,10.0.2.19,22"

通过端口2222将所有到达本地接口(127.0.0.1)的TCP流量转发到虚拟机的22端口

VBoxManage还可以在虚拟机运行时配置传入NAT连接:Section 8.13, "VBoxManage controlvm"

1.3.2 NAT模式的局限性

NAT模式下有四点局限性

ICMP协议局限:一些常用的网络调试工具(例如 ping 或tracerouting)应用的是ICMP协议收发消息,从VirtualBox2.1之后提供了ICMP协议的支持(可以ping),其他调试工具还不能支持。

不能完全支持UDP广播的接收:虚拟机无法完全支持UDP广播的接收,出于节省资源的考虑,它只会监听从特定端口发出UDP数据包之后的一小段时间。因此,基于广播的NetBIOS名称解析并不总是起作用(但WINS始终起作用),一种解决方法是,你可以在\server\share标记中使用所需服务器的数字IP。

不支持类似于GRE的协议:NAT模式下不支持TCP和UDP以外的协议,意味着不能使用一些VPN工具(例如微软的PPTP)。只能使用应用TCP UDP协议的VPN。

不能应用<1024物理主机转发端口:在基于Unix的物理主机上(例如Linux,Solaris,Mac OS X)无法绑定<1024的端口号,应用程序无法被root.运行。如果你配置了这样的端口转发虚拟机将拒绝启动。

这些限制通常不会影响标准网络的使用,但是NAT模式下有可能会影响协议的正常使用。NFS就是其中的例子,服务器通常配置为拒绝非特权端口的连接(<1024)。

1.4 Network Address Translation Service

NAT service的工作原理和家用的路由器相似,系统群组在网络中应用这种模式来防止外部网络的直接访问,但能让系统内部通过TCP和UDP协议实现互访或访问系统外部网络。

NAT service模式附带了一个内部网络,虚拟机利用它可以连接到内部网络,创建NAT网络时即可设置内部网络的名字。创建NAT网络命令:
VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable

其中的"natnet1"是被使用的内网名字,"192.168.15.0/24"是NAT service接口的网络地址和掩码。默认情况下这个静态网关将被分配地址192.168.15.1(跟随接口地址),但这可以被改变。添加DHCP服务到内部网络,我们可以作如下修改:
VBoxManage natnetwork add --netname natnet1 --network "192.168.15.0/24" --enable --dhcp on

或者是在创建之后加入DHCP服务
VBoxManage natnetwork modify --netname natnet1 --dhcp on

关闭该服务
VBoxManage natnetwork modify --netname natnet1 --dhcp off

DHCP服务器提供注册域名服务器列表,,但它不会从128/7网络进行服务器匹配(映射)。

启动NAT Service:
VBoxManage natnetwork start --netname natnet1

如果网络中附带了DCHP服务器,将会一并启动。
VBoxManage natnetwork stop --netname natnet1

关闭NAT service时也会一并关闭。

移除NAT service:
VBoxManage natnetwork remove --netname natnet1

如果DCHP服务器正在内部网络中使用的话,使用这个命令DCHP服务将不会被移除。

设置支持端口转换:(–port-forward-4 for IPv4 ;—port-forward-6 for IPv6)
VBoxManage natnetwork modify --netname natnet1 --port-forward-4 "ssh:tcp:[]:1022:[192.168.15.5]:22"

这条命令制定了端口转换规则,从物理主机的TCP1022端口到IP地址为192.168.15.5的虚拟机22端口。物理主机端口、虚拟机端口、虚拟机IP是必填参数。

删除该规则:
VBoxManage natnetwork modify --netname natnet1 --port-forward-4 delete ssh

可以绑定NAT Service到特定的接口:
VBoxManage setextradata global "NAT/win-nat-test-0/SourceIp4" 192.168.1.185

浏览注册的NAT 网络列表:
VBoxManage list natnetworks


1.5  桥接网络(Bridged Networking)

在桥接网络模式下,VirtualBox在你的物理主机上启用了一个设备驱动,用以过滤从物理网络适配器中过来的数据。因此这个驱动被称为"网络过滤"设备。它允许VirtualBox拦截物理网络数据和注入数据有效地在软件中创建一个新的网络接口。当虚拟机在应用这个新的软件接口时,看起来就好像是虚拟机物理地连接到了网线上:物理主机可以通过这个接口与虚拟机进行数据的收发。这意味着你可以在虚拟机和网络之间设置路由和"桥梁"。

注意:桥接无线接口和桥接有线接口是完全不同的,因为大多数无线适配器不支持混合模式。所有通信必须使用主机的无线适配器的MAC地址,因此VirtualBox需要将传出包的以太网报头取代​​源MAC地址,以确保回复将发送到主机接口。当VirtualBox收到一个带有目标IP的传入包时,比对IP从属于虚拟机适配器,VirtualBox将会把以太网报头的目标MAC地址替换到虚拟机适配器的MAC地址中,并接收数据包。为了获取虚拟机的IP地址,VirtualBox会检查ARP和DHCP数据包。

桥接网络的局限性取决于你的物理主机操作系统:

Macintosh 主机。使用AirPort(Mac的无线网络)时功能受限。目前的VirtualBox只支持IPv4和IPv6的AirPort。如果要使用其他协议(比如IPX),你必须选择有线接口。

Linux主机。应用无线接口是功能受限,目前的VirtualBox只支持IPv4和IPv6的无线。如果要使用其他协议(比如IPX),你必须选择有线接口。此外,Marvell Yukon II EC Ultra Ethernet NIC上的sky2提供的有线接口中把MTU设置为小于1500字节,将会导致丢包现象。Linux 内核2.6.27版本不允许通过VLAN适配器实现虚拟机与外部网络之间的中继,Linux以外的操作系统亦然。

Solaris主机。不支持使用无线接口。因为Solaris子系统的技术限制,不能完全支持用IPFilter进行虚拟机通信过滤。这些问题将在未来的Solaris 11版本中得到解决。

从VirtualBox4.1开始,在Solaris11的物理主机上(build159及以上版本),无需任何配置就可以通过Solaris的Crossbow Virtual Network Interfaces (VNICs) 直接与VirtualBox相连,但VNIC需单独地与虚拟机网络接口对应。

从VirtualBox2.0.4开始到VirtualBox 4.0,VNIC可被使用,但具有以下注意事项:
1)将VNIC无法在多个虚拟机网络接口间共享,即每个虚拟机网络接口都必须有自己独有的VNIC;
2)使用VNIC虚拟网卡和虚拟机VNIC网络接口必须有相同的MAC地址。

使用VLAN接口与VirtualBox时,他们必须根据PPA-hack命名方案(如"e1000g513001")来命名,否则虚拟机可能会以错误的格式接收数据包。

将虚拟机devbx的第一块网卡桥接到宿主机的第一块网卡(em0)上:
VBoxManage modifyvm devbx --nic1 bridged --bridgeadapter1 em0


1.6 内部网络(Internal networking)

内部网络模式类似于桥接网络模式那样可以直接与"外部网络"通信。这里的"外部网络"是指连接在内网中的同一台物理主机上的其他虚拟机。从技术层面上说,内部网络实现网络连接需求,桥接网络模式也可以实现。但是应用内部网络模式能够提高安全性。在桥接网络模式中,所有的数据通信都需要通过主机系统的物理接口。因此可以添加一个数据嗅探器(类似Wireshark)到主机接口和所有通过的数据的日志中。如果你想实现一台机器上的多台虚拟机之间的私下通信,并向物理主机和用户隐藏虚拟机的数据的话,桥接网络就不适合了。

在有需要的情况下,内部网络模式将会自动创建而不需要其他配置。每一个内部网路简单地一名称来区分。一旦多于一个有相同内网ID的网卡活动,VirtualBox的支持驱动会自动连接这些网卡并从当网络交换机的角色。VirtualBox支持驱动实现了一个完整的以太网交换机,并支持支持广播/多播帧和混杂模式。

为了把多台虚拟机的网卡连接成内网,将网络设置成内网模式,有以下两种方式:
1)通过图形界面进行设置,在网络设置对话框里选择一个存在的内网并输入新的名字。

2)命令行:
VBoxManage modifyvm "VM name" --nic intnet

可以指定网络名字:
VBoxManage modifyvm "虚拟机名称" --intnet "network name"

如果不指定网络名字,默认情况下网卡将会连接到intnet网络。

出于安全考虑,在默认情况下,Linux实现内部联网只允许在相同的用户ID运行的虚拟机建立一个内部网络。但是可以建立一个共享的内部网络接口,通过用不同的UUID用户访问。

1.7 仅主机模式(Host-only networking)

仅主机模式是2.2版本之后加入的新的连网模式。可以将它视为桥接模式和内网模式的混合体:像桥接网络模式那样够通过物理以太网交换机与物理主机、其他主机相连。类似地,像内网模式一样,不需要存在物理网络接口,又因为它们没有连接到物理网络接口,所以虚拟机不能够与物理主机之外的外网连接。

在应用仅主机网络模式时,VirtualBox会在物理主机上创建一个新的软件接口。换言之,桥接模式下一个现存的物理接口会被用于连接虚拟机,而仅主机网络模式下在主机上会创建一个新的"回环"接口,在内部网络模式下,虚拟机之间的通信数据是不可见的,但主机"回环"接口上的数据能够被截获。

在多台虚拟机装配到一起进行合作的情景下,对于预先配置的虚拟设备来说,仅主机网络模式十分的有用。例如,一台虚拟机可以包含一个web服务器和一个第二数据库,并且,由于他们主要用于相互访问,设备可以指示VirtualBox可以为这两台虚拟机创建一个仅主机网络模式,然后第二个虚拟机(桥接)网络将在Web服务器连接到外界提供数据,但外界无法连接到数据库。

将虚拟机的网络接口更改成仅主机网络模式:
* VirtualBox图形用户界面进行网络设置修改
* 命令行输入:
VBoxManage modifyvm "VM name" --nic hostonly
详见:Section 8.8, "VBoxManage modifyvm"

在能够添加仅主机网络模式到虚拟机之前,需要创建至少一个仅主机接口,用户界面:"File" → "Preferences" → "Network" → "Host-only network" → "(+)Add host-only network"。
命令行:
VBoxManage hostonlyif create
详见:Section 8.34, "VBoxManage hostonlyif"

仅主机网络模式像内部网络模式一样,你会发现VirtualBox内置的DCHP服务器非常的有用。它可以在仅主机网络模式下管理IP地址,否则你需要配置所有的静态IP。

在用户图形界面可以在网络设置中的仅主机选项中设置DCHP服务;或者你也可以用命令行操作,详见:Section 8.35, "VBoxManage dhcpserver"

Note:在Linux和Mac OS X主机上,仅主机网络接口限制在128个。在Windows和Solaris主机上没有这样的限制。

1.8 UDP通道网络(UDP Tunnel networking)

这种组网方式允许在不同主机运行的虚拟机之间实现互联。

从技术实现上讲,这是把虚拟机网卡收发的以太网帧封装成UDP/IP的数据包,再通过可用网络将它发送给主机。

UDP 通道网络模式有以下三个字段属性:

Source UDP port:主机监听的端口。主机从该端口收到源地址来的数据包后,将会转发给接收端的虚拟机网卡
Destination address:传送数据的目标主机的IP地址
Destination UDP port:传输数据所用的端口号

当不同主机上的两台虚拟机互联时,必须交换他们的IP地址。在单一主机上,源UDP端口必须与目标UDP端口交换。

下例:主机1用10.0.0.1端口,主机2用10.0.0.2端口,配置UDP通道网络模式命令如下:
VBoxManage modifyvm "VM 01 on host 1" --nic generic
VBoxManage modifyvm "VM 01 on host 1" --nicgenericdrv UDPTunnel
VBoxManage modifyvm "VM 01 on host 1" --nicproperty dest=10.0.0.2
VBoxManage modifyvm "VM 01 on host 1" --nicproperty sport=10001
VBoxManage modifyvm "VM 01 on host 1" --nicproperty dport=10002

and

VBoxManage modifyvm "VM 02 on host 2" --nic generic
VBoxManage modifyvm "VM 02 on host 2" --nicgenericdrv UDPTunnel
VBoxManage modifyvm "VM 02 on host 2" --nicproperty dest=10.0.0.1
VBoxManage modifyvm "VM 02 on host 2" --nicproperty sport=10002
VBoxManage modifyvm "VM 02 on host 2" --nicproperty dport=10001

当然也可以设置成一台主机上的虚拟机互联,只要把目标地址(Destination port)都设置成127.0.0.1就好了。设置成一台主机时,这就类似于"内部网络"了,区别在于对于主机来说,虚拟机之间的数据通信是可见的,而一般的内部网络模式是不可见的。

NOTE:基于Unix的主机(例如Linux,Solaris,Mac OS X),不能绑定端口号<1024的应用程序,因为它无法被root所运行。如果配置了这样的源UDP端口,虚拟机将不会启动。

1.9 VDE networking

分布式虚拟以太网(VDE)是灵活的,虚拟网络的基础设施系统以一种安全的方式跨越多台主机。它允许L2 / L3交换,包括生成树协议,VLANs和WAN仿真。这是VirtualBox的可选部分,只包含在源代码中。

VirtualBox VDE只有一个参数
VDE network:虚拟机将要连接的VDE交换机名称。

以下简单的例子演示如何把虚拟机连接到VDE交换机:
1、创建一个VDE交换机
vde_switch -s /tmp/switch1

2、用命令行做一下配置:
VBoxManage modifyvm "VM name" --nic generic
VBoxManage modifyvm "VM name" --nicgenericdrv VDE

连接到自动分配的交换机端口:
VBoxManage modifyvm "VM name" --nicproperty network=/tmp/switch1

连接到指定的switch端口:
VBoxManage modifyvm "VM name" --nicproperty network=/tmp/switch1[]

3、VDE交换机端口和VLAN之间的映射(可选):(从交换机CLI)
vde$ vlan/create
vde$ port/setvlan

VDE只能在Linux和FreeBSD主机上应用。只能在从VirtualSquare项目上安装了VDE软件和VDE插件类库的主机系统上运行。了解更多关于VDE网络模式,官方文档传送门:http://wiki.virtualsquare.org/wiki/index.php/VDE_Basic_Networking

1.10  限制I/O网络的带宽

从4.2开始,VirtualBox允许对网络传输的最大带宽进行限制。一台虚拟机的多个网络适配器可以共享带宽群组限制,这样的限制可能会超过一个以上。

NOTE:VirtualBox只会对发送端的虚拟机数据进行延迟发送,不会对虚拟机接受的数据进行限制。

通过VBoxManage可以进行限制器的配置,以下示例创建了一个名为"Limit"的带宽群组,设置限制为20 Mbit/s 并将群组分配到虚拟机的第一第二个网络适配器中:
VBoxManage bandwidthctl "VM name" add Limit --type network --limit 20m
VBoxManage modifyvm "VM name" --nicbandwidthgroup1 Limit
VBoxManage modifyvm "VM name" --nicbandwidthgroup2 Limit

所有的群组中的适配器都会共享带宽限制,意味着以上例子中的两个适配器的带宽都不会超过 20 Mbit/s 。但是,如果其中一个适配器不需要带宽,那另一个将会占用它所在群组的剩余带宽。

在虚拟机运行时,都可以动态改变带宽群组的限制,即时生效。下例是将上例创建的带宽群组限制更改为 100 Kbit/s :
VBoxManage bandwidthctl "VM name" set Limit --limit 100k

要完全禁用虚拟机的第一个适配器,用以下命令:
VBoxManage modifyvm "VM name" --nicbandwidthgroup1 none

也可以在虚拟机运行时禁用所有分配到带宽群组中的适配器,通过将群组限制设为0,下例对名为"Limit"的带宽群组进行适配器禁用:
VBoxManage bandwidthctl "VM name" set Limit --limit 0

1.11 提高网络性能

VirtualBox中提供多种可以"附着"在主机网络上的虚拟网络适配器,可以通过多种方法进行配置。对于不同类型的适配器和所用的不同"附件",网络性能也会不同。性能方面,Virtio网络适配器要优于Intel PRO/1000仿真适配器,也优于PCNet系列适配器。Virtio和 Intel PRO/1000 适配器都得益于分段(segmentation)和卸载(offloading)校验。分段卸载是高性能的基础,因为它允许较少的内容交换,显著增加了虚拟机与主机之间传输的数据包大小限制。

NOTE:Virtio和Intel PRO/1000 for Windows XP驱动都不支持分段卸载,因此Windows XP系统上的虚拟永远无法达到与其他类型的虚拟同样的传输速率。请参考Microsoft知识库中其他信息,相应文章842264。

三种网络模式:内部网络、桥接网路和仅主机网络几乎具备相同的网络性能。因为内网模式下的数据包不经过主机网络堆栈,所以运行要更快更节省CPU的占用。NAT模式下,因为NAT提供网络地址解析,所以是最慢(也最安全)的模式。通用驱动附件是特殊的,不能替代其他类型的附件。

分配到虚拟机上的CPU数不能提高虚拟机的网络性能,在某些情况下还会有害于虚拟机,因为这增加了虚拟机的并发。

对于提高虚拟机的网络性能,有以下几点需要注意:
1、尽可能使用Virtio网络适配器,至少使用Intel/1000 适配器;
2、尽量使用桥接网络模式而不是NAT模式;
3、确定分段卸载在虚拟机操作系统上是否可用。一般默认情况下是可用的,你可以在Linux虚拟机上用ethtool命令行检查确认offloading设置;
4、要像第三方工具Wireshark那样在虚拟机网络适配器上对网络流量进行全面而细致的分析,需要在虚拟机的网络适配器上使用一个混合模式的规则(policy),并且只能在NAT网络、桥接网络适配器、内部网络和仅主机模式的适配器下使用。

设置混合模式规则( promiscuous mode policy)可以在用户界面的网络设置中配置,也可以用命令行工具VBoxManage配置,详见:Section 8.8, "VBoxManage modifyvm"

混杂模式规则是:
a)deny(默认设置),它可以隐藏不适合该虚拟机的网络适配器的流量。
b)allow-vms,它可以隐藏在这个虚拟机的网络适配器中的所有主机的流量,但允许它对来自其它虚拟机或发送到其他虚拟机的流量可见。
c)allow-all 删除所有限制——虚拟机的网络适配器能看到的所有通信流量。

创建host-only网络接口

VBoxManage hostonlyif create
会创建一个命为'vboxnet0'这样一个网口,前提为目前没有创建过,如果已经有一块这样的网口的话,将会以'vboxnet1'这样的方式来命名。它自动使用'192.168.56.1'这样的dhcp方式分配的ip地址,注意:创建了这样一个网口,但在宿主机上通过'ifconfig'不能看到,因为虚拟机没有使用到它,只有当它被使用时,才会在宿主机上看到。

可以更改,之后就可以通过ifconfig看到了,而且宿主机有用到此网卡的地方也不会再报错:
VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.18.3 --netmask 255.255.255.224