Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

虚拟机里设置上网方式为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)修改文件/etc/resolv.conf,这个文件保存DNS的有关信息;

(3)解决resolv.conf被重写问题;

(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中“NAT Settings...”中的一致,一般好像都为192.168.xx.2。

(2)修改文件/etc/resolv.conf

命令:sudo vi /etc/resolv.conf 或 sudo gedit /etc/resolv.conf

我的配置如下:

nameserver 202.38.64.1

当然这里是因人而异了,加上你自己的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即可,命令如下:

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有啥关系,查看:

[email protected]:~$ 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 /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更简单。

# 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.com吧,应该可以上网了。

PS:当然也可以通过图形界面network manager进行配置,但个人感觉这种方式最好,因此推荐!

时间: 2024-10-12 08:55:27

Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)的相关文章

[例子]Ubuntu虚拟机设置固定IP上网

宿主机器     win7 linux            Ubuntu 14.04 LTS 参考: Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP.网关.DNS.防止resolv.conf被重写) 1  win7 设置虚拟网卡8 2 设置虚拟机 进入后, 先恢复默认设置. 在着呢对VMnet8进行设置 3 进入linux 通过ifconfig查看当前网卡 在linux中通过ifconfig可以看到的当前linux的网卡.(默认好像是从0开始排序) 在虚拟机中的eth0应该就是我

[转载]Linux系列:Ubuntu虚拟机设置固定IP上网(配置IP、网关、DNS、防止resolv.conf被重写)

虚拟机里设置上网方式为NAT最方便,因为无需手动设置即可上网,但是NAT的上 网方式默认是DHCP动态分配IP的,这意味着你每次重启虚拟机都 有不一样的IP地址,这对一般用户没任何问题.但是如果你的机子有特殊用处,比如作为服务器,需要IP地址信息,亦或者像我一样,作为一个云计算的节点, 其IP都是在配置文件里配置好的,如果每次重启系统都要跑过去修改下配置文件里的IP,那简直是不可取的做法,因此为虚拟机设置固定IP上网非常的有必 要! 设置固定IP的方法很多,大家都知道虚拟机上网有三种模式:bri

Ubuntu 16设置固定IP和DNS

ubuntu 16  设置固定ip地址和dns 1.设置ip地址 vi /etc/network/interfaces 添加如下内容: # The primary network interface # ens160是网卡,不知道自己是什么样的网卡,可以通过命令ip addr查看auto ens160iface ens160 inet static # 设置固定的ip地址,如下示例address 10.0.0.2 # 子网和网关可以通过route -n查看netmask 255.255.255.

虚拟机里CentOS 6.5配置IP地址之一手动设置

虚拟机里CentOS 6.5配置IP地址之一手动设置 1.手动设置  (不使用虚拟机自动获取IP的方法),手动配置方法如下: 虚拟机中系统 输入命令用sudu 或管理权限. #vi /etc/sysconfig/network-scripts/ifcfg-eth0      注释:Vi编辑网卡的配置文件 输入上述命令后回车,打开配置文件,使用方向键移动光标到最后一行,按字母键“i”,进入编辑模式,输入以下内容: IPADDR=192.168.10.11                      

Ubuntu虚拟机+ROS+Android开发环境配置笔记

Ubuntu虚拟机+ROS+Android开发环境配置笔记 虚拟机设置: 1.本地环境:Windows 7:VMWare:联网 2.虚拟环境 :Ubuntu 14.04, 比较稳定,且支持很多ROS 3.虚拟机配置:硬盘至少50G,因为整个工具链配置起来需要很多空间,性能方面可以尽量往高配置. 4.虚拟环境搭建起来后,Ubuntu会弹出提示窗口询问是否升级软件,升级完后重启,约30分钟,取决于网络环境. 5.重启后,terminal执行以下: $ sudo apt-get upgrade $ s

(九)ubuntu解决resolv.conf被重写问题

解决resolv.conf被重写问题 来源:http://www.cnblogs.com/lanxuezaipiao/p/3613497.html 第二步中你虽然配置了DNS,但是每次重启虚拟机或重启网络后/etc/resolv.conf文件就会被重写,也就是又恢复原样了,你以前的配置就不存在了,每次都要手动配置是极不可取的,所以这步是必须的,首先我们要搞清楚resolv.conf被重写的原因和机制,这在不同Ubuntu版本下有所差异.那怎么知道呢?一般resolv.conf文件一开头就告诉你了

Hyper-V 下linux虚拟机静态IP上网配置的两种方式(1)

工作需要,搭建linux环境,网上搜了两种Hyper-V配置linux静态IP及上网的方式,记录一下,方便查阅,如下是桥接方式的配置: 本实例所用的各项资源说明,系统是windows10企业版64bit,虚拟机管理器使用自带的Hyper-V管理器,虚拟机安装的系统是CentOS7.如下图所示:   首先创建虚拟交换机.在Hyper-V管理器中的虚拟交换机管理器中新建虚拟交换机, 类型使用内部(之前使用外部一直没有成功,原因暂不明确),步骤图如下:   配置完上一步骤后,在网络连接中查看所有适配器

windows和ubuntu虚拟机设置共享文件夹,在windows中用source insight阅读和编写代码,在linux中用交叉编译工具编译。

1:公司有个HISI3536的项目,需要用到交叉编译工具,因此需要安装ubuntu虚拟机,然后:在ubuntu中用交叉编译工具进行编译,刚开始自己是把整个的工程文件和代码都放到了ubuntu中,在ubuntu中进行代码的阅读和编写,然后在ubuntu中进行编译,然后还要把编译完成的可执行程序上传到windows中再下载到设备中.麻烦而且容易出错. 2:项目完成之后觉得这样做太麻烦了,想找一下有没有简单点的方法,突然想起来之前用过设置文件夹共享的方式,于是设置了文件夹共享,然后代码阅读和编写都在w

Linux服务器中怎么设置一个端口只能一个IP访问

Linux防火墙Iptable如何设置只允许某个ip访问80端口,只允许特定ip访问某端口?参考下面命令,只允许46.166.150.22访问本机的80端口.如果要设置其他ip或端口,改改即可.iptables -I INPUT -p TCP --dport 80 -j DROPiptables -I INPUT -s 46.166.150.22 -p TCP --dport 80 -j ACCEPT在root用户下执行上面2行命令后,重启iptables, service iptables r