VirtualBox 网络连接方式研究(一)
本文由本人(六六Coding的地方)翻译自VirtualBox官方文档,尊重知识产权转载请注明出处。谢谢!
官方:https://www.virtualbox.org/manual/ch06.html
目录:
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及以后章节将另开一篇博客。