VirtualBox下虚拟机和主机内网互通+虚拟机静态IP的网络配置
本文给出了在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自动生成的一个连接;而另外一个 本地连接 就是实际的网卡的连接:
上图的两个连接,以及虚拟机里面的三块网卡互相配合,组成了下面的网络结构图:
配置主机的内网静态IP
打开 Orcale VM VirtualBox管理器,从菜单中选择 管理 – 全局设定;在弹出的窗口中选择 网络,然后再选择 仅主机(Host-Only)网络(H) 标签页,双击 VirtualBox Host-Only Ethernet Adapter, 修改里面的IP地址,为了尊重传统,我选择192.168.1.1,如下图所示;
接着,关闭DHCP服务器,如下图所示:
也就是说,现在主机由一个静态IP:192.168.1.1。之后,虚拟机就可以通过这个IP地址来访问主机了。
上述设定完成后,查看主机的地址,可以看到如下的信息;
配置虚拟机的网卡
加入第一块网卡 eth0,将 eth0 配置成如下图的方式:
接着加入第二块网卡 eth1,将 eth1 配置成如下图的方式:
注意,虚拟机之间的内网名字可以随便起,这里叫做 neta。如果在配置在第二个虚拟机的时候,也要记得选择 netca 这个内网名字,这样虚拟机之间才可以互相通信。
最后,加入第三块网卡 eth2,配置如下:
保存,启动虚拟机,安装系统。
在虚拟机内部配置网卡
在这里我使用了Oracle Linux(其实和CentOS,RHEL是一毛一样的)。在配置IP的时候,用命令行来配置各个网卡的IP信息,如果你喜欢,也可以使用GUI(NetworkManager)。
首先 eth0,这里要与主机保持的一个网段(192.168.1.),把 eth0 的IP地址配置为 192.168.1.2:
1 | $ vim /etc/sysconfig/network-scripts/ifcfg-eth0 |
其次,配置 eth1,要注意内网我们选择 192.168.0. 这个网段,eth1 的IP地址配置为 192.168.0.2:
1 | $ vim /etc/sysconfig/network-scripts/ifcfg-eth1 |
再次,配置 eth2, 因为是NAT地址转换的,这块网卡使用DHCP来自动获取IP,具体如下:
1 | $ vim /etc/sysconfig/network-scripts/ifcfg-eth2 |
最后,重新启动一下网络服务:
# service network restart
查看一下我们配置后的结果:
1 | $ ip addr show |
也就是说,现在这台虚拟机有三个IP:
- 192.168.1.2: 和主机通信使用
- 192.168.0.2: 和其他的虚拟机通信使用
- 10.0.4.15: 是自动获取的,通过VirtualBox的地址转换功能,用来访问外网internet
如果再新建一台虚拟机,还是需要参考上面的步骤,为每个虚拟机都设置三块网卡。
验证
对需求1的验证
通过主机来 ping 虚拟机,结果如图,成功!
反过来,从虚拟机中ping主机,结果如图,成功!
需求2的验证
虚拟机之间互 ping,结果如图,成功!
需求3的验证
从虚拟机直接上外网,如图,成功!(注意:请确认你的主机和虚拟机都使用了相同的代理服务器设置)
总结
通过把 VirtualBox 的几种联网方式的混合运用,就能满足我们大多场合的需求。其实回过头想想,如果一种解决方法解决不了问题,可以尝试一下混合几种解决方案,取长补短,这样带来的加乘效果,往往会让你吃惊。
(END)