问题提出

之前在VMware安装centos 7(网络连接采取Nat方式),进入Centos 7后成功开启了sshd服务,然后在主机(我的windows系统)用puTTY软件可以ssh到虚拟机上。后来在用华为模拟软件ensp配置路由器时,因为需用到(虚拟/真实)网卡来连接外网,我在弄的时候不小心将VMnet8的配置搞乱了。所以,再次打开虚拟机时,我的Centos居然连不上网了!

于是,我一步步排查,终于找到了原因,并解决了识别不出网卡问题。

在这篇博客中,我将完成两件事:

  1. 解决上网问题;
  2. 开启sshd服务,让主机ssh到虚拟机上。

解决上网问题

虚拟机网络初始配置

我的虚拟机是采取NAT方式联网的。注意:如果你是使用Host-only或者桥接方式,这篇文章可能只能给你提供一个思路。

寻找问题原因

出现不能上网,一般我们会检查是不是VMware本身的网卡是不是有问题。我检查了几遍,并且另外安装一个centos 7系统,发现能上网。所以100%肯定是我这个Centos 7系统网络设置有问题!所以我先查看一下电脑有没有获取到正确的ip。于是,首先想到的命令是:ifconfig:

[root@localhost ~]# ifconfig
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 448 bytes 38976 (38.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 448 bytes 38976 (38.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:11:c6:c2 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

上面列出的lo(loopback)网卡是用于环回地址的。virbr0是网桥的网卡。而我们需要的是与VMnet8对应的那张网卡。

下图是在windows打开网络设置页面看到的。其中有两张虚拟网卡:

  1. VMnet1对应仅主机模式;
  2. VMnet8对应Nat模式,也就是我们在Centos 7中需要的与之对应的网卡

很明显,那张网卡还没开启。于是,我给ifconfig加一个参数-a:

[root@localhost ~]# ifconfig -a
ens33: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 00:0c:29:bd:21:c3 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 448 bytes 38976 (38.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 448 bytes 38976 (38.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:11:c6:c2 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0-nic: flags=4098<BROADCAST,MULTICAST> mtu 1500
ether 52:54:00:11:c6:c2 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

从输出中,我很快锁定了一张网卡:ens33。但我要测试到底是不是这张网卡。一般网卡的相关文件都是放在/etc/sysconfig/network-scripts/下:

[root@localhost ~]# ls -al /etc/sysconfig/network-scripts/ | grep ens33
-rw-r--r--. 1 root root 280 Nov 26 15:36 ifcfg-ens33

果然,就是它!!!先把它开启,然后在输入ifconfig命令查看:

[root@localhost ~]# ifconfig ens33 up
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet6 fe80::20c:29ff:febd:21c3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bd:21:c3 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 7 bytes 578 (578.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 460 bytes 39900 (38.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 460 bytes 39900 (38.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:11:c6:c2 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

开启之后,发现ens33这张网卡并没有获取到ip地址,网关等相关配置。到此,我们已经知道根本原因,就是Centos 7的网卡没有获取到ip!但现在ens33网卡已经开启,我想重启一下网络,看看能不能获取ip地址:

[root@localhost ~]# service network restart
Restarting network (via systemctl): Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details. [FAILED]

果然,还是失败了。我就想,为什么前几天安装得Centos系统不能上网,而现在安装的却能上网呢?中间只发生过一件可能影响网络的事:就是我更改过VMnet8的网络配置。


解决ip分配问题

经过搜索和排查,我发现在Centos系统上,管理网络的有两个工具:

  • network;
  • NetworkManager.

我去红帽官方查看了一下,找到了一篇post。我就简单说一下什么是network和NetworkManager:

  1. network: Network initscript是一个基本的网络接口start/stop框架,它是initscripts包的一部分;
  2. NetworkManager: NetworkManager是一套协作网络管理工具,旨在消除手动编辑网络配置文件的繁琐,使网络简单直接。 NetworkManager提供灵活的管理界面,包括GUI,CLI和TUI选项,用于管理本地,远程连接等等。
  3. 在系统启动过程中,NetworkManager的优先级大于network。也就是说NetworkManager先启动。

稍微总结一下,就是说NetworkManager比network更先进,启动顺序也在network前。我就有了一个大胆的猜想(注意,下面的一段话只是个人YY,请批判性阅读):

由于我们是虚拟机环境,外面的虚拟网卡已经有能力通过dhcp等协议将网络ip等必要东西分配好,而且networkManager是新的东西,可能在虚拟机上兼容不太好。你平时用不影响,但一旦你更改了VMnet8等相关虚拟网卡,NetworkManager可能识别不出,就无法分配到ip,而且由于它先启动,然后它挂了,但它还在占用这个分配ip的功能,进而network无法顶替,也就是冲突了。

接下来,我要关闭NetworkManager:

[root@localhost ~]# systemctl stop NetworkManager    //停止NetworkManager
[root@localhost ~]# systemctl disable NetworkManager //进制开机启动
Removed symlink /etc/systemd/system/multi-user.target.wants/NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.NetworkManager.service.
Removed symlink /etc/systemd/system/dbus-org.freedesktop.nm-dispatcher.service.

此时,你会发现你电脑的网络GUI不见了(因为你关闭了NetworkManager):

做完这些,输入ifconfig看一下:

[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.43.129 netmask 255.255.255.0 broadcast 192.168.43.255
inet6 fe80::20c:29ff:febd:21c3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bd:21:c3 txqueuelen 1000 (Ethernet)
RX packets 261 bytes 16686 (16.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 28 bytes 4549 (4.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

Bingo!!!成了。

虚拟机centos7 识别不出网卡的解决方案的更多相关文章

  1. 【VMware虚拟机】【克隆问题】在VMware 9.0下克隆CentOS6.5虚拟机无法识别eth网卡

    [日期]2014年4月23日 [平台]windows 8 vmware workstation 9.0 centos 6.5 [日志]1)执行ifconfig命令,输出: 2)查看/etc/udev/ ...

  2. vmware创建虚拟机不识别网卡

    今天在给虚拟机添加网卡的时候,出现了虚拟机不识别新加的网卡,很纳闷,连的一样的端口组,为什么新加的网卡识别不了呢 然后查看pci设备,发现网卡的驱动为 AMD 79C970 PCnet32- LANC ...

  3. VMware虚拟机无法识别U盘解决方案

    1. 本机情况: Win7操作系统,VMware虚拟机,虚拟机版本:VMware 7.1,安装Ubuntu10.10,现要求在主机上插入U盘,在虚拟机中显示.   2. 遇到问题: U盘只在Win7主 ...

  4. CentOS7内置Realtek网卡驱动r8169降级r8168

    前几天装了几台服务器测试,在使用的过程中发现,每次重启系统,登录界面会弹出网卡提示  "r8169 0000:02:00 eth0 Invalid ocp reg 17758!" ...

  5. 【原创】如何设置Virtual Box虚拟机CentOS7为静态IP地址

    如何设置Virtual Box虚拟机CentOS7为静态IP地址 最近要搭建一个Kubernetes集群,需要设置虚拟机为静态IP地址不变.翻了一些资料,参差不齐,有些也比较过时了.自己实测总结了一下 ...

  6. Centos7 / RHEL 7 双网卡绑定

    http://www.cnblogs.com/hukey/p/6224969.html 1. 简要    双网卡绑定技术在centos7中使用了teaming技术,而在rhel6/centos7中使用 ...

  7. CentOS7下,安装网卡驱动,命令行手动连接WIFI指导

    买了一个无线网卡,型号为TL-WN823N,谁知道在CentOS下没有驱动 于是开始了无线上网的漫漫征途 经历了无数个坑啊,解决了一个又一个的问题啊 到最后ping通的时候成就感简直爆棚 文章结构简介 ...

  8. 虚拟机Linux与本地虚拟网卡配置---NAT链接方式

    虚拟机Linux与本地虚拟网卡配置---NAT链接方式 **********这是我亲自尝试多次实践出来的结果,不是复制粘贴************************* 首先进行初始化,这样避免有 ...

  9. 【原创】主机不能访问虚拟机CentOS7中的站点

    主机不能访问虚拟机CentOS7中的站点 ================================ 虚拟机上装好了centos7,并配好了nginx+php+mysql,但是本机就是无法访问. ...

随机推荐

  1. [数据库] MariaDB安装及使用

    一.安装MariaDB 1.使用官方源安装marisdb 如果使用阿里云的源,目前的版本号为5.5.64.如果想安装最新的10.x版本,则需要使用MariaDB的官方源. 1)配置官方源: 在/etc ...

  2. 一行代码解决 sql语句 in传入数组变字符串

    --数组 var arrs= ['test1','test2','test3'];--变字符串 var instring = "'"+arrs.join("','&quo ...

  3. Spring Boot 集成 Swagger2 教程

    上篇讲过 Spring Boot RESTful api ,这篇简单介绍下 SwaggerUI 在 Spring Boot 中的应用. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可 ...

  4. Vue 实现全局使用sass, less变量

    首先   运行这行命令 npm install sass-resources-loader --save-dev: 在项目的build/utils.js中,找到 function generateLo ...

  5. 吴裕雄--天生自然Numpy库学习笔记:NumPy 高级索引

    import numpy as np x = np.array([[1, 2], [3, 4], [5, 6]]) y = x[[0,1,2], [0,1,0]] print (y) import n ...

  6. MySQL自动备份实战--xtrabackup备份

    MySQL数据备份企业实战.制作shell脚本 功能1:使用xtrabackup以每周为一个备份周期做备份(数据库+二进制日志,备份至本地/data/backup).提示: 周一某个时间点做一次完全备 ...

  7. 刚下载好的 vscode 不能运行,一片黑 以及终端不能输入 解决办法

    1.鼠标右键vscode快捷方式点击属性,选择兼容性,勾选以兼容模式运行,下拉列表调整为windows vista (service pack 1)即可解决. 2.如果打开终端不能输入命令,首先点击属 ...

  8. Python 基础之面向对象之异常处理

    一.认识异常 1.常用异常报错的错误类型 IndexError                索引超出序列的范围 KeyError                  字典中查找一个不存在的关键字 Na ...

  9. js中的原生Ajax和JQuery中的Ajax

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). js中的Ajax: 参数介绍: open(String method,Str ...

  10. JS原型链的理解和使用(二)

    根据在创建对象的时候,创建出来的对象的__proto__指向创建这个对象的函数的prototype属性. 由于在调用对象的属性或者方法的时候会首先在对象的作用域中查找指定的属性或者方法,如果未找到则会 ...