原文转自:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html#undefined html
虚拟机里设置上网方式为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虚拟 网络则不提供。三种方式具体的区别和介绍可看参考文献(1)。
网络
因为NAT的方式最简单,所以下面是NAT设置的具体方法。app
测试环境:工具
虚拟机版本:VMware Workstation 10oop
Ubuntu版本:Ubuntu 12.10/13.04post
由于NAT对应的是VMnet8虚拟网络,打开Vmware自带的虚拟网络编辑工具Virtual Network Editor,配置以下:测试
其中子网IP根据本身状况设置,好比我想设置固定IP地址为192.168.1.151,那么这里的子网IP就填192.168.1.0,另外记得取消DHCP选项服务。云计算
主要配置下面三个方面的内容:spa
(1)修改文件/etc/network/interfaces,这里是IP、网关、掩码等的一些配置;
(2)修改文件/etc/resolv.conf,这个文件保存DNS的有关信息;
(3)解决resolv.conf被重写问题;
(4)重启虚拟机网络
下面是具体配置方法:
命令:sudo vi /etc/network/interfaces
或 sudo gedit /etc/network/interfaces
个人配置以下:
# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.151 netmask 255.255.255.0 gateway 192.168.1.2
其中网关gateway要与Virtual Network Editor中“NAT Settings...”中的一致,通常好像都为192.168.xx.2。
命令:sudo vi /etc/resolv.conf
或 sudo gedit /etc/resolv.conf
个人配置以下:
nameserver 202.38.64.1
固然这里是因人而异了,加上你本身的DNS服务器便可,个人是校内DNS。
第二步中你虽然配置了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便可,命令以下:
sudo service network-manager stop 或者 sudo /etc/init.d/network-manager stop
可是这种方法不是一劳永逸的,由于每次重启系统后仍是会自动启动这个服务,所以咱们须要彻底禁止network-manager启动便可。
编辑network manager的配置文件/etc/init/network-manager.conf:
sudo vi /etc/init/network-manager.conf
注释掉其中的start on部分便可:
# network-manager - network connection manager # # The Network Manager daemon manages the system's network connections, # automatically switching between the best available. description "network connection manager" #start on (local-filesystems # and started dbus # and static-network-up) stop on stopping dbus expect fork respawn script # set $LANG so that messages appearing on the GUI will be translated. See LP: 875017 if [ -r /etc/default/locale ]; then . /etc/default/locale export LANG LANGUAGE LC_MESSAGES LC_ALL fi
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有啥关系,查看:
hadoop@Master:~$ ll /etc/resolv.conf lrwxrwxrwx 1 root root 29 9月 11 2013 /etc/resolv.conf -> ../run/resolvconf/resolv.conf
说明/etc/resolv.conf 其实只是一个link,它实际上指向的是 /run/resolvconf/resolv.conf
,这也就解释了为何每次重启都会被重写的缘由,你改的只是个link,对原文件没有影响,而每次重启这个link还得加载原文件的内容,因此对link的修改无效。
解决方法就是:修改真实的原文件,以下:
sudo vi /run/resolvconf/resolv.conf
发现这个文件与/etc/resolv.conf文件如出一辙,这就对了,在里面加入你本身的nameserver便可,这样每次重启就不会被重写了。
PS:网上也有人说修改/etc/resolvconf/resolv.conf.d/base
这个文件也行,我没有亲自测试,感兴趣的可用本身测试。
说了这么多,各版本的差别看来挺麻烦的,不知道最新的版本或之后的版本会不会又变样了,其实这里有个更简单的与版本无关的方式可以防止resolv.conf文件被重写,那就是方法二。
前面提到固定IP的上网方式主要是修改/etc/network/interfaces
这个文件,配置IP、网关什么的,其实这里面还有个参数能够配置,那就是DNS了,对应的参数名为
,这里设置的优先级比resolv.conf高,也就是网络会从这里读取DNS配置,若是没配置才去看resolv.conf里面的设置,所以在这里面配置DNS更简单。dns-nameservers
# interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 192.168.1.151 netmask 255.255.255.0 gateway 192.168.1.2 dns-nameservers 202.38.64.1
配置完成后,重启网络便可,也有好几种方法:
sudo service networking restart 或者 sudo /etc/init.d/networking restart
也能够重启网卡:
sudo ifconfig eth0 down sudo ifconfig eth0 up
重启网卡对别的网卡无影响,更推荐一些。
赶忙ping下www.baidu.com吧,应该能够上网了