VirtualBox 是一款非常流行的虚拟化软件,在计算机上创建虚拟环境运行不同操作系统和应用程序。网络设置在 VirtualBox 中至关重要,它决定了虚拟机能否连接到互联网或其他计算机,实现数据传输和共享。
在 VirtualBox 中创建虚拟机时,默认会使用网络地址转换(NAT)模式,这也是 Host-only 模式,为虚拟机创建网络连接。例如,所有新建虚拟机默认都使用 NAT 适配器,NAT 适配器能够实现虚拟机与互联网的连接。默认情况下,虚拟机可以通过这种方式访问互联网,但母机却不一定能够访问虚拟机的网络资源。其默认得到的客户端 IP 一般是 10.0.2.15,网关是 10.0.2.2,域名服务器是 10.0.2.3。
VirtualBox 的网络设置对于虚拟机的正常运行和与外部环境的交互起着关键作用。通过合理的网络设置,可以让虚拟机在不同的网络环境中都能实现高效的数据传输和共享,满足用户在各种场景下的需求。无论是进行软件开发、测试,还是进行网络实验等,正确的网络设置都是必不可少的一步。
二、常见网络设置方式
(一)桥接模式
在桥接模式下,虚拟机可以直接通过主机的网卡连接到网络,就好像虚拟机是一台独立的物理计算机一样。这意味着虚拟机可以获得与主机所在网络同一网段的 IP 地址,并且可以与同一网段内的其他设备进行通信。
要使用桥接模式,首先需要在 VirtualBox 的设置中选择网络连接方式为桥接网卡。然后,启动虚拟机后,可能需要手动配置 IP 地址等信息。如果不清楚主机的 IP 地址等信息,可以在主机上按 win+r 键,输入 cmd,进入命令行模式,输入命令 ipconfig 查看信息。虚拟机的 IP 地址需要与主机在同一个网段,并且网关与 DNS 需要与主机网卡一致。例如,如果主机的 IP 地址是 192.168.1.100,子网掩码是 255.255.255.0,网关是 192.168.1.1,那么虚拟机的 IP 地址可以设置为 192.168.1.101,子网掩码和网关设置与主机相同。
在配置过程中,需要注意选择正确的上网网卡。如果主机有多个网卡,需要选择连接到互联网的那个网卡进行桥接。同时,手动配置 IP 地址时要确保 IP 地址不与其他设备冲突,以免造成网络故障。
(二)HostOnly 模式 + 网络共享
在 HostOnly 模式下,只有主机可以访问虚拟机,虚拟机无法直接连接到外部网络。但是,通过网络共享可以实现虚拟机上网。
首先,在主机的网络连接中,找到 “本地连接” 的属性,在 “共享” 选项卡下设置 “Inertnet 连接共享”,选中 VirtualBox Host-Only Network。此时,VirtualBox Host-Only Network 的 IP 地址会被自动设置,例如为 192.168.0.1,子网掩码为 255.255.255.0。
然后,在虚拟机中设置网络 IP 地址为 192.168.0.xx,子网掩码为 255.255.255.0。同时,为虚拟机设置 DNS 地址,该地址为宿主机上网所使用的真实 DNS 服务器地址。如果不设置 DNS 地址,虚拟机很可能无法访问外网。
(三)双网卡模式(HostOnly 模式 + NAT 转换)
双网卡模式结合了 HostOnly 模式和 NAT 转换,可以实现虚拟机既可以与主机通信,又可以访问外部网络。
首先,在 VirtualBox 中设置两个网络模式。一个设置为 HostOnly 模式,另一个设置为 NAT 转换模式。然后,查看虚拟机的网卡地址。可以通过执行 ifconfig 命令查看网卡配置文件。如果只有一个网卡配置文件,则需要新建一个网卡配置文件,可以先复制现有的网卡配置文件,然后进行配置文件内容的更改。
配置网卡文件时,需要分别为 HostOnly 模式和 NAT 转换模式的网卡配置 IP 地址、子网掩码、网关、DNS 和 MAC 地址。在配置 HostOnly 模式的网卡文件时,需要将 UUID 进行注释,否则重启后可能会出现网络不通的情况。
配置完成后,可以进行网络连通性测试。可以通过 ping 命令测试虚拟机与主机、外部网络的连通性。如果能够成功 ping 通,则说明网络设置成功。
三、高级网络设置
(一)多适配器设置
在 VirtualBox 中,可以设置多个网络适配器以满足不同的网络需求。例如,设置两个适配器,一个为 NAT 模式,用于提供互联网连接;另一个为仅主机模式,并分配静态 IP。这样的设置可以让虚拟机既能够访问外部网络,又能够与主机进行通信。
以 Ubuntu 为例,首先将第一个适配器设置为 NAT 模式,这将为虚拟机提供互联网连接。然后,将第二个适配器设置为仅主机模式。启动虚拟机后,为 Ubuntu 中的第二个适配器分配静态 IP,比如 192.168.56.56。同时,主机 Windows 将使用 192.168.56.1 作为内部网络的 IP(VirtualBox Host-Only Network 是 Windows 中网络连接中的名称)。这样就可以从 Windows 访问 192.168.56.56 来访问 Ubuntu 上的服务,如 apache 服务器。此外,由于第一个适配器设置为 NAT,Ubuntu 将具有互联网访问权限。
(二)虚拟网络适配器类型
VirtualBox 可以虚拟化六种虚拟适配器类型,各有特点:
- AMD PCnet-PCI II (Am79C970A):此网络适配器基于 AMD 芯片,可用于多种情况。对于 Windows 来宾,此网络适配器可用于较旧的 Windows 版本(如 Windows 2000),因为较新的 Windows 版本(如 Windows 7、8 和 10)不包含此适配器的内置驱动程序。最初,Am79C970A PCI 器件包含一个单芯片 10 Mbit 控制器,并集成了 DMA 引擎。此网络适配器还支持 AMD 的幻数据包技术,用于远程唤醒。
- AMD PCnet-FAST III (Am79C973):几乎所有可以在 VirtualBox 上运行的来宾操作系统都支持此虚拟化网络适配器。GRUB(引导加载程序)可以使用此适配器进行网络引导。与以前的网络适配器类似,这个是基于 AMD 芯片的。
- 英特尔 PRO/1000 MT 台式机 (82540EM):此适配器可与 Windows Vista 和较新的 Windows 版本完美配合。大多数 Linux 发行版也支持此适配器。
- 英特尔 PRO/1000 T 服务器 (82543GC):Windows XP 无需安装其他驱动程序即可识别此适配器。
- 英特尔 PRO/1000 MT 服务器 (82545EM):此适配器模型可用于从其他平台导入 OVF 模板,并且可以简化导入过程。
- 半虚拟化网络适配器(virtio-net):来宾操作系统必须为虚拟化环境提供特殊的软件接口,而不是大多数操作系统支持的虚拟化网络硬件。这种方法可以让您避免网络硬件模拟的复杂性,从而提高网络性能。VirtualBox 支持行业标准 virtIO 网络驱动程序。VirtIO 网络驱动程序是 KVM 项目的一部分,并且是开源的。这些驱动程序适用于内核为 2.6.25 或更高版本的 Linux,以及包括旧版本(如 Windows 2000、XP 和 Vista)的 Windows。
(三)巨型帧支持
VirtualBox 提供对巨型帧(可以携带大小超过 1500 字节的数据包的以太网帧)的有限支持。如果需要使用巨型帧,请选择一个 Intel 虚拟化网络适配器,并将该适配器配置为在桥接模式下工作。基于 AMD 的虚拟网络适配器不支持巨型帧。如果尝试为基于 AMD 的虚拟网络适配器启用巨型帧,则输入和输出流量的巨型帧将以静默方式丢弃。默认情况下,巨型帧处于禁用状态。
四、不同系统下的网络设置
(一)Windows 系统
在 Windows 系统中使用 VirtualBox 时,设置桥接网卡相对较为简单。首先,打开 VirtualBox 的设置界面,在网络设置中选择连接方式为桥接网络。此时,Windows 系统会自动检测到新的硬件连接。自动添加新硬件后,需要手动配置 IP 地址、网络掩码、网关及 DNS。可以通过以下步骤进行配置:在 Windows 系统中,打开 “控制面板”,找到 “网络和共享中心”,点击进入后选择 “更改适配器设置”。找到与 VirtualBox 桥接网络对应的网络连接,右键点击选择 “属性”。在弹出的窗口中,选择 “Internet 协议版本 4(TCP/IPv4)”,然后点击 “属性” 按钮。在新弹出的窗口中,可以手动输入 IP 地址、子网掩码、网关和 DNS 服务器地址。需要注意的是,这些参数的设置要与主机所在的网络环境相匹配,以确保虚拟机能够正常连接到网络。例如,如果主机所在网络的 IP 地址范围是 192.168.1.1 - 192.168.1.254,子网掩码为 255.255.255.0,网关为 192.168.1.1,DNS 服务器地址可以设置为常用的公共 DNS 服务器地址,如 8.8.8.8 或 114.114.114.114。同时,要确保设置的 IP 地址不与网络中的其他设备冲突,以免造成网络故障。
(二)CentOS Linux 系统
在 CentOS Linux 系统中,VirtualBox 的网络设置主要通过修改网络配置文件来实现。首先,一般情况下不会自动生成 ifcfg-eth1 文件。如果需要添加新的网络接口,可以手动创建。制作 ifcfg-eth0 文件的副本,并将其命名为 ifcfg-eth1。然后在文本编辑器中打开 ifcfg-eth1,更新 DEVICE 条目,更新(或删除)HWADDR 条目,并删除 UUID 条目(如果有)。进行所需的任何其他更改。或者,也可以安装和使用 System-Config-Network 工具:yum install system-config-network-tui,然后使用该工具进行配置。
对于已有的 ifcfg-eth0 文件,也需要进行适当的修改。例如,要设置静态 IP,可以将 BOOTPROTO 固定改成 static,将 ONBOOT 固定改成 yes,设置 DNS1 为常用的 DNS 服务器地址,如 8.8.8.8 或 114.114.114.114。IPADDR 配置成所需的固定 IP,需要参考宿主机的 IP,但不能使用已被占用的 IP 或预留 IP。NETMASK 和 GATEWAY 都要和宿主机保持一致。
修改完成后,保存退出,然后重新启动网络连接。可以使用命令service network restart或/etc/init.d/network restart来重启网络。如果在克隆服务器之后配置网络,可能会遇到接口配置文件与网卡名称不一致的情况。此时,可以修改/etc/udev/rules.d/70-persistent-net.rules文件中的配置,使得服务器的网卡名称与接口配置文件中的名称一致,然后再将 ifcfg-eth0 中的网卡名也跟着改过来,最后重启网络。这样就可以确保 CentOS Linux 系统在 VirtualBox 中的网络设置正确,实现与外部网络的连接和通信。
五、网络设置总结
VirtualBox 提供了多种网络设置方式,每种方式都有其特定的应用场景和优缺点。在选择网络设置方式时,需要根据实际需求进行综合考虑。
如果需要虚拟机像独立的物理计算机一样与外部网络中的其他设备进行通信,并且能够被外部访问,桥接模式是一个不错的选择。但要注意选择正确的上网网卡,并确保手动配置的 IP 地址不与其他设备冲突。
如果只需要主机与虚拟机进行通信,而不考虑虚拟机访问外网,HostOnly 模式可以满足需求。通过网络共享还可以实现虚拟机上网,但需要正确设置 IP 地址和 DNS 地址。
双网卡模式结合了 HostOnly 模式和 NAT 转换,能够实现虚拟机既与主机通信又访问外部网络,为用户提供了更多的灵活性。
对于需要多个网络适配器的情况,可以根据不同的需求设置不同的网络模式,如一个为 NAT 模式提供互联网连接,另一个为仅主机模式实现与主机的通信。
在选择虚拟网络适配器类型时,需要考虑不同操作系统的兼容性和特定的功能需求。例如,对于较旧的 Windows 版本,可以选择 AMD PCnet-PCI II (Am79C970A);对于大多数 Linux 发行版和较新的 Windows 版本,可以选择英特尔 PRO/1000 系列适配器;如果想要提高网络性能,可以考虑使用半虚拟化网络适配器(virtio-net)。
对于需要使用巨型帧的情况,要选择 Intel 虚拟化网络适配器并配置为桥接模式,同时要注意基于 AMD 的虚拟网络适配器不支持巨型帧。
在不同的操作系统下,网络设置的方法也有所不同。在 Windows 系统中,设置桥接网卡相对简单,需要手动配置 IP 地址、网络掩码、网关及 DNS,并确保与主机所在的网络环境相匹配。在 CentOS Linux 系统中,主要通过修改网络配置文件来实现网络设置,可能需要手动创建新的网络接口文件,并确保接口配置文件与网卡名称一致。
总之,根据不同的需求选择合适的 VirtualBox 网络设置方式,可以实现虚拟机与主机及外网的良好连接,满足各种应用场景的需求。无论是进行软件开发、测试,还是进行网络实验等,正确的网络设置都是确保虚拟机正常运行和高效工作的关键。
六、遇到的问题
配置完 NAT 模式和 HostOnly 后,重启网络服务不生效的问题
在配置 VirtualBox 的网络设置时,有时会遇到配置完 NAT 模式和 HostOnly 后,重启网络服务却不生效的情况。这可能是由多种原因引起的。
首先,可能是配置过程中出现了错误。例如,在配置 NAT 模式时,没有正确设置端口映射规则。根据搜索到的资料,在 NAT 设备上不正确地设置端口映射可能导致端口冲突和安全威胁的发生。如果两个或多个应用试图同时映射相同的端口或者映射了受到限制的端口,则可能导致网络拥塞和数据篡改等问题。此外,一些 NAT 设备可能具有内置的安全功能来阻止某些特定端口的通信以防止恶意活动入侵系统。因此,在配置 NAT 模式时,需要精确设置端口映射规则与应用,为需要映射的所有服务和应用程序分配唯一的端口范围。可以使用端口扫描工具检测当前网络环境中开放的端口是否存在冲突隐患,进而优化端口映射规则。
其次,可能是 ACL(访问控制列表)配置不合适或不准确。ACL 是 NAT 设备的一种机制,可用来管理网络流量和提高安全性。如果 ACL 配置不合适或不准确,可能导致拒绝服务攻击、SQL 注入等安全问题以及内部用户在访问受保护资源时的权限不足。因此,在配置网络时,需要遵循正确的 ACL 配置,使用自动化管理工具,确保所有设备按同一标准配置,提升安全性。
另外,还可能是虚拟网络编辑器中的设置出现了问题。例如,在 “虚拟网络编辑器”—》“Vmnet8” 中,可能没有正确设置子网 IP、网关等参数。根据搜索到的资料,虚拟机的 ip、虚拟网络编辑器的 ip、还有真机编辑的 ip 地址,前三段网段必须一样,最后一段不能冲突!默认网关则是三者都要一样!因此,在配置网络时,需要仔细检查虚拟网络编辑器中的设置,确保参数设置正确。
如果以上方法都无法解决问题,可以尝试重新安装 VirtualBox 或者检查操作系统的网络设置是否正确。同时,也可以参考搜索到的资料中的自动安装方法和离线安装方法,确保安装过程正确无误。
我是通过dhclient -v enp0s3 手动触发解决的问题:
总之,在遇到配置完 NAT 模式和 HostOnly 后,重启网络服务不生效的问题时,需要仔细检查配置过程中的各个环节,找出问题所在,并采取相应的解决措施。