VirtualBox是现在最流行的虚拟机软件之一,要折腾linux,又不想影响原来的系统的话,基本绕不过virtualbox和VMware了。
virtualBox虚拟机有三种上网方式,NAT,Host-Only,桥接。 简单介绍一下三种上网方式,NAT就是把宿主机当做一个网管,做地址转化以后可以上外网,上网关系上宿主机跟虚拟机相当于父子,桥接就是相当于宿主机孕育出来一个同级别的 上网设备,虚拟机也可以从宿主机上层网关获取ip,宿主机和虚拟机相当于兄弟。这两者虚拟机都可以上外网。 Host-Only就是虚拟机与外界完全隔离,只有宿主机可以访问。这个对初学者来说用的比较少,因为连外网都访问不了的话,yum之类的命令就没法用了,想装个mysql都不容易。 更具体的,可以搜索“虚拟机的三种上网方式”
三种上网方式的对比如下: 来源:https://blog.csdn.net/bifengmiaozhuan/article/details/79887692 这么一看表面是没有问题,想要主机跟虚拟机通信用桥接,不需要这个功能就用nat。但是很多小伙伴就会有这么一个场景,比如我公司,公司的wifi认证是一台电脑一个ip地址,不能再申请另一个ip,所以桥接方式就不能用了。 要做linux学习,网络得需要的吧,所以host-only也淘汰了。 好像只剩nat了,可是nat有一个问题,宿主机不能访问虚拟机。 这意味着什么呢,xshell不能用了,你要忍受丑丑的linux界面,不能复制,很难输中文,winscp这些也不能用了。 噢还有,比如python的SSH连接同步开发也用不了了。 这么看来,既让虚拟机能上网,又让虚拟机跟宿主机之间能双向通信,看起来是必须的。那么,这个时候,网上的解决方案是,双网卡。 如下面这个教程: https://blog.csdn.net/liuxiao723846/article/details/44261539 思路也很简单,网卡一设置host-only,这样宿主机可以访问虚拟机,网卡二设置nat上网。 但是这个方法,好像还是有点难度的。而我方法,前面的图片其实已经剧透了。
首先,我虚拟机的地址, 10.0.2.15,这个地址是ping不通的, 此时我是桥接上网,我的网络也是通的 此时在virtualBox主界面选择好虚拟机,然后点【设置】-【网络】,即可打开上面的界面。 接着选择【端口转发】 此时,底下那两条不用看,我只是做了个临时的端口映射来跑别的服务的。看第一条规则,我把127.0.0.1(宿主机)的2222端口映射到的10.0.2.15(虚拟机)的22端口,22端口就是默认的ssh端口,这个时候我的宿主机就可以通过22端口访问虚拟机了。
xshell输入ssh localhost 2222,就是访问本机的2222端口,会自动映射到虚拟机中去。同理,mysql的3306等端口也可以映射出去。 输入完账号密码后,成功登入,实现了在nat上网模式下的双向通信。 不过值得注意的是,在调试python的flask框架的时候遇到了一个问题,我监听的ip地址只设置的127.0.0.1,就是主机,此时服务器只会监听来自表头源ip地址为10.0.2.15的数据包,从主机发过来的数据包表头为10.0.2.2(我也不知道为什么,默认的吧),所以会被丢弃。把ip改成0.0.0.0,就是自动监听所有ip发来的数据包,就解决了。 这也是我本人的学习笔记,有说的不对的欢迎各位大佬在评论区指出。