問題提出
之前在VMware安裝centos 7(網絡連接采取Nat方式),進入Centos 7后成功開啟了sshd服務,然后在主機(我的windows系統)用puTTY軟件可以ssh到虛擬機上。后來在用華為模擬軟件ensp配置路由器時,因為需用到(虛擬/真實)網卡來連接外網,我在弄的時候不小心將VMnet8的配置搞亂了。所以,再次打開虛擬機時,我的Centos居然連不上網了!
於是,我一步步排查,終於找到了原因,並解決了識別不出網卡問題。
在這篇博客中,我將完成兩件事:
- 解決上網問題;
- 開啟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打開網絡設置頁面看到的。其中有兩張虛擬網卡:
- VMnet1對應僅主機模式;
- 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:
- network: Network initscript是一個基本的網絡接口start/stop框架,它是initscripts包的一部分;
- NetworkManager: NetworkManager是一套協作網絡管理工具,旨在消除手動編輯網絡配置文件的繁瑣,使網絡簡單直接。 NetworkManager提供靈活的管理界面,包括GUI,CLI和TUI選項,用於管理本地,遠程連接等等。
- 在系統啟動過程中,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!!!成了。
