本文给出了在VirtualBox下搭建一个
的网络配置方案。
先定义一下名词:
最近在使用VirtualBox搭建一个实验环境,由于公司规定了所有的机器都不能使用固定IP,都必须由DHCP自动获取。
为了不影响公司整理的网络环境,只能把实验用的网络环境限制在使用内部IP上。因此,这个实验环境必须满足如下的需求(注意这三个需求是AND的关系,必须同时满足):
类似于这样:
为了满足以上需求,我在网上找了很多教程,终于有一个叫做 JOB OPEREL 的老哥,给出了一个比较靠谱的解决方法,你可以在这里找到他的文章。
我借鉴了他的方法,但是在连接外网的时候,和他的做法(他用的是桥接连接外网,最终还是需要影响外部网络的;而我用的是NAT地址转换来连接外网,不需要外部网络的,如果你不知道我在这里碎碎念什么,那么,无视吧……)不一样。
废话少说,开始干活!
为了满足上面的三个需求,我准备在虚拟机里面加三个网卡来完成,思路如下:
说了这么多,其实还差一块,那么到底主机与虚拟机之间是怎么连接的呢?
细心的人可能会发现,在我们安装好VirtualBox之后,主机的系统里面会多出一个连接,VirtualBox Host-Only Network,这个是VirtualBox自动生成的一个连接;而另外一个本地连接就是实际的网卡的连接:
上图的两个连接,以及虚拟机里面的三块网卡互相配合,组成了下面的网络结构图:
打开 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:
$ 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:
如果再新建一台虚拟机,还是需要参考上面的步骤,为每个虚拟机都设置三块网卡。
通过主机来 ping 虚拟机,结果如图,成功!
反过来,从虚拟机中ping主机,结果如图,成功!
虚拟机之间互 ping,结果如图,成功!
从虚拟机直接上外网,如图,成功!(注意:请确认你的主机和虚拟机都使用了相同的代理服务器设置)
通过把 VirtualBox 的几种联网方式的混合运用,就能满足我们大多场合的需求。其实回过头想想,如果一种解决方法解决不了问题,可以尝试一下混合几种解决方案,取长补短,这样带来的加乘效果,往往会让你吃惊。