virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程

VirtualBox是现在最流行的虚拟机软件之一,要折腾linux,又不想影响原来的系统的话,基本绕不过virtualbox和VMware了。virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程

virtualBox虚拟机有三种上网方式,NAT,Host-Only,桥接。
virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
简单介绍一下三种上网方式,NAT就是把宿主机当做一个网管,做地址转化以后可以上外网,上网关系上宿主机跟虚拟机相当于父子,桥接就是相当于宿主机孕育出来一个同级别的
上网设备,虚拟机也可以从宿主机上层网关获取ip,宿主机和虚拟机相当于兄弟。这两者虚拟机都可以上外网。
Host-Only就是虚拟机与外界完全隔离,只有宿主机可以访问。这个对初学者来说用的比较少,因为连外网都访问不了的话,yum之类的命令就没法用了,想装个mysql都不容易。
更具体的,可以搜索“虚拟机的三种上网方式”

三种上网方式的对比如下:
virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
来源:https://blog.csdn.net/bifengmiaozhuan/article/details/79887692
这么一看表面是没有问题,想要主机跟虚拟机通信用桥接,不需要这个功能就用nat。但是很多小伙伴就会有这么一个场景,比如我公司,公司的wifi认证是一台电脑一个ip地址,不能再申请另一个ip,所以桥接方式就不能用了。
要做linux学习,网络得需要的吧,所以host-only也淘汰了。
好像只剩nat了,可是nat有一个问题,宿主机不能访问虚拟机。
这意味着什么呢,xshell不能用了,你要忍受丑丑的linux界面,不能复制,很难输中文,winscp这些也不能用了。
噢还有,比如python的SSH连接同步开发也用不了了。
virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
这么看来,既让虚拟机能上网,又让虚拟机跟宿主机之间能双向通信,看起来是必须的。那么,这个时候,网上的解决方案是,双网卡。
如下面这个教程:
https://blog.csdn.net/liuxiao723846/article/details/44261539
思路也很简单,网卡一设置host-only,这样宿主机可以访问虚拟机,网卡二设置nat上网。
但是这个方法,好像还是有点难度的。而我方法,前面的图片其实已经剧透了。

首先,我虚拟机的地址,virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
10.0.2.15,这个地址是ping不通的,virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
此时我是桥接上网,我的网络也是通的
此时在virtualBox主界面选择好虚拟机,然后点【设置】-【网络】,即可打开上面的界面。
接着选择【端口转发】virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
此时,底下那两条不用看,我只是做了个临时的端口映射来跑别的服务的。看第一条规则,我把127.0.0.1(宿主机)的2222端口映射到的10.0.2.15(虚拟机)的22端口,22端口就是默认的ssh端口,这个时候我的宿主机就可以通过22端口访问虚拟机了。

xshell输入ssh localhost 2222,就是访问本机的2222端口,会自动映射到虚拟机中去。同理,mysql的3306等端口也可以映射出去。
virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
输入完账号密码后,成功登入,实现了在nat上网模式下的双向通信。virtualBox虚拟机NAT上网方式并实现主机虚拟机双向通信教程
不过值得注意的是,在调试python的flask框架的时候遇到了一个问题,我监听的ip地址只设置的127.0.0.1,就是主机,此时服务器只会监听来自表头源ip地址为10.0.2.15的数据包,从主机发过来的数据包表头为10.0.2.2(我也不知道为什么,默认的吧),所以会被丢弃。把ip改成0.0.0.0,就是自动监听所有ip发来的数据包,就解决了。
这也是我本人的学习笔记,有说的不对的欢迎各位大佬在评论区指出。