但是如果你的機(jī)子有特殊用處,比如作為服務(wù)器,需要IP地址信息,亦或者像我一樣,作為一個云計算的節(jié)點,其IP都是在配置文件里配置好的,如果每次重啟系統(tǒng)都要跑過去修改下配置文件里的IP,那簡直是不可取的做法,因此為虛擬機(jī)設(shè)置固定IP上網(wǎng)非常的有必要!
設(shè)置固定IP的方法很多,大家都知道虛擬機(jī)上網(wǎng)有三種模式:bridged、host-only和NAT,其中NAT模式對應(yīng)VMnet8虛擬網(wǎng)絡(luò),host-only模式對應(yīng)VMnet1虛擬網(wǎng)絡(luò),bridged模式對應(yīng) VMnet0虛擬網(wǎng)絡(luò),都是由VMware虛擬機(jī)自動配置而生成的,不需要用戶自行設(shè)置。VMnet8和VMnet1提供DHCP服務(wù),VMnet0虛擬 網(wǎng)絡(luò)則不提供。
由于NAT的方式最簡單,因此下面是NAT設(shè)置的具體方法。
測試環(huán)境:
虛擬機(jī)版本:VMware Workstation 10
Ubuntu版本:Ubuntu 12.10/13.04
1. 設(shè)置虛擬機(jī)上網(wǎng)方式為NAT
![](/d/20211018/253e32975f791f2a8ef7ae5af273d4f5.gif)
2. 配置VMnet8虛擬網(wǎng)絡(luò)(Virtual Network Editor)
因為NAT對應(yīng)的是VMnet8虛擬網(wǎng)絡(luò),打開Vmware自帶的虛擬網(wǎng)絡(luò)編輯工具Virtual Network Editor,配置如下:
![](/d/20211018/0b5d27429a594a476a409e107ac14cc5.gif)
其中子網(wǎng)IP根據(jù)自己情況設(shè)置,比如我想設(shè)置固定IP地址為192.168.1.151,那么這里的子網(wǎng)IP就填192.168.1.0,另外記得取消DHCP選項服務(wù)。
3. 進(jìn)入到Ubuntu系統(tǒng)中配置網(wǎng)絡(luò)
主要配置下面三個方面的內(nèi)容:
(1)修改文件/etc/network/interfaces,這里是IP、網(wǎng)關(guān)、掩碼等的一些配置;
(2)修改文件/etc/resolv.conf,這個文件保存DNS的有關(guān)信息;
(3)解決resolv.conf被重寫問題;
(4)重啟虛擬機(jī)網(wǎng)絡(luò)
下面是具體配置方法:
(1)修改文件/etc/network/interfaces
命令:
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/p>
p>iface eth0 inet static
address 192.168.1.151
netmask 255.255.255.0
gateway 192.168.1.2
其中網(wǎng)關(guān)gateway要與Virtual Network Editor中“NAT Settings...”中的一致,一般好像都為192.168.xx.2。
(2)修改文件/etc/resolv.conf
命令:
sudo vi /etc/resolv.conf
或
sudo gedit /etc/resolv.conf[code]
我的配置如下:
[code]nameserver 202.38.64.1
當(dāng)然這里是因人而異了,加上你自己的DNS服務(wù)器即可,我的是校內(nèi)DNS。
(3)解決resolv.conf被重寫問題
第二步中你雖然配置了DNS,但是每次重啟虛擬機(jī)或重啟網(wǎng)絡(luò)后/etc/resolv.conf文件就會被重寫,也就是又恢復(fù)原樣了,你以前的配置就不存在了,每次都要手動配置是極不可取的,所以這步是必須的,首先我們要搞清楚resolv.conf被重寫的原因和機(jī)制,這在不同Ubuntu版本下有所差異。那怎么知道呢?一般resolv.conf文件一開頭就告訴你了。
解決該問題其實有兩種辦法,不怕麻煩的想理解原理的請參照方法一(與版本有關(guān)),怕麻煩的不想折騰的自覺轉(zhuǎn)到方法二(與版本無關(guān))。
方法一:與版本有關(guān)
a)Ubuntu 12.10
打開/etc/resolv.conf后可看到開頭的一句話:
# Generated by NetworkManager
說明resolv.conf這個文件是由NetworkManager這個程序生成的(對應(yīng)的是network-manager服務(wù)),那么解決辦法也就來了:我們關(guān)掉network-manager即可,命令如下:
sudo service network-manager stop
或者
sudo /etc/init.d/network-manager stop
但是這種方法不是一勞永逸的,因為每次重啟系統(tǒng)后還是會自動啟動這個服務(wù),因此我們需要完全禁止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./p>
p>description "network connection manager"/p>
p>#start on (local-filesystems
# and started dbus
# and static-network-up)
stop on stopping dbus/p>
p>expect fork
respawn/p>
p>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上網(wǎng)不可缺少的,但此時禁止NetworkManager啟動已經(jīng)不管用了,因為resolv.conf已經(jīng)不歸它管了,我們試著看看resolv.conf與resolvconf有啥關(guān)系,查看:
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還得加載原文件的內(nèi)容,所以對link的修改無效。
解決方法就是:修改真實的原文件,如下:
sudo vi /etc/resolvconf/resolv.conf.d/head
發(fā)現(xiàn)這個文件與/etc/resolv.conf文件一模一樣,這就對了,在里面加入你自己的nameserver即可,這樣每次重啟就不會被重寫了。
PS:網(wǎng)上也有人說修改/etc/resolvconf/resolv.conf.d/base這個文件也行,我沒有親自測試,感興趣的可用自己測試。
說了這么多,各版本的差異看來挺麻煩的,不知道最新的版本或以后的版本會不會又變樣了,其實這里有個更簡單的與版本無關(guān)的方式能夠防止resolv.conf文件被重寫,那就是方法二。
方法二:與版本無關(guān)
前面提到固定IP的上網(wǎng)方式主要是修改/etc/network/interfaces這個文件,配置IP、網(wǎng)關(guān)什么的,其實這里面還有個參數(shù)可以配置,那就是DNS了,對應(yīng)的參數(shù)名為dns-nameservers,這里設(shè)置的優(yōu)先級比resolv.conf高,也就是網(wǎng)絡(luò)會從這里讀取DNS配置,如果沒配置才去看resolv.conf里面的設(shè)置,因此在這里面配置DNS更簡單。
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
auto eth0/p>
p>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
(4)重啟虛擬機(jī)網(wǎng)絡(luò)
配置完成后,重啟網(wǎng)絡(luò)即可,也有好幾種方法:
sudo service networking restart
或者
sudo /etc/init.d/networking restart
也可以重啟網(wǎng)卡:
sudo ifconfig eth0 down
sudo ifconfig eth0 up
重啟網(wǎng)卡對別的網(wǎng)卡無影響,更推薦一些。
趕緊ping下www.baidu.com吧,應(yīng)該可以上網(wǎng)了。
PS:當(dāng)然也可以通過圖形界面network manager進(jìn)行配置,但個人感覺這種方式最好,因此推薦!