ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

虚拟机ping不通怎么办?VMware网络配置排查全攻略

虚拟机ping不通怎么办?VMware网络配置排查全攻略 玩虚拟机的人九成都在“ping不通”上卡过壳。我还在用VMware折腾Ubuntu那阵子光是让虚拟机ping通百度就在网卡模式、IP地址、防火墙之间反复横跳了大半天后来翻了一堆资料才发现问题往往就出在几个特别基础的环节上。这篇文章我把虚拟机网络配置里最常见的几类“ping不通”原因按排查顺序整理出来每个问题都配套解决办法希望能帮你少走弯路尤其是刚接触VMware、Ubuntu网络配置、CentOS网络配置、XShell连接这类操作的新手值得完整读一遍。1. 先别急着敲命令梳理ping不通的排查主线遇到ping不通最忌讳的是东戳一下西戳一下一会儿改IP一会儿关防火墙最后一顿操作猛如虎问题却没解决反而把原本能通的配置给弄乱了。我个人的习惯是先不碰任何配置花两分钟把“一条ping命令背后要经过哪些环节”想清楚再从最底层逐层往上排查。1.1 一台虚拟机的网络要“通”至少需要哪几个环节很多人把ping不通笼统归为“网络没配好”但“网络没配好”其实是一个很模糊的说法。一次ping请求从虚拟机发出去到收到响应至少要经过这么几层第一层是链路层。虚拟机里面的网卡要通过VMware虚拟出来的交换机VMnet1、VMnet8这些和宿主机连在一起。如果虚拟网卡没启用、VMware的虚拟网络服务没运行或者Windows设备管理器里的VMnet网卡带了感叹号那后面无论IP怎么配都是白搭。第二层是网络层。虚拟机要有IP地址、子网掩码、网关。IP不在同一个网段网关配错路由表不对都会导致ping根本找不到路。第三层是传输层与应用层。ping使用ICMP协议虽然它不像TCP/UDP那样需要端口但主机的防火墙规则经常会把ICMP报文拦掉这个时候“能通”和“能ping通”是两码事。我在排查的时候常把这几个环节总结成一句话“先看网卡再看IP然后看网关最后看防火墙”。顺序不能乱因为上层的问题往往被下层的错误掩盖比如你花半天去调防火墙结果IP根本没配上这就不合理。1.2 我习惯用的排查顺序从“最近”到“最远”这里说的“近”和“远”指的是从虚拟机自身出发到目标地址之间的网络距离。我的排查顺序是这样的第一步在虚拟机里执行ip addrLinux或ipconfigWindows确认网卡有没有UP有没有拿到IP地址。注意看IP是不是169.254.x.x这种以169.254开头的地址如果是说明DHCP没有分配到地址网卡状态多半有问题。第二步在虚拟机里ping自己的IP地址。这一步用来验证本机协议栈是否正常如果连自己都ping不通说明TCP/IP协议栈或网卡驱动有严重问题这时候就别考虑外面的网络了先修网卡。第三步在宿主机的命令行里执行ipconfig确认VMnet8NAT模式或VMnet1仅主机模式的IP地址和虚拟机使用的网段是否一致。如果不一致虚拟机自然ping不通宿主机。第四步在虚拟机里ping网关地址。VMware NAT模式下的网关默认是VMnet8网段的.2这个地址如果网关ping不通说明NAT服务或路由没起来外网基本免谈。第五步在虚拟机里ping外网地址比如先ping一个公网IP再ping一个域名。如果公网IP能通但域名不通问题就出在DNS上这时候修改DNS配置即可。1.3 用一张“分层对照表”快速定位故障面为了更直观我把不同现象和故障面做成了一张对照表排查的时候对着表看能少走很多弯路。测试操作现象大概率故障层ping 127.0.0.1不通网卡驱动、协议栈ping 本机IP不通网卡驱动、IP配置ping 宿主机IP不通网段、虚拟网卡、宿主机防火墙ping 网关不通NAT服务、路由、VMnet配置ping 公网IP不通NAT服务、物理网卡、运营商网络ping 域名公网IP通但域名不通DNS配置XShell连接虚拟机失败网络通但连不上SSH服务、22端口防火墙这张表是压缩版后面我会针对最典型的几类问题把原因和具体操作步骤展开讲。2. 最基础的坑IP地址没配对你和宿主机的网段都不在一起先聊一个最土但出现频率最高的原因虚拟机虽然启动了但里面压根没有配置一个合法的IP地址或者IP地址所在的网段和宿主机不在同一个网络里。这类问题表现得很典型虚拟机里ip addr一看网卡确实存在但没有IP或者在Windows虚拟机里IP地址是169.254开头的自动专用地址。2.1 先确认虚拟机到底拿到地址没有很多人装完虚拟机系统进系统就直接敲ping www.baidu.com发现报错“Name or service not known”或者“Destination Host Unreachable”然后就开始慌。其实这时候最该做的是先看一眼网卡状态。在Ubuntu里执行ip addr重点看网卡名称是多少是ens33、ens160还是eth0。不同虚拟机环境、不同系统版本网卡名可能不一样。关键是看它下面有没有inet这一行比如inet 192.168.88.128/24如果有说明DHCP已经分到了地址如果只有inet6没有任何IPv4地址那说明IPv4地址没配置成功。CentOS 7里也可以执行ip addr或者用ifconfig如果装了net-tools。很多云镜像或者精简安装的系统默认不开DHCP或者NetworkManager没有接管网卡就会出现有网卡但没地址的情况。Windows虚拟机就简单了在命令提示符里执行ipconfig只要看到“IPv4地址”那一行的值不是169.254开头的就说明地址没问题。如果地址是169.254开头的说明网卡在尝试DHCP获取地址时失败了这时候优先检查VMware虚拟网卡是否被禁用或者DHCP服务是否运行。2.2 NAT模式下VMnet8网段怎么找静态IP怎么设如果DHCP拿不到地址或者你想手动设置静态IP那就必须知道VMware的NAT网段到底是什么。很多人在这里习惯随便填一个IP比如192.168.1.100结果发现ping不通原因是VMware的NAT网络默认是192.168.x.0/24但那个x具体是多少由虚拟网络编辑器里的VMnet8决定。在VMware Workstation里打开“编辑”菜单选择“虚拟网络编辑器”在弹出的窗口里选中VMnet8NAT模式下面会显示子网IP和子网掩码通常是192.168.x.0子网掩码255.255.255.0。这个x可能是88、96、166之类的任意值每个电脑都可能不一样。记住这个网段然后设置虚拟机IP时就必须从同一个网段里选一个地址。以Ubuntu 20.04为例配置文件是/etc/netplan/下的yaml文件。我常用的配置是这样network: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.88.100/24 routes: - to: default via: 192.168.88.2 nameservers: addresses: - 192.168.88.2 - 223.5.5.5注意这里的网关地址VMware NAT模式默认把网关放在子网IP的.2位置也就是和虚拟网络编辑器里看到的子网IP最后一位换成2。DNS我一般会填两个一个是网关地址一个是公共DNS避免因为只配了网关导致域名解析失败。配置完成后执行sudo netplan apply让配置生效。CentOS 7的配置方式不一样路径是/etc/sysconfig/network-scripts/ifcfg-ens33TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.88.100 NETMASK255.255.255.0 GATEWAY192.168.88.2 DNS1192.168.88.2 DNS2223.5.5.5改完执行systemctl restart network或者如果开启了NetworkManager也可以用nmcli con reload配合nmcli con up ens33来重载。这里有个常见坑CentOS 7里NetworkManager和network服务常常同时存在你改了ifcfg文件但不重启服务可能不生效或者重启系统后配置被NetworkManager覆盖。建议改完先执行nmcli device reapply ens33试一下不行就重启network服务再不行就直接reboot验证。2.3 拿到地址还是ping不通检查虚拟网卡有没有被禁用还有一种情况特别容易忽略就是Windows宿主机里的VMware虚拟网卡被禁用了。我帮别人排查的时候经常看到“VMnet1”和“VMnet8”这两个网卡在Windows网络连接里显示“已禁用”甚至有的机器上根本找不到VMnet8。VMware的NAT模式依赖VMnet8这个虚拟网卡。如果它在宿主机的网络适配器里是禁用状态或者设备管理器里带了黄色感叹号虚拟机即使IP配置正确也无法和宿主机通信更别说上网了。解决办法是在Windows的“网络连接”里找到VMware Network Adapter VMnet8右键启用。如果网卡图标有感叹号去设备管理器里把VMware虚拟网卡驱动卸载然后右键扫描检测硬件改动让Windows重新安装驱动。装完VMware Tools之后这类问题会少很多。还有一点VMware Workstation 17的界面语言和菜单可能和旧版有点差异如果找不到“虚拟网络编辑器”可以试试用管理员权限重新打开VMware因为修改虚拟网络需要管理员权限。3. 本机都通外网不通网关、DNS、NAT服务挨个过局域网内能ping通比如虚拟机ping宿主机通了或者宿主机ping虚拟机通了但虚拟机ping不通百度这种“半通不通”的状态是最让人抓狂的。问题通常不在IP地址本身而在更上层的网关、DNS和NAT服务。这一节我把这三类原因拆开讲。3.1 用一条命令分清是网关问题还是DNS问题很多人一看到“ping: www.baidu.com: Name or service not known”就以为网断了其实这个报错的意思非常明确域名解析不了。注意它说的是“Name or service not known”不是“Network is unreachable”也不是“Request timed out”。这意味着网络层面大概率是通的只是DNS服务器没配好或者DNS服务器本身不可达。怎么验证先ping一个公网IP比如223.5.5.5ping -c 4 223.5.5.5我用这个IP是因为它是公共DNS长期稳定而且很多网络环境下都能直接通。如果能ping通说明NAT、网关、路由全部正常问题锁定在DNS解析。这时候去看/etc/resolv.conf或者重新设置nameserver。如果在Ubuntu 20.04里用的Netplan直接在nameservers的addresses里加上223.5.5.5、114.114.114.114这类公共DNS即可。如果连公网IP都ping不通那就不是DNS的问题而是网关或NAT层面出了问题。这时候在虚拟机里执行ip route或route -n看一下默认路由是否存在特别是default via那一条的地址必须和VMware NAT网关一致。如果没有默认路由多半是网关配错了或者DHCP分配时没有下发网关。3.2 VMware NAT服务和DHCP服务没启动外网必断这是一个非常隐蔽的坑尤其在Windows家庭版或者被各种安全软件“优化”过的电脑上经常出现。VMware的NAT上网依赖两个Windows服务VMware NAT Service和VMware DHCP Service。这两个服务的显示名称通常是“VMware NAT Service”和“VMware DHCP Service”服务名是VMware NAT和VMwareDHCP。如果你发现虚拟机可以ping通宿主机但怎么都ping不通外网而且网关地址也ping不通那八成是VMware NAT Service停了。打开Windows服务管理器WinR输入services.msc找到VMware NAT Service看一下启动状态。如果没启动右键手动启动并把启动类型改成“自动”。还有更隐蔽的情况VMware NAT Service虽然在运行但启动类型是“手动”系统重启后没自动拉起来这时候虚拟机就会从能上网变成不能上网很多人会怀疑是虚拟机系统的问题重装系统好几次才发现罪魁祸首在Windows服务。所以我的习惯是装完VMware的第一时间就检查这两个服务的启动类型确保都是“自动”。注意卸载或升级VMware后这两个服务可能会被重置为手动启动升级完成后建议再检查一次。3.3 防火墙和SELinux放不放行很多教程没告诉你Linux虚拟机里ping不通外网但网关也通、公网IP也通这种现象其实不太常见但确实存在。如果用的是CentOS/RHEL系列系统还要考虑防火墙和SELinux的干预。比如CentOS 7默认的firewalld会拦截ICMP的某些类型导致ping超时。你可以先临时关掉防火墙测试systemctl stop firewalld如果关掉防火墙之后ping通了说明就是防火墙规则的问题。不要为了省事永久关闭防火墙除非是纯内网测试环境。更好的做法是放行ICMP协议firewall-cmd --permanent --add-rich-rulerule protocol valueicmp accept firewall-cmd --reloadUbuntu系统则要留意ufw的状态执行sudo ufw status如果状态是active可以临时执行sudo ufw disable测试。如果确系ufw的问题可以执行sudo ufw allow 22/tcp等按需放行特定端口不建议直接禁用尤其是要跑服务的机器。SELinux对ping的影响相对少见但如果系统启用了强制模式且策略特殊也可能拦ICMP。排查时可以执行getenforce看状态临时用setenforce 0切到permissive模式测试。如果确认是SELinux拦的用ausearch -m avc查找对应拒绝记录再决定是否调整布尔值或规则而不是粗暴关闭SELinux。4. 桥接模式、XShell连接另外两类高频问题前面讲的都偏向NAT模式。但实际上还有两类问题也特别高频一类是桥接模式导致的网络不通另一类是虚拟机网络本身没问题但XShell这些SSH工具就是连不上。这两类问题和NAT模式的排查思路有较大差异单独拿出来说。4.1 桥接模式ping不通局域网设备先看绑定网卡有没有选对NAT模式是虚拟机通过宿主机的IP出去外面的设备看虚拟机就像看宿主机一样网络结构比较简单。桥接模式则像是让虚拟机和宿主机直接插在同一台交换机上虚拟机需要一个和宿主机同网段的IP由局域网里的路由器分配或手动指定。桥接模式最常见的问题是“桥接”到了错误的物理网卡上。在VMware的虚拟网络编辑器里选中VMnet0桥接模式右侧有个“桥接到”下拉框。很多人的宿主机同时有有线网卡和无线网卡如果VMware自动选择了一个当前没有联网的网卡虚拟机自然无法和局域网通信。比如你用WiFi上网物理网卡是WLAN但VMware桥接到了以太网卡那虚拟机无论如何都ping不通局域网路由器和其它电脑。解决办法就是进虚拟网络编辑器把VMnet0的桥接目标改成当前正在上网的那个网卡。然后虚拟机内部要配置和宿主机同网段的IP。宿主机ipconfig看到IP是192.168.1.5那虚拟机最好也配192.168.1.x的地址网关填192.168.1.1DNS也用192.168.1.1。配好之后先ping网关再ping局域网里的其它机器最后ping外网。还有一个比较阴间的坑路由器开启了AP隔离或者客户端隔离功能导致同一WiFi下的设备之间不能互相通信。这种情况表现是虚拟机可以ping通网关但ping不通局域网里的其它主机无论怎么调配置都没用。解决方法是登录路由器管理后台关掉“AP隔离”或“客户端隔离”不过有些环境的路由器不在自己控制范围内那就只能改用NAT模式。顺带说一句很多人学网络模拟器类似ensp这类环境的时候会在cloud设备里绑网卡想实现模拟器里的设备ping通外部设备其实原理和桥接模式一模一样cloud绑定哪张物理网卡模拟器里的设备就从哪张网卡出去IP网段必须和外部设备一致网关也要指向真实环境的路由器。4.2 从宿主机SSH进虚拟机连不上多半不是网络而是服务XShell连接不上Ubuntu虚拟机是另一个频率极高的求助帖主题。很多人第一反应是网络问题但实际上网络通常是通的问题出在虚拟机里根本没装SSH服务或者SSH服务没启动或者防火墙拦了22端口。排查思路很简单先在虚拟机里确认openssh-server是否安装并运行。Ubuntu执行systemctl status ssh如果提示Unit ssh.service could not be found说明没装执行sudo apt install openssh-server。装好后执行sudo systemctl enable --now ssh确保开机自启。然后确认防火墙。之前说过ufw如果ufw是开启状态需要放行22端口sudo ufw allow 22/tcpCentOS 7则是systemctl enable --now sshd firewall-cmd --permanent --add-port22/tcp firewall-cmd --reload确认服务正常后再到Windows主机上ping一下虚拟机IP如果能ping通再用XShell连接。如果XShell还是连不上但ping正常重点检查SSH服务的监听地址。看ss -tlnp | grep 22输出如果显示0.0.0.0:22说明监听在所有地址上没问题如果显示127.0.0.1:22那SSH只监听在回环地址上外部连接当然进不来。这种情况需要改/etc/ssh/sshd_config里的ListenAddress改成0.0.0.0然后重启ssh服务。另外还有一个容易被忽略的点桥接模式下虚拟机的IP地址是不固定的如果路由器租约时间到了虚拟机拿到了一个新IPXShell里面存的那个旧IP自然就连不上。所以要么在XShell里重新填当前IP要么在虚拟机里配静态IP或者给路由器做DHCP保留。4.3 Windows虚拟机的“能通但连不上”花样更多如果你是玩Windows 7虚拟机或者Windows Server虚拟机除了上面这些还要额外注意VMware Tools是否安装成功。VMware Tools里带有专门优化过的网卡驱动不装的话虚拟机可能显示网络已连接但实际通信不稳定甚至完全不通。我自己遇到过Windows 7虚拟机装完系统后网卡一直处于“网络电缆被拔出”的状态装好VMware Tools后立刻恢复正常。Windows自带的Windows防火墙也常常拦截ping默认状态下Windows的防火墙会拦截外部主机的ICMP回显请求导致宿主机ping不通虚拟机。如果你希望宿主机能ping通Windows虚拟机需要在虚拟机里放行“文件和打印机共享(回显请求 - ICMPv4-In)”这个入站规则。在控制面板的Windows Defender防火墙里进入“允许应用或功能通过Windows防火墙”勾选“回显请求”对应的规则。4.4 宿主机防火墙挡PING的快速放行法前面讲了很多虚拟机内部的防火墙但宿主机这一侧也别忘了。Windows宿主机默认也是拦ICMP入站的所以如果虚拟机ping不通宿主机而VMnet8网卡IP、网段又都对那多半是宿主机防火墙把ICMP挡了。快速判断方法在虚拟机里ping宿主机VMnet8的IP地址如果一直超时而在宿主机上直接ping虚拟机的IP却发现能通虚拟机的Linux默认回显ICMPWindows虚拟机则不一定那就说明单向有问题。这时候可以检查宿主机防火墙把“VMware Network Adapter VMnet8”这个网络连接所在的配置文件改为“专用”或者直接用管理员命令在Windows防火墙里放行ICMPnetsh advfirewall firewall add rule nameAllow ICMPv4-In protocolicmpv4:any,any dirin actionallow这个命令会添加一条入站规则允许外部主机向本机发送ICMP请求。测试完后如果不想长期放开可以用netsh advfirewall firewall delete rule nameAllow ICMPv4-In把这个规则删掉。5. 常见问题速查表与个人经验写到这里基本把虚拟机网络配置里绝大多数“ping不通”的原因都过了一遍。最后再把这些经验和热词里的高频问题整理成一个速查表方便你日后遇到问题时快速定位。5.1 一张表说清最典型的9个现象现象可能原因解决办法虚拟机 ping 百度Name or service not knownDNS未配置或DNS地址不可达ping公网IP验证修改DNS为223.5.5.5等虚拟机 ping 网关超时VMware NAT服务未启动启动VMware NAT Service并设为自动宿主机 ping 不通虚拟机宿主机Windows防火墙拦ICMP放行ICMPv4-In规则虚拟机 ping 不通宿主机VMnet8网段不一致或宿主机防火墙拦检查虚拟网络编辑器设定放行防火墙CentOS 7 改了网卡配置不生效NetworkManager与network服务冲突用nmcli重载或重启network服务Ubuntu 20.04 没有网卡IPnetplan配置未生效或未启用DHCP修改/etc/netplan/*.yaml后netplan applyUbuntu桥接模式上不了网桥接到错误的物理网卡虚拟网络编辑器里指定当前联网网卡XShell连接不上UbuntuSSH服务未安装或防火墙拦22端口安装openssh-server并放行22端口Windows虚拟机IP为169.254DHCP失败或虚拟网卡驱动异常检查DHCP服务重装VMware ToolsVMnet8 网卡带感叹号虚拟网卡驱动异常设备管理器卸载后重新扫描硬件这个表是从大量实际问题里总结出来的覆盖了热词里大部分情况剩下的一些边角问题比如“VM虚拟机没有网络适配器”“虚拟机安装Linux蓝屏”等前者通常是因为虚拟机设置里忘了加网卡设备后者多半是因为虚拟硬件版本和系统镜像不匹配或者VMware版本太旧升级到VMware 17这类新版本再关掉3D加速试试一般就能解决。5.2 我在实操中踩过的冷门坑文章最后分享几个正规教程里不太会写的冷门经验都是我自己踩过之后才悟出来的。第一个坑是虚拟机休眠恢复后网络假死。宿主机Windows如果睡眠或休眠了恢复之后有时候VMnet8的IP会漂移变成169.254开头的Windows保留地址这时候虚拟机NAT模式直接瘫掉。解决办法是在Windows网络连接里禁用再启用VMnet8网卡或者干脆重启VMware NAT Service服务。第二个坑是改了网卡硬件后Linux里的网卡名变了。比如你用磁盘克隆或者导入别人的ova模板原系统里叫ens33的网卡在新环境里变成了ens160结果/etc/netplan里写的还是ens33配置永久不生效。排查时看到ip addr输出里的网卡名和配置文件不一致改过来就行。第三个坑是批量测试大量机器时别只靠持续手动ping。Windows的ping命令默认发4个包就结束Linux的ping会一直发很多人按了几次CtrlC在测试很多台机器时非常累。可以写一个简单的循环脚本比如Windows下批量ping一个网段for /L %i in (1,1,254) do ping -n 1 -w 500 192.168.88.%i | find TTL echo 192.168.88.%i OKLinux下用fping或者自己写个for循环都可以。第三方工具“超级ping”这类软件本质也是把大量ping任务并行化原理并不复杂会写循环脚本就不一定需要它。第四个坑是VMware安装目录不能有中文或者特殊字符否则虚拟网络编辑器可能打不开或者打开后无法修改桥接设置。如果遇到“wmware 17虚拟机没有配置和打开选项”多半是这个原因或者当前用户权限不够。建议以管理员身份运行VMware再到“编辑——虚拟网络编辑器”里去操作。5.3 最后的建议我以前总觉得这类问题没什么含金量后来帮人排查多了才明白能把一条ping命令跑通背后反而是对整个网络链路最扎实的训练。虚拟机网络配置并不是玄学每一个现象背后都对应着明确的环节和原因只要按照“网卡-IP-网关-防火墙”的顺序逐层排查绝大多数问题都能在十分钟内定位。动手之前记得给虚拟机打个快照改配置失败了也能一键回滚。别嫌麻烦这比什么都好使。希望你看完这篇之后再遇到虚拟机ping不通能直接照着顺序把问题定位到对应的层而不是像我当年那样把所有网卡模式挨个试一遍最后靠重启解决了问题。
返回列表