虛擬機centos7 識別不出網卡的解決方案


問題提出

之前在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!!!成了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM