问题描述
在虚拟机中版本VMware 17.5.1,linux环境centos7.9 使用的是NAT方式,连接不到外网的解决方案,原因是网络服务冲突,CentOS 7 开始从传统的 network
服务向 NetworkManager
过渡 ,传统 network 服务 与 NetworkManager 服务 同时运行,导致资源竞争,在较新的 CentOS 8/9 中,已经完全转向 NetworkManager,这种问题就很少见了。
之前能ping通外部网络的都有ens33网络模块,会有一个局域网的ip,类似于192.168.31.143这样的ip模块,这个不存在。
bash
[stark@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 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: 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:a3:0e:0f 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
解决步骤
1、清理冲突进程
停止了所有可能冲突的服务和进程,为重新配置提供了干净的环境
bash
sudo systemctl stop NetworkManager
sudo systemctl stop network
sudo pkill dhclient
2、重置接口状态
清除了可能存在的旧 IP 配置,重置了网络接口的软件状态
bash
sudo ip addr flush dev ens33
sudo ip link set dev ens33 down
3、检查网络配置文件
bash
sudo cat /etc/sysconfig/network-scripts/ifcfg-ens33
//确保内容如下:
TYPE=Ethernet
BOOTPROTO=dhcp
NAME=ens33
DEVICE=ens33
ONBOOT=yes
4、重启网络服务
bash
# 先启动 NetworkManager
sudo systemctl start NetworkManager
# 等待几秒后启动 network 服务
sudo systemctl start network
5、如果仍然失败,使用 NetworkManager 直接管理
bash
# 禁用传统的 network 服务
sudo systemctl disable network
# 启用 NetworkManager
sudo systemctl enable NetworkManager
sudo systemctl start NetworkManager
# 使用 nmcli 配置网络
sudo nmcli connection delete ens33 2>/dev/null
sudo nmcli connection add type ethernet con-name ens33 ifname ens33
sudo nmcli connection up ens33
6、手动获取 IP 地址
bash
# 启用网络接口
sudo ip link set ens33 up
# 强制释放并重新获取 IP
sudo dhclient -r ens33
sudo dhclient -v ens33
# 检查是否获取到 IP
ip addr show ens33
7、验证
bash
[stark@localhost ~]$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.31.143 netmask 255.255.255.0 broadcast 192.168.31.255
inet6 fe80::20c:29ff:fe78:2946 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:78:29:46 txqueuelen 1000 (Ethernet)
RX packets 147 bytes 27275 (26.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 27 bytes 4553 (4.4 KiB)
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 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: 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:a3:0e:0f 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
至此,完美解决了VMware 不能访问外网的问题!