虚拟机里设置上网方式为nat最方便,因为无需手动设置即可上网,但是nat的上网方式默认是dhcp动态分配ip的,这意味着每次重启虚拟机都有不一样的IP地址,这对一般用户没任何问题。
但是如果你的机子有特殊用处,比如作为服务器,需要ip地址信息,亦或者像我一样,作为一个云计算的节点,其ip都是在配置文件里配置好的,如果每次重启系统都要跑过去修改下配置文件里的ip,那简直是不可取的做法,因此为虚拟机设置固定ip上网非常的有必要!
设置固定ip的方法很多,大家都知道虚拟机上网有三种模式:bridged、host-only和nat,其中nat模式对应vmnet8虚拟网络,host-only模式对应vmnet1虚拟网络,bridged模式对应 vmnet0虚拟网络,都是由vmware虚拟机自动配置而生成的,不需要用户自行设置。vmnet8和vmnet1提供dhcp服务,vmnet0虚拟 网络则不提供。
由于nat的方式最简单,因此下面是nat设置的具体方法。
测试环境:
虚拟机版本:vmware workstation 10
ubuntu版本:ubuntu 12.10/13.04
1. 设置虚拟机上网方式为nat
2. 配置vmnet8虚拟网络(virtual network editor)
因为nat对应的是vmnet8虚拟网络,打开vmware自带的虚拟网络编辑工具virtual network editor,配置如下:
其中子网ip根据自己情况设置,比如我想设置固定ip地址为192.168.1.151,那么这里的子网ip就填192.168.1.0,另外记得取消dhcp选项服务。
3. 进入到ubuntu系统中配置网络
主要配置下面三个方面的内容:
(1)修改文件/etc/network/interfaces,这里是ip、网关、掩码等的一些配置;
(2)修改文件/etc/resolv.conf,这个文件保存dns的有关信息;
(3)解决resolv.conf被重写问题;
(4)重启虚拟机网络
具体配置方法:
(1)修改文件/etc/network/interfaces
配置如下:
其中网关gateway要与virtual network editor中“nat settings...”中的一致,一般好像都为192.168.xx.2。
(2)修改文件/etc/resolv.conf
当然这里是因人而异了,加上你自己的dns服务器即可,我的是校内dns。
(3)解决resolv.conf被重写问题
第二步中你虽然配置了dns,但是每次重启虚拟机或重启网络后/etc/resolv.conf文件就会被重写,也就是又恢复原样了,你以前的配置就不存在了,每次都要手动配置是极不可取的,所以这步是必须的,首先我们要搞清楚resolv.conf被重写的原因和机制,这在不同ubuntu版本下有所差异。那怎么知道呢?一般resolv.conf文件一开头就告诉你了。
解决该问题其实有两种办法,不怕麻烦的想理解原理的请参照方法一(与版本有关),怕麻烦的不想折腾的自觉转到方法二(与版本无关)。
方法一:与版本有关
a)ubuntu 12.10
打开/etc/resolv.conf后可看到开头的一句话:
# generated by networkmanager
说明resolv.conf这个文件是由networkmanager这个程序生成的(对应的是network-manager服务),那么解决办法也就来了:我们关掉network-manager即可,命令如下:
但是这种方法不是一劳永逸的,因为每次重启系统后还是会自动启动这个服务,因此需要完全禁止network-manager启动即可。
编辑network manager的配置文件/etc/init/network-manager.conf:
sudo vi /etc/init/network-manager.conf
注释掉其中的start on部分即可:
b)ubuntu 13.04
不知道ubuntu从哪个版本开始不是由networkmanager生成resolv.conf的了,至少在13.04下是这样的,因为resolv.conf开头写着:
# dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# do not edit this file by hand -- your changes will be overwritten
说是由resolvconf生成,networkmanager仍然存在,因为它是dhcp上网不可缺少的,但此时禁止networkmanager启动已经不管用了,因为resolv.conf已经不归它管了。
resolv.conf与resolvconf有啥关系,查看:
说明/etc/resolv.conf 其实只是一个link,它实际上指向的是 /run/resolvconf/resolv.conf,这也就解释了为什么每次重启都会被重写的原因,你改的只是个link,对原文件没有影响,而每次重启这个link还得加载原文件的内容,所以对link的修改无效。
解决方法就是:修改真实的原文件,如下:
sudo vi /etc/resolvconf/resolv.conf.d/head
发现这个文件与/etc/resolv.conf文件一模一样,这就对了,在里面加入你自己的nameserver即可,这样每次重启就不会被重写了。
ps:网上也有人说修改/etc/resolvconf/resolv.conf.d/base这个文件也行,我没有亲自测试,感兴趣的可用自己测试。
说了这么多,各版本的差异看来挺麻烦的,不知道最新的版本或以后的版本会不会又变样了,其实这里有个更简单的与版本无关的方式能够防止resolv.conf文件被重写,那就是方法二。
方法二:与版本无关
前面提到固定ip的上网方式主要是修改/etc/network/interfaces这个文件,配置ip、网关什么的,其实这里面还有个参数可以配置,那就是dns了,对应的参数名为dns-nameservers,这里设置的优先级比resolv.conf高,也就是网络会从这里读取dns配置,如果没配置才去看resolv.conf里面的设置,因此在这里面配置dns更简单。
(4)重启虚拟机网络
配置完成后,重启网络即可,也有好几种方法:
也可以重启网卡:
重启网卡对别的网卡无影响,更推荐一些。
赶紧ping下www.baidu.com吧,应该可以上网了。
注意,当然也可以通过图形界面network manager进行配置。