由于项目中用到了redis和ZooKeeper,所以今天在个人笔记本上安装了个虚拟机,搭建了个linux开发环境。整个过程中,关于虚拟机安装、软件安装等等这些都没什么好说的,就是在设置虚拟机中linux系统访问外网时,不是访问不了外网就是ip丢失,所以有必要把关于虚拟机中linux系统网络设置做个详细说明,以备后用,也方便其他遇到同样问题的人们借鉴:
虚拟机安装完成以后,可以查看到虚拟出三种网络:VMnet0、VMnet1和VMnet8。查看如图:![](https://s1.51cto.com/images/blog/201806/28/b7d3dd45873cf74088194424dd72df1f.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
这三种网络分别为本地连接、自连接和NAT连接,表示将来虚拟机中操作系统与外部网络采用的策略。此外,我们从主机(我的个人笔记本电脑)的网络连接中也可以看到生成了两个虚拟机网卡:
那有人会说这里怎么没有VMnet0呢?这是因为VMnet0这种连接,虚拟机不从属于主机,地位和主机同等,下边会详细描述。
下边就详细描述一下这三种网络设置:
第一:VMnet0是本地连接,也叫桥连接。这种连接,实质上就是虚拟出来一台机器,虚拟机和主机处在同等地位,共用同一个局域网,它也会占用局域网段中的一个ip;这个时候,主机怎么连外网,虚拟机就怎么连,那可能是有线的也可能是无线的,这由主机具体情况决定。
设置虚拟机要使用桥连接:在虚拟机上右键--->设置:![](https://s1.51cto.com/images/blog/201806/28/4c20843ff3b5e967075c357e9bdd3244.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
主机cmd下执行ipconfig命令,查看(我采用的是)无线局域网ip:![](https://s1.51cto.com/images/blog/201806/28/f14a747a734bb8499e2b24a619d06b8e.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在linux中执行ifconfig查看的ip也是31网段的一个ip:![](https://s1.51cto.com/images/blog/201806/28/8506ae27cbb0ae2aef81cd2d47c9ddda.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
这个时候如果主机连有外网,则虚拟机也可以连外网。
第二:VMnet1是自连接,虚拟机只能和主机进行通信,处于同一网段,它的ip是VMnet1网段中的一个;即使主机有外网,虚拟机也连不上外网。
设置虚拟机要使用自连接。
主机cmd下执行ipconfig命令,查看VMnet1的ip:![](https://s1.51cto.com/images/blog/201806/28/2f2536565bcf3c6712b1c2c5b3d11ee6.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在linux中执行ifconfig查看的ip也是17网段的一个ip:![](https://s1.51cto.com/images/blog/201806/28/102923281ed78b987d5898fdbc938672.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
这个时候即使主机连有外网,虚拟机也无法连接外网.
第三:VMnet8是NAT连接,虚拟机把主机ip作为外网ip,在这个基础之上虚拟出一个网络,虚拟出来一个网段;如果主机有外网,则虚拟机也可以连外网,连接原理就是从虚拟机找到主机网关,然后再找到主机外边的外网网关。
设置虚拟机要使用NAT连接。
cmd下执行ipconfig命令,查看VMnet8的ip:![](https://s1.51cto.com/images/blog/201806/28/3610bf29af10468950d10c6371e5ed11.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
在linux中执行ifconfig查看的ip也是248网段的一个ip:![](https://s1.51cto.com/images/blog/201806/28/6d9b79bafb37137a41c2ca2313fc1176.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
这个时候如果主机连有外网,则虚拟机也可以连外网。
至于我们实际开发过程中采用哪一种,由自己的使用情形决定,在有外网的情况下,使用VMnet0和VMnet8多一些,如果不需要使用外网又不想受外网干扰则采用VMnet1。
而对于VMnet1和VMnet8,我们还可以具体设置ip等信息:
还有一种意外情况,虚拟机中安装好linux系统之后,如果执行ifconfig没有ip地址,则可以执行命令dhclient ens33;但是这样虽然这次能生成ip,但是下次启动linux,又没了ip,要想每次都自动生成ip,则:
进入/etc/sysconfig/network-scripts/
用vi 修改ifcfg-ens33中的ONBOOT=no为ONBOOT=yes
保存并退出
重启网络服务service network restart
这是我遇到一些个情况,详列于此,希望对朋友们有所帮助。当然,有不周全之处,还请包涵。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/193548.html