不会使用虚拟机的程序员不是好程序员

356 阅读4分钟

原创:花括号MC(微信公众号:huakuohao-mc),欢迎分享,转载请保留出处。

相信每个程序员都会有使用虚拟机的需求,因为日常工作学习中,很多问题都需要在集群环境下进行,比如Mysql集群,Redis集群,Hadoop集群,Spark集群,K8S集群等等。

没有虚拟机的帮忙,钱包还真受不了,毕竟租云主机来进行日常学习不是谁都能承担的起的。常见的虚拟软件有VmwareVirtual Box

虚拟机网络需求

创建虚拟机对于很多人不是问题,但是如何正确选择网络模式却让很多人摸不着头脑。特别是对于有搭建集群环境需求的同学来说,往往希望自己创建的虚拟机之间可以互相访问,虚拟机可以访问公网进行软件安装,宿主机可以访问虚拟机。

针对于以上这种实际的网络诉求,我们来看看通过Virtual Box创建的虚拟机,该如何正确选择网络模型。

常用网络模式分类

  1. NAT网络
  2. 网络地址转换(NAT)
  3. 桥接网络(Bridged Adapter)
  4. 仅主机网络(Host-Only)
  5. 内部网络(Internal)

NAT网络

通过NAT技术(网络地址转换),使虚拟机有自己的内部IP,虚拟机把宿主机当作网关。所以虚拟机可以Ping通宿主机,同样虚拟机也可以进行公网访问。但是宿主机不能Ping通虚拟机,虚拟机之间也不能Ping通。

网络地址转换(NAT)

所有特性和NAT网络一样,唯一的区别就是可以通过配置端口转发规则,实现宿主机访问虚拟机。

桥接网络(Bridged Adapter)

虚拟机通过宿主机的网卡桥接到宿主机所在的网络中,虚拟机会得到一个和宿主同网段的IP。所以虚拟机到宿主机,宿主机到虚拟机,虚拟机到公网都是能够互相Ping通的,注意要关闭防火墙。

仅主机网络(Host Only)

可以简单的理解为Virtual Box在宿主机中虚拟出一张虚拟网卡,这个网卡供所有的虚拟机用。也就是说所有虚拟机都用这个网卡的IP来划分子网。因为虚拟网卡和宿主机的网卡不在同一个网段,所以默认情况下,虚拟机和宿主机是不通的,虚拟机也不能访问公网。但是虚拟机之间是互通的,因为都在同一个网段下。但是在这种模式下我们可以通过网卡共享,网卡桥接的方式实现虚拟机与主机及公网互相访问。

内部网络(Internal)

顾名思义,就是网络只在虚拟机内部使用,虚拟机之间是互通的。虚拟机和主机之间以及和公网相互之间都不是互通。

把上面集中网络模式的互通性总结成表格:

访问方向NATNAT转发桥接(Bridged Adapter)仅主机(Host Only)内部网络
主机->虚机noyesyes默认no,自定义配置后yesno
虚机->其他主机yesyesyes默认no,自定义配置后yesno
其他主机->虚机noyesyes默认no,自定义配置后yesno
虚机->虚机nonoyesyesyes

网络方案选择

通过上面的表格我们发现,桥接和Host-Only模式都能满足我们的需求,那么这两者有什么区别呢?

  1. 桥接的方式,虚机分配的IP和宿主机的IP是同一个网段。如果在公司的话,一般公司网段都是分配好的静态IP,如果你的虚拟机占用宿主机网段的IP,估计公司网络管理员会找你谈话。但是在自己家里使用问题就不大。
  2. 仅主机(Host-Only)方式,该种方式通过配置之后,虚拟机有自己的内部网段,不会占用宿主机的IP资源。所以还是比较推荐这种方案,虽然配置上可能比桥接方式复杂一点。

除了上面两种方式外,我们也可以通过使用双网卡的方式,即给虚拟机配置两张网卡,网卡1使用NAT,实现虚拟机访问公网,网卡2使用Host-Only,实现虚拟机之间互相访问。

总结

如果想深入理解每种网络模式的工作原理,还是应该系统的学习一下网络知识。赶快搭建虚拟机,进行学习和实验吧。

推荐阅读

1. Java并发编程那些事儿(十)——最后的总结

2. 聊聊对称加密与非对称加密

3. Awk这件上古神兵你会用了吗

4. 手把手教你搭建一套ELK日志搜索运维平台

原创:花括号MC(微信公众号:huakuohao-mc)。关注JAVA基础编程及大数据,注重经验分享及个人成长。