VirtualBox 虚拟机的网络设置

VirtualBox 创建虚拟机的时候,默认会使用网络地址转换(NAT)网卡模式为虚拟机创建网络连接。这可以让虚拟机通过母机的网络连接来访问互联网,但是母机却不能够访问虚拟机的网络资源。这时,可以给虚拟机添加一块“桥接网卡”来使主机及其它家庭网络上的设备直接访问虚拟机。当然,如果还有另一个虚拟机也这么设置了网络连接,虚拟机之间也可以顺利访问。

目前,VirtualBox 给虚拟机提供了这么几个网络配置选项:

  1. NAT:网络地址转换(Network Address Translation),这是最简单的虚拟机上网方式。虚拟机所有的网络访问都通过主机来实现,虚拟机本身不能被主机及其它互联网上的机器访问。
  2. NAT Network:这是 2013 年增加的连接模式,在 NAT 的基础上增加了主机对虚拟机的访问支持(实际上 NAT 模式在配置端口映射之后就是这个模式)。NAT Network 模式使用前需要在 VirtualBox 的设置(首选项,Preferences 里面配置可使用的 NAT Networks)。
  3. Bridged Adapter:桥接网卡模式。虚拟机直接使用主机的物理网卡来连接网络。此时,虚拟机在网络中就像是跟主机同时存在的另一台计算机一样。缺点就是,如果主机需要使用帐号密码来访问互联网,虚拟机也同样需要。这种模式好在,虚拟机像是跟主机在同一个网段中的实际设备。所以这种方式比较适合家庭局域网,且配置路由器直接完成认证而不需要计算机再用帐号密码登录(比如国内经常弄个拨号软件的情况虽然也可以但是不方便——话说还有人不使用路由器直接拨号的吗?)。详见下面的进一步说明。
  4. Internal Network:内部网络模式。虚拟机与主机所在的网络隔离开来,只有虚拟机之间可以通信,而无法跟主机,或者主机所在的网络通信,所以也就无法上互联网。
  5. Host-Only Adapter:主机中的网络适配器模式。这个比较复杂。VBox 在主机中虚拟出一块网卡。所有虚拟机都连接到这块网卡。但是主机与虚拟机、虚拟机与虚拟机、虚拟机与主机或外网之间的通信都由用户对该块网卡的配置来实现。配置灵活多变,能够实现的功能可以涵盖前面说的所有模式,但是也最难配置。
  6. Generic driver

更详细的说明可以参考 Douban 上的这篇文章。

所以最常用的应该就是 NAT、NAT Network 和 Bridged Adapter 三种方式了。而这里要介绍的是 NAT + Bridged Adapter 的方式。

0. 使用情景

但是因为各家的上网情况可能有所不同,这里预设一种情景:使用路由器在家里的各台设备之间共享网络连接。目前,这应该是一种很常见的方式吧?!这里假设无线路由器的 IP(网关的 IP)是 192.168.0.1,那么家里各台电脑就是 192.168.0.2、192.168.0.3 等等。(当然别的局域网 IP 也可以,比如 192.168.56.*。)

假设当前使用的电脑(母机)的 IP 是 192.168.0.2,而 192.168.0.10 这个 IP 目前还没有设备使用,我们将它分配给虚拟机使用。实际上,使用 DHCP 自动分配 IP 地址的话,虚拟机的桥接网卡也能自动从路由器获取 192.168.0.* 的 IP。

为什么要给固定下来呢?因为我们的目的是用虚拟机来模拟一个 VPS 服务器,让它的 IP 地址固定就可以使用 HOSTS 文件来欺骗电脑使之可以通过域名访问虚拟机上的网站。

要通过域名访问虚拟机,需要修改母机的 HOSTS 文件(即文件 %systemdrive%/windows/system32/drivers/etc/hosts,Linux 的话一般是 /etc/hosts),在后面添加下面的内容:

192.168.0.10 domain.com
192.168.0.10 www.domain.com

保存。以后就可以直接通过域名 domain.com 和 www.domain.com 访问虚拟机了:

ping domain.com

如果家庭网络上的其它计算机也要通过域名访问这个虚拟机,也需要类似修改其 HOSTS 文件。

1. 添加“桥接网卡”

:实际上,至少在 VBOX 5.0.18 及 CentOS 7 情况下,可以只在 VM CentOS 7 上只使用一个网卡并选为桥接类型,就可以直接从家里的路由器上获取 IP 来上网(当然也可以设置为静态的某个内网 IP)。所以这样的话,可以将默认那个网卡改成桥接模式即可。

给虚拟机安装操作系统可以参考:给 VirtualBox 虚拟机安装最小化 CentOS 操作系统。如果想安装 Windows,可以参考前文加载 Windows 安装光盘映像来启动安装,剩下的应该不困难了吧。

在 VirtualBox 中创建了虚拟机并安装操作系统之后,就可以给它添加另一块网卡(当然是虚拟网卡)了。

创建了 CentOS 虚拟主机的 VirtualBox 主界面

创建了 CentOS 虚拟主机的 VirtualBox 主界面

方法

关闭虚拟机,在 VirtualBox 主界面(如上图所示),选中要添加第二块网卡的虚拟机,这里举例用的是 CentOS 这个虚拟机,然后单击上面的“设置”按钮打开虚拟机设置界面,并从左侧栏切换到“网络”条目。如下图所示。

VirtualBox 虚拟机的网络设置界面

VirtualBox 虚拟机的网络设置界面

其中“网卡 1”已经默认设置为“网络地址转换(NAT)”模式,可以让虚拟机通过母机的网络来访问互联网。

点击“网卡 2”,勾选“启用网络连接”,将“连接方式”更改为“桥接网卡”,其它不需要修改,但是需要点开“高级”然后记下 “MAC 地址”后面的字符(我这里是 080027f26be7)。上面的“界面名称”实际是虚拟机内部的网卡需要桥接到的母机网卡的名称。

然后单击窗口下面的“确定”保存设置。添加网卡完成!

2. 虚拟机系统中桥接网卡的设置

下面按照虚拟机里的操作系统分两种情况,Windows 和 CentOS Linux,分别说明“桥接网卡”的设置。

A. 虚拟机使用 Windows 操作系统

虚拟机里安装了 Windows 操作系统的话,也许不需要这块”桥接网卡“就可以与母机双向通信。但是,如果想要家庭网络上的其它计算机也可以自由访问虚拟机的话,还是需要桥接网卡的。

Windows 中设置桥接网卡非常方便,因为 Windows 开机启动之后会自动添加新硬件。等它添加了新的网卡之后,我们只需要在”网络连接“里面将新网卡的 IP 设置为 192.168.0.10(举例),同时配置”网络掩码“为 255.255.255.0,网关为 192.168.0.1,再配置自己喜欢的 DNS(比如 Google 的公共 DNS)或者直接用路由器作为 DNS(192.168.0.1)即可。

B. 虚拟机使用 CentOS 操作系统

Linux 的发行版太多了,而且各自的配置文件还不一定相同,所以这里只举例说明 CentOS 中的设置情况。下面的命令行指令直接输入到虚拟机启动后其操作系统界面里的 # 号后面并回车即可,因为这里的目的主要是模拟 VPS,并没有使用图形界面。

  1. 修改网络配置文件 ifcfg-eth0,
    vi /etc/sysconfig/network-scripts/ifcfg-eth0

    如果桥接的时候选的是母机的无线网卡,则此文件名可能不同,比如也可能是,

    vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

    之类的。如果无法确定,可以通过下面的指令查看都有哪些配置文件,

    ls /etc/sysconfig/network-scripts/

    然后慢慢查看、确定。

  2. 这会打开一个文本编辑区域。按 i 键开始编辑,用上下左右键将光标移动到 ONBOOT=no 那里,删除 no,输入 yes
  3. 然后按 Ctrl+c 键退出编辑状态,再按 shift+; 组合键输入 : ,紧接着输入 wq 保存并退出文本编辑器。
  4. 将 ifcfg-eth0 复制一份另存为 ifcfg-eth1:
     cp -rf /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1

    然后编辑 ifcfg-eth1(编辑方法同前述编辑 ifcfg-eth0 的方法):

    vi /etc/sysconfig/network-scripts/ifcfg-eth1

    将其中的内容改为(其中 HWADDR 就是刚才记下的那一串字符,只不过用 : 分割开了):

    DEVICE="eth1"
    HWADDR=08:00:27:F2:6B:E7
    TYPE=Ethernet
    NM_CONTROLLED=no
    ONBOOT=yes
    IPADDR=192.168.0.10
    NETMAK=255.255.255.0
    GATEWAY=192.168.0.1

    新的 CentOS 7 中该文件类似与于这样(仅供参考),

    HWADDR=08:00:27:dc:46:bb
    TYPE=Ethernet
    BOOTPROTO=static
    NM_CONTROLLED=no
    IPADDR=192.168.1.75
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=192.168.1.1
    DNS2=8.8.8.8
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=no
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV6_FAILURE_FATAL=no
    NAME=enp0s3
    UUID=6a62a945-6b3a-4293-975a-c8db15c07c12
    ONBOOT=yes
    

    然后保存退出编辑器。接着执行下面的指令重新启动所有网络连接:

    systemctl restart network

    如果没有看到“Bringing up interface eth1:    [ OK ]”这样的反馈信息,那有可能是因为 eth1 没有安装好。试着执行下面的指令让 CentOS 自动检测新硬件并安装(此指令只适用于 CentOS 6 及以下版本):

    start_udev

    等它完成了再重新重启所有网络连接。
    当然也有可能是该配置文件中指定的网卡硬件地址(MAC)(即上面的 HWADDR= 后面的内容)有了变动造成的。查看网卡的硬件地址可以这样,

    ifconfig -a

    该指令在 CentOS 7 中默认被移除了,可以安装 net-tools 来获得该指令,

    yum install net-tools

    也可以使用 CentOS 7 中提供的,

    ip link

    来查看,例如,

    # ip link
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
        link/ether 08:00:27:dc:46:bb brd ff:ff:ff:ff:ff:ff

    08:00:27:dc:46:bb 就是正确的网卡物理地址。

  5. 如果没什么意外的话,现在,从母机(也就是安装了 VirtualBox 的系统)里应该可以 ping 到这个虚拟机了:
    ping 192.168.0.10
  6. 也可以试试直接通过域名 domain.com 和 www.domain.com 访问虚拟机:
    ping domain.com

这是我的 VPS 学习之路系列总结文章中的一篇,对于搭建局域网环境来练习创建自己的网站非常有帮助。©

本文发表于水景一页。永久链接:<https://cnzhx.net/blog/virtualbox-vm-network-setting/>。转载请保留此信息及相应链接。

1 条关于 “VirtualBox 虚拟机的网络设置” 的评论

  1. 点赞!通过这个设置起来了!!

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)