VMWare系列-虚拟机网络异常问题排查

前面几句废话

最近因为租用的一台云服务器快要到期了,不准备再续费了。想把线上的一些数据备份到本地的虚拟机上,正好本地有一台已经安装好系统的 VMWare 虚拟机,跟云服务器的操作系统一样,想偷个懒直接启动来用。没想到重新配置了IP 之后,网络竟然不通,从配置检查到问题分析,折腾了一个多小时,故记录一下今天踩的坑。

问题现象

宿主机和虚拟机之间的网络不通,ping 不通。重启虚拟机网络之后,网卡报错如下:
“Failed to start LSB: Bring up/down”网络报错。

使用提示命令

1
systemctl status network.service

查看可以发现错误行:

1
2
3
4
[root@VM-0-9-centos ~]# systemctl status network.service
● network.service – LSB: Bring up/down networking
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2024-10-30 13:24:37 CST; 16s ago

networks.png

问题分析

回顾操作过程,原本可用的网络,经过了一次修改IP,运行过一段时间,再启动反而出现问题了。那么这个异常很可能跟这次修改IP有关系,开始排查配置文件。

根据排查情况分析下来,这样造成的原因是配置文件中 MAC 与当前网卡MAC 不一致,配置多网卡的 VMWare 虚拟机容易出现这个问题。具体原因不详,如有了解的朋友,还请不吝赐教。

简单粗暴的解决方案,修改一下配置文件即可解决问题。

解决当前问题的方法

  • 方法1:修改MAC地址

实际使用的MAC地址和配置文件的MAC地址不匹配,直接修改/etc/sysconfig/network-scripts/ifcfg-eth0 和/etc/udev/rules.d/70-persistent-net.rules 文件的 MAC 地址一样就好了。

1、用命令查看当前MAC地址

1
ifconfig -a

2、修改/etc/sysconfig/network-scripts/下以ifcfg开头的网络链接文件

例如我环境的这个配置文件是ifcfg-eth1:

1
vim /etc/sysconfig/network-scripts/ifcfg-eth0

将 HWADDR=”52:54:00:59:76:e8” 改为 HWADDR=”bc:24:11:85:b8:d6”

3、systemctl restart network.servic重启网络成功,再次查看状态即可正常。

  • 方法2:禁用NetworkManager

在CentOS系统上,目前有NetworkManager和network两种网络管理工具。如果两种都配置会引起冲突,而且NetworkManager在网络断开的时候,会清理路由,如果一些自定义的路由,没有加入到NetworkManager的配置文件中,路由就被清理掉,网络连接后需要自定义添加上去。

network 和 NetworkManager 服务有冲突,这个好解决,直接关闭 NetworkManger 服务就好了,并且禁止开机启动,之后重启就好了。

1
2
3
systemctl stop NetworkManager

systemctl disable NetworkManager

重启之后,网络恢复正常。

网上找到的其他方法

  • 方法3:修改网卡文件名

上面两种操作都可以正常完成。这个方法是在网上查的方法,看起来相对复杂一点儿,原理跟方法1一样,但是是反过来修改硬件信息的,暂时未做验证,列出来仅供参考。

1、修改网卡名和配置文件

1
mv /etc/sysconfig/network-scripts/ifcfg-enoeno9 /etc/sysconfig/network-scripts/ifcfg-eth0

修改配置文件里面name和device

1
vi /etc/sysconfig/network-scripts/ifcfg-eth0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
NAME=eth0
UUID=d890d6e6-01f6-4063-bf70-cd4e1787d0a8
HWADDR=bc:24:11:85:b8:d6 #这里原文件没有,手动添加上去
DEVICE=eth0
ONBOOT=yes
IPADDR=IP
NETMASK=掩码
GATEWAY=网关

2、修改/etc/sysconfig/grub,添加net.ifnames=0 biosdevname=0

1
vi /etc/sysconfig/grub
1
2
3
4
5
6
7
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=”( s e d ‘ s , r e l e a s e . ∗ (sed ‘s, release .*(sed‘s,release.∗,g’ /etc/system-release)”
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT=”console”
GRUB_CMDLINE_LINUX=”crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap net.ifnames=0 biosdevname=0 rhgb quiet”
GRUB_DISABLE_RECOVERY=”true”

3、手动生成70-persistent-net.rules以及其他方法

查看接口的MAC地址

1
ip link show
1
2
3
4
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno16777728: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
link/ether bc:24:11:85:b8:d6 brd ff:ff:ff:ff:ff:ff

生成文件

1
vi /etc/udev/rules.d/70-persistent-net.rules
1
SUBSYSTEM==”net”, ACTION==”add”, DRIVERS==”?”, ATTR{address}”00:0c:29:28:ac:54″, ATTR{type}”1″, KERNEL==”eth”, NAME=”eth0″

最后重启机器:

1
init 6

系统启动后网络可恢复正常。

也有帖子说执行 ip addr flush dev eth0 结果就好了,可以有朋友试过?

方法千千万,能有一个解决问题就好。

结束

又踩了一个坑。