虚拟机中的网卡

最近在学习极客时间上的一门课程<趣谈网络协议>,里面有涉及到虚拟机网络的一些东西.正好一直在接触,站在巨人的肩膀上,我也来写写. 为什么需要用虚拟网络呢?我在现实世界中扯网线不可以嘛?其实是完全 OK 的,但是这样做的话,成本会非常高,主要有以下几个方面:

  • 1 ,客户那边需要一台系统, OK ,自己去购买一台服务器,供客户使用.一台服务器可以使用至少是 10 年,在这期间,客户和你解除了合作关系,这台服务器还要不要?可别忘了,当时买这台服务器,可是花了价钱,还要把服务器放在机柜里,布线等等这些过程.

  • 2 ,客户那边说,给我的这台系统,内存不够用了,怎么办?用的是真实服务器,还能怎么办?把服务器停机弄下来再把内存条装上去.这个过程,客户那边如果还在用服务器,你就这么给弄下来了?还有一点,这个过程是需要人手动去做的,这个人力成本有算进去嘛?一台需要一个人,如果规模大起来,上万台服务器,其中有 100 台服务器需要更换内存,再用人力去解决问题?

  • 3 ,资源利用率不高.客户那边只需要一个 4 核 8G 的配置,但是服务器一般没有这么低的配置,所以剩下的资源怎么办?只能闲置.

  • 4 ,这台服务器我给了这个用户使用,然后使用期限到期了,这位用户没有续费,是不是就需要重装系统之后,才能给下一位客户使用?

这个需求挺大的,对吧?所以就有了虚拟机的概念.

虚拟机想要上网,就需要来聊聊虚拟机中的网络是如何工作的.

如果你在自己的笔记本上面倒腾过虚拟机,那你对虚拟机的三种联网方式应该会比较熟悉:仅主机模式,桥接模式和 NAT 模式.

下面就一个一个模式的来说说,正好倒腾虚拟机这么久,没有很系统的总结过.

仅主机( host-only )模式

这种模式,一般不常用,但是也来介绍一下.

这种模式提供的只是,物理机和虚拟机之间的相互访问,只是可以实现物理机和虚拟机之间的数据交换,但是虚拟机是没办法访问 Internet 的. 实现物理机和虚拟机之间的数据交换有两种方式:一是动态 IP 地址,另外一种是静态 IP 地址.

如果是采用动态 IP 地址的话,那就要多做一步:需要将你的网络共享. 如果是采用静态 IP 地址的话,虚拟机的 IP 设置,网关, DNS 设置都要注意和虚拟机网卡中相同.

此时,你的虚拟机是可以和物理机进行相互访问的.

但是请注意,此时你的虚拟机是访问不了 Internet 的!!!

host-only 模式,只是负责让你的虚拟机和物理机之间可以相互访问,并不负责让你的虚拟机联网.所以这种模式,一般都不常用.

毕竟你倒腾虚拟机,是为了能够上网搭建个集群什么的,对吧.

桥接( Bridge )模式

桥接,桥接,意思就是大家都在一个区域内,只是呢,需要一座桥来连接起来

有前提的:就是大家要在一个区域内,也就是说距离不能太远.要不然你在北极,我在南极,这个桥建不起来,对吧.

通过这种方式,让虚拟机联网是最快的.因为它就类似于你在局域网中有另外一台电脑,只要虚拟机所在的物理机可以上网,那么通过桥接模式,也就可以上网了.

但有一点要注意,就是要保证虚拟机的 IP 和所在局域网的 IP 没有冲突.

如果你的物理机所在局域网 IP 地址没什么限制,用这种方法上网就行了,对新手也比较友好.如果 IP 地址比较稀缺,那就最好不要用这种方法上网.

NAT ( Network address translate ) 模式

其实 NAT 联网这种方式,不单单在虚拟机中有应用,在实际中也有应用.比如:你的公司买了一个公网 IP : 114.114.114.114 ,但是你却发现,公司里面是有很多个 IP 地址的.

这就是 NAT 模式.具体工作原理就是:公司里面的一个 IP 地址是 192.168.111.111 这个地址想要访问 Internet ,此时这个 IP 地址所发送的请求会被包装成一个数据包,然后这个数据包会通过一个网关或者路由器,这个网关或者路由器的 IP 地址就是公司买的公网 IP .这样网关或者路由器在要发送数据包时,对数据包的 IP 协议层数据进行更改(也就是 NAT ),这样你就可以很顺利的去访问 Internet .这种方法的存在解决了两个问题: 1 , IP 地址稀缺问题; 2 ,公司的局域网 IP 也可以上网.

同样的道理,在虚拟机中 NAT 模式上网,也是如此.所以虚拟机中的网络 IP 地址,就算和物理机所在局域网的 IP 地址不一样,甚至不在一个网段内,也是 OK 的.在这里,物理机的 IP 地址就相当于虚拟机的网关,因而在这种模式下,虚拟机是可以 ping 通物理机的,但是物理机不能 ping 通虚拟机.

在这种模式下,联网方式也有两种:一是动态获取 IP 地址,另外一种是设置静态 IP 地址.

同样,对于新手来说,虚拟机的联网方式,使用动态获取 IP 地址就好了,具体就是在配置文件中,只需要将 onboot 改为 yes ,然后重启网卡,虚拟机就可以连接到网络上了.

如果想要设置静态 IP 地址也可以,就需要修改虚拟机网卡的网关,子网掩码和 DNS .

一般来说,使用动态获取 IP 地址这种方式就满足了大部分的需求,另外对于静态 IP 地址这一块,我一直没有实践过,怕误导,就不细说了.如果您感兴趣,可以细细钻研一下.

以上. 感谢您的阅读~

Java Geek Tech wechat
欢迎订阅 Java 极客技术,这里分享关于 Java 的一切。