问题背景
最近在公司使用VirtualBox虚拟机,使用虚拟的ubuntu系统,家里的路由能使用桥接模式,然后能双向ping通(宿主机 <——> 虚拟机),没啥问题。但是白天在公司上班的时候,发现桥接模式不好使了,只能用NAT模式,发现只能虚拟机ping通宿主机,但是无法从宿主机ping到虚拟机,这样就无法使用SSH工具了,非常不方便!
现在经常要打开虚拟Linux跑一些脚本和编译一些.so,感觉这个问题以后还是会经常遇到,所以我就记录下来,方便以后查阅。
注 : 桥接模式 = 网桥模式;
VirtualBox的4种网络连接模式
VMware的网络情况也类似,可以类比。
默认情况下,相互之间网络连接情况如下图:
NAT | Bridged Adapter | Internal | Host-only Adapter | |
---|---|---|---|---|
虚拟机 ——> 主机 | √ | √ | × | 默认不能,需要设置 |
主机 ——> 虚拟机 | × | √ | × | 默认不能,需要设置 |
虚拟机 ——> 其它主机 | √ | √ | × | 默认不能,需要设置 |
其它主机 ——> 虚拟机 | × | √ | × | 默认不能,需要设置 |
虚拟机 <——> 虚拟机 | × | √ | 同网络下可以 | √ |
NAT (网络地址转换模式)
NAT: Network Address Translation (网络地址转换)
NAT 网络地址翻译,是只能从内访问外面而不能从外部访问里面,所以只能单向ping通,虚拟机的ip只是内部ip。桥接则是与主机公用网卡,有独立的外部ip。
虚拟机与主机的关系:只能单向访问,虚拟机可以通过网络访问到主机,主机无法通过网络访问到虚拟机。
虚拟机与网络中其他主机的关系:只能单向访问,虚拟机可以访问到网络中其他主机,其他主机不能通过网络访问到虚拟机。
虚拟机与虚拟机的关系:相互不能访问,虚拟机与虚拟机各自完全独立,相互间无法通过网络访问彼此。
NAT模式通过绑定静态转发才能从外部访问,这个还是很方便的,绑定了静态转发之后,就没有网络环境的限制问题了。有需求的话,自己搜索一下网上的文章和教程,按照步骤操作即可,步骤很简单。
找到对应nat模式的网卡,点击下面的端口转发,增加转发规则,添加相应端口即可(只需填主机端口、子系统端口,ip不用填写)
假设虚拟机开启了ssh服务,服务默认服务端口为22,则设定子系统端口为22,主机端口222(自己随意填写),那么使用putty、scrt、xmanager等工具连接时,主机填写localhost,端口填写222(你定义的主机端口),即可实现宿主机ssh方式访问虚拟机。
假设虚拟机开启了httpd服务,服务默认服务端口为80,则设定子系统端口为80,主机端口880(自己随意填写),那么宿主机开启浏览器,输入地址http://localhost:880(你定义的主机端口),即实现宿主机访问虚拟机中的httpd提供的web服务了。
Bridged Adapter (网桥模式)
它是通过主机网卡,架设了一条桥,直接连入到网络中了。因此,它使得虚拟机能被分配到一个网络中独立的IP,所有网络功能完全和在网络中的真实机器一样。
网桥模式下的虚拟机,可以认为它是真实计算机了,因为它拥有真实的局域网ip地址,只要防火墙允许,它就能通。
虚拟机与主机的关系:可以相互访问,因为虚拟机在真实网络段中有独立IP,主机与虚拟机处于同一网络段中,彼此可以通过各自IP相互访问。
虚拟机与网络中其他主机的关系:可以互相访问,同样因为虚拟机在真实网络段中有独立IP,虚拟机与所有网络其他主机处于同一网络段中,彼此可以通过各自IP互相访问。
虚拟机与虚拟机的关系:可以互相访问,原因同上。
使用网桥模式需要注意的点:
由于“桥接模式”相当于在局域网内新加入一台独立计算机,让它具有指定的IP地址、子网掩码、网管、DNS等。 在公司里,不管什么资源都是要管控的,即使是网络资源,尤其是IP地址(毕竟是有限的),一般情况下,公司里,这个是由网管/运维来统筹处理的,他们为了网络的安全性,和方便做统一管理,公司的网关默认都是不允许你的虚拟机网络成功分配到网络资源的,他们会在路由上做限制,导致你的虚拟机无法使用网桥模式。
我尝试宿主机加入4G网络,虚拟机也一样不能使用网桥模式。
所以想要网桥功能的话,我一般选择下班之后,回家里(家里的路由不做这种限制)去做实验。
Internal (内网模式)
内网模式,顾名思义就是内部网络模式:
虚拟机与外网完全断开,只实现虚拟机与虚拟机之间的内部网络模式。
虚拟机与主机的关系:不能相互访问,彼此不属于同一个网络,无法相互访问。
虚拟机与网络中其他主机的关系:不能相互访问,理由同上。
虚拟机与虚拟机的关系:可以相互访问,前提是在设置网络时,两台虚拟机设置同一网络名称。如上配置图中,名称为intnet。
Host-only Adapter (主机模式)
主机模式,这是一种比较复杂的模式,需要有比较扎实的网络基础知识才可以玩转。可以说前面几种模式所实现的功能,在这种模式下,通过虚拟机及网卡的设置都可以被实现。
我们可以理解为Guest在主机中模拟出一张专供虚拟机使用的网卡,所有虚拟机都是连接到该网卡上的,我们可以通过设置这张网卡来实现上网及其他很多功能,比如(网卡共享、网卡桥接等)。
虚拟机与主机的关系:默认不能相互访问,双方不属于同一IP段,host-only网卡默认IP段为192.168.56.X 子网掩码为255.255.255.0,后面的虚拟机被分配到的也都是这个网段。通过网卡共享、网卡桥接等,可以实现虚拟机与主机相互访问。
虚拟机与网络主机的关系:默认不能相互访问,原因同上,通过设置,可以实现互相访问。
虚拟机与虚拟机的关系:默认可以相互访问,都是同处于一个网段。
reference
https://www.cnblogs.com/haolb123/p/16553059.html 《VirtualBox NAT模式,设置虚拟机可上网,宿主机可访问虚拟机的方法》
http://blog.csdn.net/ixidof/article/details/12685549 《快速理解VirtualBox的四种网络连接方式》
http://blog.csdn.net/zero_295813128/article/details/51159805 《快速理解VirtualBox的四种网络连接方式》
https://www.cnblogs.com/mysticbinary/p/12703542.html 《网络地址转换NAT的两种模式(概念浅析)& IP溯源》