ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Kali在VMware无法联网?从NAT到DHCP的完整排查与配置指南

Kali在VMware无法联网?从NAT到DHCP的完整排查与配置指南 Kali在VMware无法连接到网络配置网络及解决办法如果你在VMware里装了Kali Linux大概率遇到过这个场景系统能开机终端也能开但浏览器死活打不开网页ping外网一直超时ping网关也是“Network is unreachable”。我折腾这个问题的次数太多了今天把排查流程、配置方法和踩过的坑一次讲清楚。这篇文章适合刚在VMware里装好Kali、对网络配置还不熟的新手也适合遇到奇怪网络问题但不想重装系统的老手。先说结论VMware里Kali连不上网问题通常不在Kali本身而是出在三个层面——VMware的虚拟网络服务、虚拟机的网络适配器模式、Kali系统内的网卡配置。你需要按顺序排查而不是一上来就乱敲命令。我见过很多人卡在“Kali上不了网”这个问题上最后发现只是VMware的NAT服务没启动或者网卡没拿到IP地址十分钟就能搞定。这篇博文会从一个完整的实际场景出发带你走一遍从诊断到解决的全程包括VMware虚拟网络编辑器怎么设置、NAT和桥接模式怎么选、Kali里用NetworkManager和命令行怎么配置IP、DNS解析失败怎么处理以及一些不常见的坑。文章里的命令我都实测过复制就能用。1. 问题现象与排查思路1.1 先搞清楚“连不上”是哪种状态很多人一上来就说“Kali连不上网”但“连不上”其实分好几种。我建议你先打开终端跑几条命令确定自己属于哪种情况再对症下药。第一种是Kali里连IP地址都没有。用ip addr查看网卡信息如果你只看到lo回环接口或者看到eth0但下面没有inet开头的IPv4地址那说明DHCP客户端压根没从VMware虚拟网络里拿到IP。这种情况最常见十次里有六次是它。第二种是有IP地址但网关不通。执行ip route看路由表如果显示default via 192.168.x.1 dev eth0这类默认路由再ping 192.168.x.1如果网关不通说明VMware的NAT服务或虚拟网卡出了问题。第三种是网关能通但外网不通。ping 192.168.x.1没问题但ping 8.8.8.8超时这通常是VMware虚拟机网络里的“仅主机模式”造成的或者物理机本身的网络环境有限制。第四种是最气人的IP能ping通但浏览器打不开网页ping baidu.com显示“Temporary failure in name resolution”这是DNS配置问题不是网络不通。先花两分钟确认你属于哪一类后面就不用瞎折腾了。我最开始踩坑就是没搞明白就一通乱改最后把系统配置文件都改坏了只能重装。1.2 整体排查顺序从物理机到虚拟机排查这类问题顺序特别重要。我的习惯是从外层往内层查先确认物理机能上网再确认VMware的虚拟网络服务正常然后确认虚拟机的网络适配器连接方式正确最后才进Kali系统内调整配置。反过来操作会很难受比如你在Kali里改了半天的静态IP结果VMware的虚拟网络编辑器里网段都不对等于白干。具体来说物理机要检查的是自己的Wi-Fi或有线网是否正常这个通常没问题但也要确认一下。然后打开Windows的服务管理器看VMware相关的三个服务有没有启动分别是“VMware NAT Service”“VMware DHCP Service”和“VMware Authorization Service”。第三个服务如果你不是以管理员身份运行VMware经常是停着的它负责虚拟机的权限管理不是网络必需但前两个直接关系到NAT网络的通断。接着打开VMware的“编辑”菜单里的“虚拟网络编辑器”确认VMnet8NAT模式用的虚拟网卡的网段、网关、DHCP设置是否正常。最后才打开Kali用ip addr和ip route检查系统内网卡状态。按这个顺序查你会发现大部分问题在第二和第三步就能定位根本不用进系统折腾。2. VMware虚拟网络配置核心要点2.1 VMware三种网络模式怎么选VMware的网络模式看起来简单但很多人选错。虚拟网络编辑器里能看到VMnet0、VMnet1、VMnet8三个主要虚拟网络分别对应桥接模式、仅主机模式、NAT模式。理解它们的区别是解决网络问题的前提。桥接模式VMnet0相当于把你的虚拟机直接接到物理路由器上虚拟机和物理机在同一个局域网里有自己的独立IP可以从路由器DHCP获取地址。这种模式的好处是虚拟机对外是“真实存在”的机器适合要对外提供服务、要和局域网内其他机器直接通信的场景。但坏处是它依赖物理网络环境如果物理机用的是公司网或者需要认证的Wi-Fi虚拟机经常会拿不到IP或者网络波动很大。NAT模式VMnet8是VMware默认模式也是我最推荐新手使用的。虚拟机通过VMware虚拟出来的一个网关通常192.168.x.2来访问外部网络对外只占用物理机一个IP物理机能上网虚拟机就能上网。这种模式的好处是配置最简单、最稳定不用关心物理网络环境。缺点是从局域网外部无法直接访问虚拟机但对于做渗透测试、学习Kali的同学来说这个缺点压根不算事。仅主机模式VMnet1从名字就看得出来它只允许虚拟机和物理机之间通信虚拟机不能访问外网。如果你只想在Kali和Windows之间传文件、共享网络可以用这个模式但想联网就别选它。实际操作中80%的“Kali连不上网”问题就是有人把网络适配器模式改成了“仅主机模式”没有改回来。2.2 虚拟网络编辑器与VMware服务修复如果你的虚拟机选的是NAT模式但依然连不上网问题多半出在VMware的虚拟网络服务上。我之前遇到过一次很诡异的情况Kali一直提示“Network is unreachable”查了一圈最后发现是Windows里“VMware NAT Service”挂掉了重新启动服务就恢复正常。检查服务的命令是在Windows命令行里输入services.msc找到VMware开头的服务确保“VMware NAT Service”和“VMware DHCP Service”状态都是“正在运行”启动类型是“自动”。如果服务没在运行右键点击选“启动”即可。虚拟网络编辑器也经常出问题。打开VMware的“编辑”菜单选“虚拟网络编辑器”你会看到VMnet8的配置。这里需要注意几个点第一NAT模式必须勾选NAT设置并且网段不能和你的物理局域网冲突。比如物理机在192.168.1.x网段虚拟机的NAT网段最好用192.168.88.x或172.16.x.x这种不和物理网络冲突的网段否则会出现奇怪的“通一半”问题。第二DHCP设置要确保勾选“启用”地址池要合理。第三如果你把VMnet8删掉过或者虚拟网络编辑器里显示异常可以点“还原默认设置”按钮它会自动重建VMnet1和VMnet8。这个操作不会影响你已有的虚拟机只是重置虚拟网络配置。有一种情况比较隐蔽VMware的“VMware DHCP Service”启动失败你去服务管理器里启动它它又会自动停止。这通常是虚拟网络编辑器里的DHCP配置损坏了。解决方法是先打开“虚拟网络编辑器”把VMnet8的“使用本地DHCP服务将IP地址分配给虚拟机”这个选项取消勾选点击“应用”然后再勾选回来再点击“应用”。这个操作等于重新初始化DHCP配置我试过很多次管用。2.3 网络适配器检查与MAC地址问题在虚拟机设置里“网络适配器”选项也值得单独看一下。右键虚拟机点“设置”在“硬件”选项卡里选中“网络适配器”右侧会显示连接方式。确认这里选的是“NAT模式”并且勾选了“启动时连接”。如果“启动时连接”没勾选开机的虚拟机就默认没有网卡那不管系统内怎么配置都是白搭。还有一个不太容易想到的问题VMware在复制或移动虚拟机之后会生成一个新的MAC地址。如果你之前用的是静态IP配置旧MAC地址对应的网络配置就会失效。这不是大问题因为Kali默认用DHCP但如果你在/etc/NetworkManager/system-connections/里手动配置过网络连接记得检查一下绑定的MAC地址是否和当前网卡一致。可以在虚拟机设置里点“高级”把MAC地址改成“生成”模式让VMware每次自动管理省得跟配置里的MAC对不上。如果是做实验需要固定IP这反而要注意DHCP绑定MAC时虚拟机的MAC每次变IP就会一直变容易让人误以为网络配置错了。提示如果你刚在VMware里克隆了一个Kali虚拟机MAC地址冲突会导致网络时好时坏。建议新克隆的机器先到“网络适配器”的高级设置里点一下“生成”新的MAC地址再开机配置。3. Kali系统内网络配置实操3.1 快速恢复网络重启网卡与dhclient如果VMware侧都正常但Kali里还是没有IP那就得进系统操作了。先别急着改配置文件最快速的恢复方式是让网卡重新获取一次IP。# 查看网卡名称和状态 ip addr # 如果网卡处于DOWN状态使用下面的命令启用 sudo ip link set eth0 up # 给网卡重新获取DHCP地址 sudo dhclient eth0 # 查看是否拿到IP ip addr show eth0如果执行sudo dhclient eth0之后ip addr里出现了inet 192.168.88.x/24这样的地址说明问题已经解决了。网卡名不一定是eth0在Kali里也可能是ens33、ens32等名字以ip addr显示为准。有时候执行dhclient会卡住等十几秒钟没有反应那是它在等DHCP服务器的应答如果一直卡住说明VMware的DHCP服务有问题回到上一节检查。重启网卡的方式还有一种就是用nmcli我比较推荐这个因为Kali默认的图形桌面网络管理工具就是NetworkManager用nmcli重启网卡比ifconfig eth0 down/up更彻底同时它会把NetworkManager的配置也一起刷新。# 查看网络管理器的设备状态 nmcli device status # 断开然后重新连接网卡 sudo nmcli device disconnect eth0 sudo nmcli device connect eth0这一套组合拳打完之后大概率你的网络就恢复了。但如果你用的是新版本Kali系统默认启用了Netplan命令会稍微不一样后面我会单独说。3.2 设置静态IP使用NetworkManagerDHCP能拿到IP当然省事但有时候你希望Kali用固定IP方便做端口转发、SSH连接、或者搭建实验环境。在Kali里设置静态IP我优先推荐用NetworkManager因为它和桌面环境集成得好重启也不会丢失配置。打开终端输入nmcli进入交互式操作或者直接用命令行的方式# 查看NetworkManager管理的连接名称 nmcli connection show假设你的网卡连接名叫Wired connection 1要让这个连接使用静态IP网关设为192.168.88.2DNS设为223.5.5.5# 修改连接为手动IP配置 sudo nmcli connection modify Wired connection 1 ipv4.method manual \ ipv4.addresses 192.168.88.100/24 \ ipv4.gateway 192.168.88.2 \ ipv4.dns 223.5.5.5 8.8.8.8 # 重新激活连接 sudo nmcli connection up Wired connection 1执行完用ip addr确认IP是否生效。这里有一个细节网段里的网关必须是VMware NAT模式下虚拟网络编辑器里设置的网关通常不是192.168.88.1。你可以在物理机的Windows命令行里执行ipconfig看“VMware Network Adapter VMnet8”那个网卡的默认网关或者在Kali里先ip route看一下之前的默认网关是多少照着填就不会错。如果用ip route什么输出都没有就去虚拟网络编辑器看NAT设置里的网关IP。命令行记不住的话也可以用图形界面操作。在桌面右上角找到网络图标点击设置选中有线连接点击齿轮图标在“IPv4”选项卡里把“自动DHCP”改成“手动”填入地址、掩码、网关和DNS保存后关闭再重连网卡即可。图形界面的好处是能看到各个字段的提示不容易填错适合新手。3.3 新版Kali的Netplan配置文件位置Kali从2020.1版本之后官方逐步把网络配置工具迁移到了Netplan。虽然Kali现在默认还是用NetworkManager但如果你装的是最新版或者镜像经过自定义可能启用的是Netplan。这种情况下你会发现/etc/network/interfaces文件怎么改都没反应因为Netplan不读这个文件。Netplan的配置文件在/etc/netplan/目录下通常是一个.yaml文件文件名可能是01-netcdf.yaml、01-dhcp.yaml之类的。查看当前配置# 列出netplan配置 ls /etc/netplan/ # 查看配置文件内容 sudo cat /etc/netplan/*.yaml如果是DHCP模式配置大概长这样network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: true如果要改成静态IP就手动编辑这个文件network: version: 2 renderer: NetworkManager ethernets: eth0: dhcp4: false addresses: - 192.168.88.100/24 routes: - to: default via: 192.168.88.2 nameservers: addresses: - 223.5.5.5 - 8.8.8.8修改完成后执行# 应用配置 sudo netplan apply注意renderer的值要根据你的系统配置来如果Kali桌面用的是NetworkManager就保持renderer: NetworkManager不要乱改。如果改成静态IP后无法上网先检查网关和DNS填对没有。有一次我写错了DNS地址导致能ping通IP但域名解析失败排查了很久才发现是配置文件里一个多打了空格yaml缩进不对。注意无论改Netplan还是NetworkManagereth0、ens33之类的网卡名要以实际系统里的ip addr输出为准。不同版本、不同虚拟化环境下网卡命名规则不一样别照抄别人的配置。4. 常见问题与排查技巧实录4.1 DNS无法解析与网关不通Kali在VMware里常见的网络故障我用表格整理一下方便你对照排查现象可能原因快速排查命令解决方法没有IP地址DHCP失败或网卡未启用ip addr手动执行sudo dhclient eth0或检查VMware DHCP服务有IP但ping不通网关VMware NAT服务异常ping 192.168.x.1启动Windows服务里的VMware NAT Service检查虚拟网络编辑器网段网关通但外网不通仅主机模式或物理网络限制ping 8.8.8.8切换到NAT模式检查虚拟网络编辑器VMnet8配置能通IP但域名不通DNS配置不对cat /etc/resolv.conf修改NetworkManager或Netplan的DNS配置网速很慢虚拟机配置了桥接但物理环境信号差ping -c 10 baidu.com改用NAT模式或者重启VMware服务重启后网络失效静态IP配置没有持久化nmcli connection show使用NetworkManager或Netplan保存配置不要用ifconfig临时设置ping外网的时候建议优先ping IP而不是域名比如ping 8.8.8.8。如果IP能通但域名不通说明是DNS问题。Kali里的/etc/resolv.conf文件可能指向了127.0.0.53之类的本地解析器这个倒不算故障但如果你自己配置了DNS却还是不生效可以用resolvectl status看看系统的DNS链路状态。我遇到过一种情况/etc/resolv.conf设置没问题但NetworkManager覆盖了它导致配置失效最后用nmcli connection modify Wired connection 1 ipv4.ignore-auto-dns yes关掉了自动DNS才解决。4.2 IPv6与网络桥接的干扰问题还有一个很多人忽略的坑IPv6。Kali默认开启了IPv6而VMware的NAT模式默认只处理IPv4如果你在Kali里启用了IPv6的DHCP可能会导致NetworkManager在等待IPv6地址时卡住拖慢了整体网络初始化速度出现“开机后一两分钟才连上网”的现象。解决方法是禁用IPv6或者让NetworkManager只处理IPv4# 在sysctl配置中禁用IPv6 sudo sysctl -w net.ipv6.conf.all.disable_ipv61 sudo sysctl -w net.ipv6.conf.default.disable_ipv61 # 持久化配置 echo net.ipv6.conf.all.disable_ipv61 | sudo tee -a /etc/sysctl.conf echo net.ipv6.conf.default.disable_ipv61 | sudo tee -a /etc/sysctl.conf如果你一定要用IPv6那选择桥接模式并把物理路由器的IPv6开启但大多数家庭路由器对IPv6的支持程度不一折腾成本高不推荐在虚拟化实验环境里花费太多时间。4.3 网络配置持久化与克隆重启最后一个要叮嘱的是配置持久化问题。很多人在Kali里临时用ifconfig eth0 192.168.88.100 netmask 255.255.255.0 up设置IP当时是通了但一重启就失效然后继续吐槽网络配置有问题。这不是网络有问题是方法本身就不对。ifconfig设置IP是临时的它只作用于当前内核网络栈不会写入任何配置文件。正确的持久化设置方式就是我前面提到的Netplan或NetworkManager因为它们会写入配置文件开机时自动加载。如果你需要快速测试某个IP临时用ip addr add 192.168.88.100/24 dev eth0没问题但一旦确认测试成功就要立刻通过nmcli或Netplan保存成持久配置否则下次开机所有配置归零实验进度全丢。克隆虚拟机的时候也要小心克隆意味着MAC地址、网络连接配置都复制过来了开机会出现网卡名变了比如从eth0变成了eth1或者NetworkManager配置文件里MAC地址对不上的情况。解决办法是在克隆之后进入系统删除旧的网络连接配置让NetworkManager重新生成# 删除所有现有连接配置 sudo nmcli connection delete Wired connection 1 # 重新扫描设备并创建新连接 sudo nmcli device reapply eth0 sudo nmcli device connect eth0如果执行完还是没有网检查一下/etc/udev/rules.d/70-persistent-net.rules文件有些系统会自动生成它里面可能残留了旧网卡的MAC绑定信息把它删掉重启即可。5. 实操过程复盘与个人经验最后分享一下我做网络配置实验的完整过程你完全可以把这套操作当成模板来用。我在VMware里新装了一台Kali虚拟机装好之后按惯例先做了快照然后开机测试网络。第一件事就是ip addr发现网卡是eth0但没有IP地址然后执行sudo nmcli device connect eth0结果还是没反应。这时候我判断问题不在系统内因为NetworkManager本身工作正常只是没有收到DHCP响应。切到Windows打开“服务”发现“VMware DHCP Service”没有运行启动之后回到Kali执行sudo dhclient eth0很快就拿到了192.168.88.128这个地址。但接下来我发现一个问题IP拿到之后ping baidu.com还是不行提示域名解析失败。ping 8.8.8.8能通。检查/etc/resolv.conf发现里面没有写入任何可用的DNS服务器那个文件指向的127.0.0.53是systemd-resolved的本地缓存没起作用。我直接用nmcli把DNS改成了223.5.5.5配置好后网络完全恢复。整个过程大概花了十分钟比我在Kali里一条一条试命令快多了。我的经验是能通过图形界面或nmcli解决的事情不要轻易去改底层的配置文件。很多时候改配置文件会引发新的连锁问题比如yaml缩进写错、服务没重启、NetworkManager和Netplan配置冲突等。遇到网络问题先冷静按本文的排查顺序一步步来绝大多数问题都能在半小时内解决。这个内容后续还可以扩展的方向是在Kali里通过NAT模式做端口转发把Windows主机的某个端口映射到Kali的22端口实现物理机直接SSH连接虚拟机或者用桥接模式让Kali和局域网内的其他机器互通做内网渗透测试实验。网络这块通了之后Kali的很多玩法才能展开。我个人在实际操作中还有一个习惯把每一步网络配置都记录下来写在笔记里。尤其是指标——网关、DNS、网段、虚拟网络编辑器里的设置这些记下来以后排查问题会快很多。网络配置这东西说难也不难无非是几个环节配合的问题但每一步都有它自己的坑多踩几次自然就熟练了。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进