Linux虚拟机网络配置故障
2019-07-10枝江市职业教育中心杨华梅瀚林
■ 枝江市职业教育中心 杨华 梅瀚林
编者按:很多人在使用Linux虚拟机进行网络配置时会出现各种各样的错误,笔者以Centos-6.5版本为例,对一些常见的Linux虚拟机网络配置故障进行了详细说明。
由 于Linux相对于Windows是开源的,而且在安全上要优于后者,现在各行各业应用很广泛,越来越多的人也在学习Linux。但是有些时候单独装它来学习,实在是很浪费,虚拟机就成了最好的选择。
但在使用虚拟机软件的时候,很多初学者都会遇到很多问题,其中网络连接问题是大家遇到最多问题之一。
对于Windwos下的网络配置,因为是图形化的界面,操作起来非常方便。但在Linux(本 文 以 Centos-6.5版本为例)虚拟机下配置就不是那么轻松了。
因为它是依赖在虚拟机下配置,首先要保证服务正常启动,再就是网络的配置文件有多个,需要手工配置。稍不注意就可能导致网络配置不成功。
下面以常见几例故障来分析。
首先需要简要弄清虚拟机中的三种网络工作模式,它们分别是:Bridged(桥接模式)、NAT(网络地址转换模式)、Host-Only(仅主机模式)。系统会为这三种工种模式分别虚拟出三种虚拟网 卡 即 VMnet0、VMnet8和VMnet1。
一、Bridged(桥接模式)
在此模式下,虚拟机和主机就好比插在同一台交换机上的两台电脑。如果主机连接在开启了DHCP服务的(无线)路由器上,这时虚拟机能够自动获得IP地址。如果局域网内没有提供DHCP服务的设备,那就需要手动配置IP地址,只需仿照主机网卡的IP地址,设置一个同网段的不同的IP地址即可。
注 意 :VMnet0其实是物理网卡上的VMware bridge protocol桥接协议,它是不会出现在本地网络连接上,打开本地连接或其他无线网卡的属性,看下是否有这个协议,有的话就有桥接模式!
【网卡无法正常启动】
1.克隆系统网卡配置信息不对称
【故障现象】
Device eth0 does not seem to be present,delaying initialization.
【故障分析】
Linux(Centos-6.5)虚拟机克隆后,启动系统发现网卡无法启动,然后输入命令“ifup eth0”会提 示“Device eth0 does not seem to be present,delaying initialization”,翻译过来即设备eth0似乎不存在,延迟初始化。原因是系统克隆后保留了之前的网络配置信息,其中重要一个参数就是网上的物理地址即MAC,而克隆的系统在启动时会随机生产一个新的网卡MAC,与配置文件不匹配,导致网卡初始化失败。
【故障排除】
在“虚拟机设置”对话框的“网络适配器→高级配置”选项中(如图1所示),查看克隆系统网卡初始化的MAC,然后在网络配置文件中进行相应修改。
[root@yum ~]# vim /etc/sysconfig/networkscripts/ifcfg-eth0
将 DEVICE=”eth0″ 改成 DEVICE=”eth1″ ,
将 HWADDR=”08:00:27:7e: 8c:e7″改成上面的MAC地址
HWADDR=” 00:0C:29:14:F7:39″
重新启动网络:service network restart
2.NetworkManager和network冲突
【故障现象】
重启网络服务时,[root@HBZJ /]# service network restart
图1 网络适配器高级设置
Error: Device not managed by NetworkManager or unavailable
或者重启网卡设备时,[root@HBZJ /]# ifup eth1
Error: Connection activation failed: The connection is not for this device.
【故障分析】
对于初学者来讲,一般是采用系统的默认配置,在LINUX中,之前的网络连接配置是能过ifcfg配置文件的编辑来进行,当然系统也提供了一个SETUP程序来进行简单图形化的操作,不管是哪种方式都是配置文件的修改,让它生效。
现在Linux为了加强网络连接的管理,方便用户(特别是习惯了Windows操作)对各种网络配置又增加了NetworkManager软件,它也支持传统的ifcfg 类型配置文件。核心是 NetworkManager守护进程,还提供了命令行工具 nmcli,以及图形界面配置工具。
我们用户最直观的感受如果启用了NetworkManager服 务,在系统右上角就会出现像Windows一样的网络连接图标,然后可以直接利用图形界面进行网络各种配置。ifcfg类型配置文件中有一个重要参数“NM_CONTROLLED="yes"”, 这 决定是否可以由NNetwork Manager托管,意味着通过软件可以直接修改ifcfg配置文件。
但是对于极度依赖网络、经常进行远程管理的系统管理员来说,这东西就是一个灾难。当系统管理员按以前的习惯,在远程连接的终端上,修改ifcfg配置文件时,如果内容不完全正确,有很大概率导致网络中断(重要原因是当前配置文件是实时生效的),导致远程连接死机,无法进行任何操作,管理员只能到机房去(如果幸运,离机房比较近的话),到服务器的Console终端来进行修改。
【故障排除】
关闭NetworkManager服务
# chkconfig NetworkManager off --永久关闭服务,需要重启
# service NetworkManager stop --立即关闭服务,不需要重启
注意:配置linux网络IP的时候,设置ifcfg-eh0文件就行了,这是系统级别的,而在图形界面手工配置的IP设置,是用户级别的,且重启后,系统会优先加载系统级别的配置,建议关掉图形界面配置,即关闭NetworkManager服务。
【网卡能正常启动,但无法获取IP地址】
1.桥接网卡选择错误;
【故障现象】
图2 系统网络服务启动
图3 桥接模式网卡选择
图4 NAT模式拓朴图
能够通过ifconfig命令显示网卡的基本信息,但唯独没有IP 地址相关信息,进行网络服务重新启动,如图2所示,系统一直在获取网卡的IP配置信息。
【故障分析】
根据经验,应该是DHCP服务的问题,查看系统日志(/var/messages)发现提示“NO DHCPOFFERS received”,然后获取IP都是失败。但检测物理机上的IP地址是可以正常获取的,分析很有可能就是在桥接模式配置上了。进入到虚拟机的桥接配置界面一看真相大白,如图3所示。可能由于人为误操作,导致桥接网卡配置到了虚拟网卡上了。
【问题探讨】
桥接模式不是跟直接通过物理网卡模拟一台真实的设备,为什么还要设计这样一个网卡的选项,还容易出错?其实这样设计是为了应对物理机上可能安装多块网卡,连接到不同的网络,这种情况下就要根据实际情况下桥接到不同的网卡了。
【故障排除】
只要选择桥接到物理网卡上,然后重新启动网络服务即可。
二、NAT(网络地址转换模式)
NAT模式与VMnet8虚拟网卡进行通信,从主机的“VMWare Virtual Ethernet Adapter for VMnet8”虚拟网卡出来,连接到VMnet8虚拟交换机,虚拟交换机的另外的口连接到虚拟的NAT服务器(这也是一个VMware组件),还有一个口连接到虚拟DHCP服务器,其他的口连虚拟机,虚拟机的网关即是“VMWare Virtual Ethernet Adapter for VMnet8”网卡所在的机器,就是你的Host机器(如图4所示)。
同 样,用ipconfig也可以看出来,你的虚拟机的默认网关也指向了你的“VMWare Virtual Ethernet Adapter for VMnet8”虚拟网卡地址。
【故障现象】
VMnet8虚拟网卡没有启动。
【分析排错】
这个需要在虚拟机里作配置才有的,在虚拟网络配置器里将 VMnet8进行NAT模式配置,要“将主机虚拟适配器连接到此网络”和“使用本地DHCP服务将IP地址分配给虚拟机”两项全部选中,这样才会在本地网络配置中出现VMnet8虚拟网卡。
【故障现象】
VMnet8虚拟网卡能正常配置启动。但系统启动后无法获取IP。
【分析排错】
Windows系统服务中的VMware DHCP Service服务项没有正常启动,从而导致虚拟机客户端无法正常获取IP,重新启动该服务即可。
【故障现象】
能够正常获取IP,但无法访问外网。
【分析排错】
Windows系统服务中的VMware NAT Service服务项没有正常启动,从而导致虚拟机客户端没有与外网连接的路径,重新启动该服务即可。
【故障现象】
能够通过IP访问外网,不能进行域名解析访问。
【分析排错】
这是虚拟机系统上DNS配置错误引起的,ifcfg类型配置文件中有一项关于的DNS配置,默认情况下是没有配置,它会根据DHCP自动获取相关DNS,如果人为修改造成一个错误的DNS服务地址,这就将导致域名解析错误。
有的用户认为可以修改/etc/resolv.conf配置文件来配置本的DNS服务,其实这个选项是根据网卡配置文件来,所以会发现配置完重新启动会丢失,又回到之前的配置。这主要是系统域名解析的优先级是“hosts文件”→“网卡配置文件”→ “/etc/resolv.conf”,所 以 如果网卡配置文件的DNS选择没有更改过来,始终不会更改成功。
要么更改网卡配置文件中DNS选项为正确的IP指向,或者直接注释掉该选项,系统会用默认网关作为DNS,虽然在配置文件中看不到,但 在“/etc/resolv.conf”配置文件中会发现DNS已经同步到默认网关了。