相信每个程序员都会有使用虚拟机的需求,因为日常工作学习中,很多问题都需要在集群环境下进行,比如Mysql集群,Redis集群,Hadoop集群,Spark集群,K8S集群等等。
没有虚拟机的帮忙,钱包还真受不了,毕竟租云主机来进行日常学习不是谁都能承担得起的。常见的虚拟软件有Vmware和Virtual Box。
虚拟机网络需求
创建虚拟机对于很多人不是问题,但是如何正确选择网络模式却让很多人摸不着头脑。特别是对于有搭建集群环境需求的同学来说,往往希望自己创建的虚拟机之间可以互相访问,虚拟机可以访问公网进行软件安装,宿主机可以访问虚拟机。
针对于以上这种实际的网络诉求,我们来看看通过Virtual Box创建的虚拟机,该如何正确选择网络模型。
常用网络模式分类
- NAT网络
- 网络地址转换(NAT)
- 桥接网络(Bridged Adapter)
- 仅主机网络(Host-Only)
- 内部网络(Internal)
NAT网络
通过NAT技术(网络地址转换),使虚拟机有自己的内部IP,虚拟机把宿主机当作网关。所以虚拟机可以Ping通宿主机,同样虚拟机也可以进行公网访问。但是宿主机不能Ping通虚拟机,虚拟机之间也不能Ping通。
网络地址转换(NAT)
所有特性和NAT网络一样,唯一的区别就是可以通过配置端口转发规则,实现宿主机访问虚拟机。
桥接网络(Bridged Adapter)
虚拟机通过宿主机的网卡桥接到宿主机所在的网络中,虚拟机会得到一个和宿主同网段的IP。所以虚拟机到宿主机,宿主机到虚拟机,虚拟机到公网都是能够互相Ping通的,注意要关闭防火墙。
仅主机网络(Host Only)
可以简单的理解为Virtual Box在宿主机中虚拟出一张虚拟网卡,这个网卡供所有的虚拟机用。也就是说所有虚拟机都用这个网卡的IP来划分子网。因为虚拟网卡和宿主机的网卡不在同一个网段,所以默认情况下,虚拟机和宿主机是不通的,虚拟机也不能访问公网。但是虚拟机之间是互通的,因为都在同一个网段下。但是在这种模式下我们可以通过网卡共享,网卡桥接的方式实现虚拟机与主机及公网互相访问。
内部网络(Internal)
顾名思义,就是网络只在虚拟机内部使用,虚拟机之间是互通的。虚拟机和主机之间以及和公网相互之间都不是互通。
把上面几种网络模式的互通性总结成表格:
访问方向 | NAT | NAT转发 | 桥接(Bridged Adapter) | 仅主机(Host Only) | 内部网络 |
主机->虚机 | no | yes | yes | 默认no,自定义配置后yes | no |
虚机->其他主机 | yes | yes | yes | 默认no,自定义配置后yes | no |
其他主机->虚机 | no | yes | yes | 默认no,自定义配置后yes | no |
虚机->虚机 | no | no | yes | yes | yes |
网络方案选择
通过上面的表格我们发现,桥接和Host-Only模式都能满足我们的需求,那么这两者有什么区别呢?
- 桥接的方式,虚机分配的IP和宿主机的IP是同一个网段。如果在公司的话,一般公司网段都是分配好的静态IP,如果你的虚拟机占用宿主机网段的IP,估计公司网络管理员会找你谈话。但是在自己家里使用问题就不大。
- 仅主机(Host-Only)方式,该种方式通过配置之后,虚拟机有自己的内部网段,不会占用宿主机的IP资源。所以还是比较推荐这种方案,虽然配置上可能比桥接方式复杂一点。
除了上面两种方式外,我们也可以通过使用双网卡的方式,即给虚拟机配置两张网卡,网卡1使用NAT,实现虚拟机访问公网,网卡2使用Host-Only,实现虚拟机之间互相访问。
总结
如果想深入理解每种网络模式的工作原理,还是应该系统地学习一下网络知识。赶快搭建虚拟机,进行学习和实验吧。