您当前的位置:首页 > 计算机 > 软件应用 > 其它软件

VirtualBox下虚拟机和主机内网互通+虚拟机静态IP的网络配置

时间:03-31来源:作者:点击数:

本文给出了在VirtualBox下搭建一个

  • 虚拟机之间,以及虚拟机和主机之间内网互通
  • 主机和虚拟机都有静态IP
  • 主机和虚拟机都可以访问外网(internet)

的网络配置方案。

前提条件

先定义一下名词:

  • 主机: 也叫做host,也就是安装了VirtualBox的环境,物理上存在的实体机
  • 虚拟机:也叫做guest,也就是安装在VirtualBox里面的各个操作系统,不需要硬件,虚拟的系统

环境要求

最近在使用VirtualBox搭建一个实验环境,由于公司规定了所有的机器都不能使用固定IP,都必须由DHCP自动获取。

为了不影响公司整理的网络环境,只能把实验用的网络环境限制在使用内部IP上。因此,这个实验环境必须满足如下的需求(注意这三个需求是AND的关系,必须同时满足):

  • 需求1:从主机可以通过静态IP访问到每一个虚拟机,从虚拟机中可以访问主机(主机也有一个固定的静态IP)
  • 需求2:虚拟机之间组成一个由静态IP构成的网络,而且虚拟机之间可以互相访问
  • 需求3:从主机,从虚拟机都可以访问internet

类似于这样:

网络配置图
网络配置图

为了满足以上需求,我在网上找了很多教程,终于有一个叫做 JOB OPEREL 的老哥,给出了一个比较靠谱的解决方法,你可以在这里找到他的文章。

我借鉴了他的方法,但是在连接外网的时候,和他的做法(他用的是桥接连接外网,最终还是需要影响外部网络的;而我用的是NAT地址转换来连接外网,不需要外部网络的,如果你不知道我在这里碎碎念什么,那么,无视吧……)不一样。
废话少说,开始干活!

基本思路

为了满足上面的三个需求,我准备在虚拟机里面加三个网卡来完成,思路如下:

  • eth0: 网卡1,使用仅主机(Host-Only)适配器的连接方式,完成需求1,即:从主机可以通过一个静态IP访问到每一个虚拟机,从虚拟机中可以访问主机(主机也有一个固定的静态IP)
  • eth1: 网卡2,使用内部网络的连接方式,完成需求2,即:虚拟机之间组成一个由静态IP构成的网络,而且虚拟机之间可以互相访问
  • eth2: 网卡3,使用网络地址转换(NAT)的连接方式,完成需求3,即:从主机,从虚拟机都可以访问internet

说了这么多,其实还差一块,那么到底主机与虚拟机之间是怎么连接的呢?

细心的人可能会发现,在我们安装好VirtualBox之后,主机的系统里面会多出一个连接,VirtualBox Host-Only Network,这个是VirtualBox自动生成的一个连接;而另外一个本地连接就是实际的网卡的连接:

VirtualBox Host-Only Network
VirtualBox Host-Only Network

上图的两个连接,以及虚拟机里面的三块网卡互相配合,组成了下面的网络结构图:

网络结构图
网络结构图

配置主机的内网静态IP

打开 Orcale VM VirtualBox管理器,从菜单中选择管理全局设定;在弹出的窗口中选择网络,然后再选择仅主机(Host-Only)网络(H)标签页,双击VirtualBox Host-Only Ethernet Adapter, 修改里面的IP地址,为了尊重传统,我选择192.168.1.1,如下图所示;

修改里面的IP地址
修改里面的IP地址

接着,关闭DHCP服务器,如下图所示:

关闭DHCP服务器
关闭DHCP服务器

也就是说,现在主机由一个静态IP:192.168.1.1。之后,虚拟机就可以通过这个IP地址来访问主机了。

上述设定完成后,查看主机的地址,可以看到如下的信息;

主机的地址
主机的地址

配置虚拟机的网卡

加入第一块网卡 eth0,将 eth0 配置成如下图的方式:

eth0配置
eth0配置

接着加入第二块网卡 eth1,将 eth1 配置成如下图的方式:

eth1配置
eth1配置

注意,虚拟机之间的内网名字可以随便起,这里叫做 neta。如果在配置在第二个虚拟机的时候,也要记得选择 netca 这个内网名字,这样虚拟机之间才可以互相通信。

最后,加入第三块网卡 eth2,配置如下:

eth2配置
eth2配置

保存,启动虚拟机,安装系统。

在虚拟机内部配置网卡

在这里我使用了Oracle Linux(其实和CentOS,RHEL是一毛一样的)。在配置IP的时候,用命令行来配置各个网卡的IP信息,如果你喜欢,也可以使用GUI(NetworkManager)。

首先 eth0,这里要与主机保持的一个网段(192.168.1.),把 eth0 的IP地址配置为 192.168.1.2:

$ vim /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.1.2 #这里要与主机保持的一个网段:192.168.1.
PREFIX=24
DEFROUTE=no
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
HWADDR=08:00:27:86:D8:01
MTU=1500
UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
LAST_CONNECT=1409908253

其次,配置 eth1,要注意内网我们选择 192.168.0. 这个网段,eth1 的IP地址配置为 192.168.0.2:

$ vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
IPADDR=192.168.0.2 #内网我们选择 192.168.0\. 这个网段
NETMASK=255.255.255.0
PREFIX=24
DEFROUTE=no
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth1"
HWADDR=08:00:27:C6:79:2B
MTU=1500
UUID=9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04
LAST_CONNECT=1409908255

再次,配置 eth2, 因为是NAT地址转换的,这块网卡使用DHCP来自动获取IP,具体如下:

$ vim /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp #注意这里是DHCP
NAME="System eth2"
HWADDR=08:00:27:E9:19:A5
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
UUID=3a73717e-65ab-93e8-b518-24f5af32dc0d
LAST_CONNECT=1409908256

最后,重新启动一下网络服务:

# service network restart

查看一下我们配置后的结果:

    $ ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:86:d8:01 brd ff:ff:ff:ff:ff:ff
        inet 192.168.1.2/24 brd 192.168.1.255 scope global eth0
        inet6 fe80::a00:27ff:fe86:d801/64 scope link 
           valid_lft forever preferred_lft forever
    3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:c6:79:2b brd ff:ff:ff:ff:ff:ff
        inet 192.168.0.2/24 brd 192.168.0.255 scope global eth1
        inet6 fe80::a00:27ff:fec6:792b/64 scope link 
           valid_lft forever preferred_lft forever
    4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
        link/ether 08:00:27:e9:19:a5 brd ff:ff:ff:ff:ff:ff
        inet 10.0.4.15/24 brd 10.0.4.255 scope global eth2
        inet6 fe80::a00:27ff:fee9:19a5/64 scope link 
           valid_lft forever preferred_lft forever
```language

也就是说,现在这台虚拟机有三个IP:

  • 192.168.1.2: 和主机通信使用
  • 192.168.0.2: 和其他的虚拟机通信使用
  • 10.0.4.15: 是自动获取的,通过VirtualBox的地址转换功能,用来访问外网internet

如果再新建一台虚拟机,还是需要参考上面的步骤,为每个虚拟机都设置三块网卡。

验证

对需求1的验证

通过主机来 ping 虚拟机,结果如图,成功!

主机来ping虚拟机
主机来ping虚拟机

反过来,从虚拟机中ping主机,结果如图,成功!

从虚拟机中ping主机
从虚拟机中ping主机

需求2的验证

虚拟机之间互 ping,结果如图,成功!

虚拟机之间互ping
虚拟机之间互ping

需求3的验证

从虚拟机直接上外网,如图,成功!(注意:请确认你的主机和虚拟机都使用了相同的代理服务器设置)

虚拟机直接上外网
虚拟机直接上外网

总结

通过把 VirtualBox 的几种联网方式的混合运用,就能满足我们大多场合的需求。其实回过头想想,如果一种解决方法解决不了问题,可以尝试一下混合几种解决方案,取长补短,这样带来的加乘效果,往往会让你吃惊。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门