‘壹’ Virtual Box虚拟机CentOS 7.x双网卡网络配置
首先科普下 Virtual Box 虚拟机的几种主流的网络设置方式,先上图(来源官方文档)
我们的目标是实现类似于桥接模式的那种局域网虚拟机主机互通并且能够访问外网的网络模式,以满足我们日常架设本地服务器测试环境的需求。但是又不想使用桥接模式,因为会占用真实局域网的 IP 地址,这点对于管理严格一点的公司内网来说非常棘手;切换网络容易产生 IP 冲突,就要针对虚拟机更改 IP 配置,非常的麻烦。
那哪种模式才能满足我们的需求呢?
以上介绍的单纯任何一种模式都无法满足,就算能满足也要做相应的设置,而不是默认配置完就能支持。比如 Host-only 模式就可以通过配置宿主机物理网卡和虚拟的网卡之间进行网络共享实现。但是考虑到不通操作系统(例如:Mac OS X、Windows)设置的方式肯定存在差异,没法做到跨平台,换一个操作系统部署同一套环境免不了学习成本,所以这种方式不予考虑。
那还有没有其他方式呢?
答案是有的,不过需要结合几种网络模式来实现。
这里我们采用 双网卡+Host-only+NAT 网络模式来实现。
虚拟机管理软件是支持定制硬件的(当然这里所说的硬件是指软件模拟的),所以添加网卡就可以满足。
假设你已经拥有了一台安装好 CentOS 7.x 的虚拟机
Virtual Box 侧边栏选中你要配置的虚拟机,我这里是 centos7-origin ,点击右边的设置
选中侧边栏的网络一栏,点击”网卡1“标签页,配置连接方式为“仅主机网络”,界面名称选默认的就好
点击“网卡2”标签页,配置连接方式为“网络地址转换”,注意要勾上“启用网络连接”的选框。如果有需要,你也还可以配置“网卡3”、“网卡4”。这里我们只需要配置两张网卡
按以上步骤添加好网卡启动虚拟机
输入 ip addr 命令,此时能看到两张网卡,依次为前面我们设置的 Host-only 、 NAT 模式
cd /etc/sysconfig/network-scripts && ls 可以看到存在 ifcfg-enp0s3 这个网卡的配置文件,后缀对应的就是前面看到的网卡名
cp ifcfg-enp0s3 ifcfg-enp0s8 拷贝 ifcfg-enp0s3 命名 ifcfg-enp0s8 (对应前面的第二张网卡名)
nmcli con show (使用这个命令需要 NetworkManager 这个服务是开启的)查看网卡的 UUID 并通过 nmcli con show > ~/uuid.txt 记录到文件以备修改网卡配置用(这里文件名和路径自己定,也可以同我一样放在家目录,因为我没有用 ssh 工具连接虚拟机,到时候给网卡设置上对应的 UUID 没法复制粘贴,输入会比较麻烦,所以先把查看到的 UUID 信息输出到文件,修改网卡配置文件时可以读入文件的内容方便编辑)
我们采用静态 IP 的方式配置Host-only模式的网卡,也就是 enp0s3 这块
回到Virtual Box主界面点击菜单管理->主机网络管理器,弹出对话框如下
这里采用固定 IP 配置,网络选项卡->手动配置如上
配置虚拟机 Host-only 模式的网卡 vi ifcfg-enp0s3
注意,网段需要跟上面主机网络配置的网卡处于同一网段,网关地址这里设置为主机网络配置的网卡地址一致
接着编辑 enp0s8 这张网卡, vi ifcfg-enp0s8 命令模式下光标移动到最后一行读入我们之前保存的网卡 UUID 文件 : r ~/uuid.txt 方便修改。因为这里是NAT模式,所以只要修改以上四个地方。
systemctl restart network 重启网络
ip addr 查看网卡是否配置成功,如上说明配置没问题
依次测试 Host-only 模式访问宿主机、 NAT 模式访问宿主机、访问外网
测试宿主机访问虚拟机
这样,整个网络便搭建好了,接着就可以欢乐的搭建本地服务器测试环境了
‘贰’ 虚拟机与宿主机之间使用同一个网段方法
1)打开win10的设备管理器,定位到网络适配器,然后从操作菜单里点击“添加过时硬件”
2)选择“安装我手动从列表选择的硬件”
3)选择安装的硬件是“网络适配器”,并且在下一步里,选择安装的是Microsoft公司的“Microsoft KM-TEST环回适配器”
4)继续下一步完成安装后,进入网络连接配置功能里,就会多了一个虚拟网卡了
5)对该虚拟网卡的属性进行设置,记得不用设置网关,也不用设置DNS,如下图:
6)在真正的网卡上设置网络共享,记得共享上网的网卡需要选择刚刚新增的虚拟网卡,如下图:
7)进入virtual box主机里设置虚拟主机的网络为“桥接网络”,并且指定的网卡是刚刚新增的虚拟网卡,如下图:
或者vm
8)启动虚拟主机,给虚拟主机的网卡配置一个跟虚拟网卡处于同一网段的IP,并且将网关指定为虚拟网卡设置的IP地址:
9)systemctl restart netwrok 重启网络,然后win10主机和linux虚拟主机就可以通讯了,同时linux虚拟主机也可以访问互联网了
‘叁’ Hyper-V虚拟机和宿主机内网外局域网互通配置
1.新建交换机选择外部
2.以太网设置刚创建交换器的网络
3. 原宿主机网络设置这样类似, 选择共享
4.虚拟选择刚创建好的网络适配器
OK!!
‘肆’ 虚拟机三种网络模式的配置及原理分析
我们首先说一下VMware的几个虚拟设备
VMnet0:用于虚拟桥接网络下的虚拟交换机
VMnet1:用于虚拟 Host -Only网络下的虚拟交换机
VMnet8:用于虚拟NAT网络下的虚拟交换机
VMware Network Adepter VMnet1(以下下简称Adepter VMnet1):Host用于与Host-Only虚拟网络进行通信的虚拟网卡
VMware Network Adepter VMnet8(以下下简称Adepter VMnet8):Host用于与NAT虚拟网络进行通信的虚拟网卡
一、NAT模式(最easy的)
1、虚拟机通过Vmnet8虚拟交换机链接宿主机的Adapter Vmnet8虚拟网卡上,实现与宿主机双向通信;
2、VMnet8提供虚拟NAT服务和虚拟DHCP服务,虚拟NAT设备与宿主机真实网卡直接相连,实现访问互联网;
3、此模式下未用到Vmnet1虚拟网卡
二、HOST-ONLY模式(研究一晚上,困)
1、虚拟机通过Vmnet1交换机链接宿主机Adapter Vmnet1虚拟网卡上,实现宿主机到虚拟机的单项通信(虚拟机此时访问不了宿主机);
2、Vmnet1提供虚拟DHCP服务;
3、要想实现虚拟机到宿主机的单项通信和让虚拟机访问外网,需要做:
1、将宿主机真实网卡适配器开启网络共享模式(ICS);
2、将Adapter Vmnet1虚拟网卡地址设置为192.168.x.1(固定格式的,一般无需手动更改,通常第1步设置完后,该虚拟网卡的地址会自动填 写,通常会填写192.168.137.1,但经过测试也可自己修改第三位数字,实际就是虚拟路由。但是,为什么第四位不能设置成别的数 字? 怎 么强制改都不行,很奇妙。)
3、将Vmnet1虚拟交换机的IP端子网设为192.168.x.0,此时可以关闭DHCP功能,因为,虚拟机要配置静态ip,不关闭也无所谓;
4、将虚拟机的网卡地址改为静态的,(我的网卡名叫ens33),具体配置如下:
TYPE="Ethernet"
BOOTPROTO=static
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="c7d8063c-0dc0-4e94-b229-568f0421e678"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.137.128"
NETMASK=255.255.255.0
GATEWAY=192.168.137.1
DNS1=8.8.8.8
DNS2=144.144.144.144
5、重启下network服务,大功告成;那么问题来了:楼主在反复测试的时候发现当把 Adapter Vmnet1虚拟网卡地址设置为192.168.1.1时 (即与宿主机真实路由地址相同时)会发生奇怪的现象就是,虚拟机可以访问网络但是不能访问宿主机,很诡异,不懂其中原理。
三、Bridged模式(再加一上午)
1、纯手动配置ip
2、将虚拟机ip设置成与宿主机真实网卡ip同一网段,并且相同网段和dns网址,具体配置如下:
TYPE="Ethernet"
BOOTPROTO=static
DEFROUTE="yes"
PEERDNS="yes"
PEERROUTES="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_PEERDNS="yes"
IPV6_PEERROUTES="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="c7d8063c-0dc0-4e94-b229-568f0421e678"
DEVICE="ens33"
ONBOOT="yes"
IPADDR="192.168.1.128"
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=192.168.1.1
3、重启下network服务,就可实现宿主机与虚拟机的双向通信,宿主机可访问互联网;
四、最后问题,如何让虚拟机提供互联网服务?即,使任何互联网上的主机可以访问局域网内的虚拟机
1、设置自己的路由器,将转发地址和端口映射到虚拟机的ip和端口上即可
2、上述方法没有经过验证,不知道三种网络模式是否都支持
五、总结原理,其实经过一番折腾后不难发现:
1、NAT模式和Host-Only模式在局域网内互联的方式是相同的:
NAT的链路:宿主机 <----->Adapter Vmnet8虚拟网卡 <----->Vmnet8虚拟交换机<----->虚拟机虚拟网卡(ens33)<----->虚拟机
Host-Only的链路:宿主机<----->Adapter Vmnet1虚拟网卡 <----->Vmnet1虚拟交换机<----->虚拟机虚拟网卡(ens33)<----->虚拟机
2、在连接互联网方面,NAT模式通过虚拟的NAT服务实现上网,Host-Only模式通过宿主机的真实网卡的网络共享上网
NAT的链路:互联网<----->物理路由器<----->NAT虚拟服务<----->VMnet8虚拟交换机<----->虚拟机虚拟网卡(ens33)<----->虚拟机
Host-Only的链路:互联网<----->物理路由器<----->Adapter Vmnet1虚拟网卡共享宿主机真实网卡的网络<----->VMnet1虚拟交换机<-----> 虚拟机虚拟网卡(ens33)<----->虚拟机
3、至于Bridged模式实际可理解为与宿主机同一局域网内的设备
类似于把宿主机虚拟为一个交换机,所有桥接设置的虚拟机通过VMnet0虚拟交换机连接到这个交换机的一个接口上,宿主机也同样插在这个 交换机当中。
链路:物理路由器<----->VMnet0虚拟交换机与宿主机真实网卡桥接<----->虚拟机虚拟网卡(ens33)<----->虚拟机
(以上属于个人分析,有待考证,如有错误,还望指正)
‘伍’ 虚拟机的主要网络设置方式 有图最好
VMWare提供了三种工作模式,它们是bridged(桥接模式)、NAT(网络地址转换模式)和host-only(主机模式)。要想在网络管理和维护中合理应用它们,你就应该先了解一下这三种工作模式。
bridged(桥接模式)
在这种模式下,VMWare虚拟出来的操作系统就像是局域网中的一台独立的主机,它可以访问网内任何一台机器。在桥接模式下,你需要手工为虚拟 系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主机器进行通信。同时,由于这个虚拟系统是局域网中的一个独立的主机 系统,那么就可以手工配置它的TCP/IP配置信息,以实现通过局域网的网关或路由器访问互联网。
host-only(主机模式)
在某些特殊的网络调试环境中,要求将真实环境和虚拟环境隔离开,这时你就可采用host-only模式。在host-only模式中,所有的虚拟系统是可以相互通信的,但虚拟系统和真实的网络是被隔离开的。
NAT(网络地址转换模式)
使用NAT模式,就是让虚拟系统借助NAT(网络地址转换)功能,通过宿主机器所在的网络来访问公网。也就是说,使用NAT模式可以实现在虚拟 系统里访问互联网。NAT模式下的虚拟系统的TCP/IP配置信息是由VMnet8(NAT)虚拟网络的DHCP服务器提供的,无法进行手工修改,因此虚 拟系统也就无法和本局域网中的其他真实主机进行通讯。
如果你想利用VMWare安装一个新的虚拟系统,在虚拟系统中不用进行任何手工配置就能直接访问互联网,建议你采用NAT模式。