需求:
1. 宿主机需要通过固定的IP访问虚拟机
2. 虚拟机需要可以访问外网
已有条件及约束:
1. 宿主机已经可以访问外网
2. 上网使用的IP地址若是静态IP会经常出现冲突
3. 虚拟机系统版本 CentOS 6.4
首先,我们大体的看一下Vbox的四种网络设置的功能及区别:
1. 单网卡
如果只有一张虚拟网卡,我们来考虑下 Vbox 四种网络设置是否能实现需求:
- NAT : 主机不能访问虚拟机 排除
- Bridge: 所有功能都可以实现,但由于宿主机网段静态IP冲突严重,而宿主机又需要固定IP访问,故此种方式不太适用 排除
- Internal: 完全封闭网络,只能实现虚拟机与虚拟机之前的访问 排除
- Host-Only:通过设置可以实现所有的功能 通过
1.1. 主宿访问
首先,将Vbox上的网络设置改成 Host-Only 模式:
其次,修改宿主机上虚拟网卡的设置为:
IP地址 : 192.168.56.1
子网掩码: 255.255.255.0
最后,更改虚拟机的网卡(/etc/sysconfig/network-scripts/ifcfg-eth0)设置,并重启网卡即可:
DEVICE=eth0
HWADDR=08:00:27:8C:D0:A0
TYPE=Ethernet
UUID=5a44ad28-85e1-4d0f-bff8-8e7ff05a8a9f
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
NETMASK=255.255.255.0
IPADDR=192.168.56.66
GATEWAY=192.168.56.1
1.2. 外网访问
首先,在虚拟机上配置DNS服务器,修改配置文件 /etc/resolv.conf :
nameserver 8.8.8.8
nameserver 8.8.4.4
再将宿主机上真实网卡的网络共享给虚拟网卡:
共享完成后,宿主机上Host-Only的虚拟网卡的IP地址会被重置为 192.168.137.1,连接虚拟机的客户端会断开,此时需要手动将其还原成 192.168.56.1。重新连接后,测试虚拟机的外网访问如下:
2. 多网卡
如果只需要部署单独虚拟机,单网卡足以,如果需要部署多台虚拟机,上述方案是行不通的,宿主机的网络共享设置只能发生在两块网卡之间,超过两张网卡不能再进行共享(我试验的结果)。
为了实现需求,我们仍然分为两块去实现,第一步是主宿访问,使用Host-Only实现,第二步是外网访问,使用Bridge实现。
2.1 主宿访问
与单网卡下的主宿访问配置方式一致
2.2. 外网访问
首先,我们需要在 Vbox 上创建一块新的网卡,并设置网络连接方式为 Bridge,界面名称选择宿主机上可访问外网的真实网卡:
其次,在虚拟机上配置新的网卡,在 /etc/sysconfig/network-scripts 下创建新的网卡配置 ifcfg-eth1,内容如下:
DEVICE=eth1
HWADDR=08:00:27:D3:FA:20
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
需要注意的是,由于 Bridge 会获取一个宿主机网段的IP,所以此处指定获取方式为 dhcp 的动态方式,同时 HWADDR 的值需要与 Vbox 创建的网卡的 MacId 一致。
配置完成后,重启虚拟机网卡,可以访问外网。