鱼喃

听!布鲁布鲁,大鱼又在那叨叨了

VirtualBox利用两块网卡搭建虚拟机集群实现内外网互通

最终效果

  1. 各虚拟机之间能够相互访问
  2. 主机与虚拟机能够相互访问
  3. 虚拟机能访问外网(用于下载等)
  4. 外网无法访问虚拟机

思路

综合不同类型网卡的作用,利用两块网卡。用NAT模式实现效果3,即虚拟机能够连接外网进行软件包的更新下载工作;利用HOST-ONLY模式实现1、2效果,即虚拟机之间、主机与虚拟机之间互通。
VirtualBox/Vmware各种网络适配器模式可以参考 VirtualBox虚拟机网络环境解析和搭建-NAT、桥接、Host-Only、Internal、端口映射

补充

如果想要外部网络也能连接到虚拟机,可以将HOST-ONLY网卡换成Bridged Adapter(桥接模式),但是有一个缺点:需要联网(或者说要插网线)

实验环境

VirtualBox、centos6。其他平台或系统方法类似

具体步骤

新建HOST-ONLY网络

依次选择VirtualBox的File->Preferences->Network->Host->only Networks,点击右边的加号,即可新建一个HOST-ONLY,默认网络地址是192.168.56.1,如有需要可以右键编辑。
可以看到,多了一个网络连接vboxnet0,在用得到的时候VirtualBox会自动连接,不影响主机的正常上网。

03556c7f247dbb67d23d8488a54effcf.png

b066b087c36d0c56cf3ac06d0e37b942.png

给虚拟机添加网卡

选择虚拟机,右键设置,选择Network菜单。可以看到已经默认添加了一个NAT模式网卡,切换到Adapter2 界面,勾选Enable Network Adapter选项,选择Host-only Adapter,点击Advanced,修改Mac Address为唯一值(集群内部唯一,按照理论,统一网络内多台设备MAC地址会出现冲突,我没有实际测试)。

69e66f0abe508e9a558b1b83e034fb0d.png

37fdaa0067b11928f818fd2cabdc9bce.png

ccfe95a411a5da6a1231c32f187a848f.png

配置虚拟机里(以 centos 为例)

这里采用了静态分配 IP 的形式,自动分配也可以,但是可能会出现 IP 地址分配不一致的问题

1
2
3
4
cd /etc/sysconfig/network-scripts
sudo cp ifcfg-eth0 ifcfg-eth1
sudo vim ifcfg-eth0
# 修改ONBOOT=yes
1
2
3
4
5
6
7
8
9
sudo vim ifcfg-eth1
# 修改/添加以下几项
HWADDR=08:00:27:34:BA:2E #与你刚刚改的Mac address一致
BOOTPROTO=none
BROADCAST=192.168.56.255
NETWORK=192.168.56.1
NETMASK=255.255.255.0
IPADDR=192.168.56.110 #本机IP,192.168.56.1/24网段的都可以
USERCTL=no

a8a51af642ccc019e517b241e015bcca.png

c6ceb64bc854ee0e95a3fd4465cf97af.png

重启系统

1
sudo reboot

开机之后可以通过

1
2
ping baidu.com
ping 192.168.56.1

命令检查是否设置成功

补充

ubuntu系统添加网卡设置

VirtualBox添加网卡
ip link查看网卡设备名称
编辑 /etc/network/interfaces

添加如下信息(eth1是第二块网卡设备名称)

1
2
3
4
auto eth1
iface eth1 inet static
address 192.168.1.8
netmask 255.255.255.0
重启服务
1
sudo /etc/init.d/network restart

可能出现的问题

dns解析没问题,但是网络不通

可能原因,双网卡的情况下设置了网关,有时可能会出现这种问题。
解决方案:删掉配置文件里的网关设置,参见 virtualbox虚拟机中nat和host only的网络“冲突”问题

参考

How can I fix “cannot find a valid baseurl for repo” errors on CentOS?
ifconfig command not found on CentOS 7