Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止
Linux系列:Ubuntu虚拟机设置固定IP上⽹(配置IP、⽹关、
DNS、防⽌resol。。。
虚拟机⾥设置上⽹⽅式为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设置的具体⽅法。
测试环境:
虚拟机版本: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)修改⽂件/f,这个⽂件保存DNS的有关信息;
(3)解决f被重写问题;
(4)重启虚拟机⽹络
下⾯是具体配置⽅法:
(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
iface eth0 inet static
address 192.168.1.151
netmask 255.255.255.0
gateway 192.168.1.2
其中⽹关gateway要与Virtual Network Editor中“”中的⼀致,⼀般好像都为2。
(2)修改⽂件/f
命令:sudo vi /f sudo gedit /f
我的配置如下:
nameserver 202.38.64.1
当然这⾥是因⼈⽽异了,加上你⾃⼰的DNS服务器即可,我的是校内DNS。
(3)解决f被重写问题
第⼆步中你虽然配置了DNS,但是每次重启虚拟机或重启⽹络后/f⽂件就会被重写,也就是⼜恢复原样了,你以前的配置就不存在了,每次都要⼿动配置是极不可取的,所以这步是必须的,⾸先我们要搞清楚f被重写的原因和机制,这在不同 Ubuntu版本下有所差异。那怎么知道呢?⼀
般f⽂件⼀开头就告诉你了。
解决该问题其实有两种办法,不怕⿇烦的想理解原理的请参照⽅法⼀(与版本有关),怕⿇烦的不想折腾的⾃觉转到⽅法⼆(与版本⽆关)。
⽅法⼀:与版本有关
a)Ubuntu 12.10
打开/f后可看到开头的⼀句话:
# Generated by NetworkManager
说明f这个⽂件是由NetworkManager这个程序⽣成的(对应的是network-manager服务),那么解决办法也就来了:我们关掉network-manager即可,命令如下:
sudo service network-manager stop
或者
sudo /etc/init.d/network-manager stop
但是这种⽅法不是⼀劳永逸的,因为每次重启系统后还是会⾃动启动这个服务,因此我们需要完全禁⽌network-manager启动即可。
编辑network manager的配置⽂件/etc/f:
sudo vi /etc/f
注释掉其中的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⽣成f的了,⾄少在13.04下是这样的,因为f开头写着这样⼀句话:
# f(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启动已经不管⽤了,因为f已经不归它管了,我们试着看看f与resolvconf有啥关系,查看:
hadoop@Master:~$ ll /f
lrwxrwxrwx 1 root root 29  9⽉ 11  2013 /f -> ../run/f
说明/f 其实只是⼀个link/run/f
只是个link,对原⽂件没有影响,⽽每次重启这个link还得加载原⽂件的内容,所以对link的修改⽆效。
解决⽅法就是:修改真实的原⽂件,如下:
sudo vi /etc/f.d/head
发现这个⽂件与/f⽂件⼀模⼀样,这就对了,在⾥⾯加⼊你⾃⼰的nameserver即可,这样每次重启就不会被重写了。
PS:⽹上也有⼈说修改/etc/f.d/base
说了这么多,各版本的差异看来挺⿇烦的,不知道最新的版本或以后的版本会不会⼜变样了,其实这⾥有个更简单的与版本⽆关的⽅式能够防⽌f⽂件被重写,那就是⽅法⼆。
⽅法⼆:与版本⽆关
前⾯提到固定IP的上⽹⽅式主要是修改/etc/network/interfaces IP、⽹关什么的,其实这⾥⾯还有个参数可以配置,那就是DNS 了,对应的参数名为f⾼,也就是⽹络会从这⾥读取DNS配置,如果没配置才去看f
更简单。
# 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
(4)重启虚拟机⽹络
配置完成后,重启⽹络即可,也有好⼏种⽅法:
sudo service networking restart
或者
sudo /etc/init.d/networking restart
也可以重启⽹卡:
sudo ifconfig eth0 down
sudo ifconfig eth0 up
重启⽹卡对别的⽹卡⽆影响,更推荐⼀些。
赶紧ping下www.baidu吧,应该可以上⽹了。
PS:当然也可以通过图形界⾯network manager进⾏配置,但个⼈感觉这种⽅式最好,因此推荐!
参考⽂献:
(1)
(2)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。