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 虚拟机的网络设置” 的评论

雁过留声,人过留名

您的电子邮箱地址不会被公开。 必填项已用 * 标注

特别提示:与当前文章主题无关的讨论相关但需要较多讨论求助信息请发布到水景一页讨论区的相应版块,谢谢您的理解与合作!请参考本站互助指南
您可以在评论中使用如下的 HTML 标记来辅助表达: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>