VMware Ubuntu网络设置详解:NAT与桥接模式及netplan配置
简介这份 VMware 虚拟机下 Ubuntu 网络连接配置指南面向使用 VMware 运行 Ubuntu 并遇到上网问题的用户尤其适合刚接触虚拟机网络设置的初学者。资源为单个 doc 文档体积仅 63KB目前已有 1014 人学习下载。文档以 NAT 模式为例完整梳理了配置全流程先在虚拟机设置中将以太网切换为 NAT再通过主机 ipconfig 获取 vmnet8 网段信息随后在 Ubuntu 的 IPv4 设置中添加 IP 地址、子网掩码、网关与 DNS 参数并给出 192.168.145.x、255.255.255.0、192.168.145.2 等可直接套用的参考值。针对配置后仍无法联网的情况文档还介绍了在 Windows 服务管理中开启 VMware NAT Service 和 VMware DHCP Service 的操作方法。按文档步骤操作可快速打通虚拟机与外部网络的连接是一份简洁实用的 VMware Ubuntu 网络排错与配置参考。1. VMware里Ubuntu网络连接设置先分清NAT和桥接再折腾系统装了VMware虚拟机、跑起Ubuntu却发现上不了网这是我在新手期翻过次数最多的车也是在帮别人排查虚拟机问题时遇到频率最高的诉求。VMware里Ubuntu网络连接设置本质上不是系统配置问题而是虚拟网络拓扑没选对——大多数场景下默认的NAT模式已经够用但一旦要开发板挂载、局域网互通、SSH远程连宿主机NAT就不够看了得切桥接。这篇笔记基于VMware Workstation Pro 17 Ubuntu 22.04 LTS的常用组合展开把三种网络模式、网卡参数、netplan配置和排错命令一次讲透。适合两类人刚装上Ubuntu、网络图标还在但ping不通外网的新手以及做嵌入式开发、需要把虚拟机暴露到局域网里的熟手。2. 三种网络模式先看懂NAT、桥接、仅主机到底差在哪2.1 虚拟交换机与三种默认连接VMware的虚拟网络拓扑VMware里存在一个很容易被忽略的“虚拟交换机”概念它叫VMnet。打开VMware Workstation的“编辑 - 虚拟网络编辑器”你会看到VMnet0、VMnet1、VMnet8三个默认条目它们分别对应三种网络模式VMnet0是桥接模式的虚拟交换机虚拟机直接“插”到物理网卡上看起来就跟局域网里的一台独立电脑一样VMnet1是仅主机模式的虚拟交换机虚拟机只能和宿主机通信完全隔离外网VMnet8是NAT模式的虚拟交换机虚拟机通过宿主机做地址转换上网对外只有宿主机一个“门卫”。这三种模式的区别就是数据包的走向不同。桥接模式下虚拟机的网卡直接绑定物理网卡MAC地址是虚拟网卡的但IP段必须和宿主机所在局域网一致NAT模式下VMware在宿主机上虚拟出一个192.168.x.1的网关地址虚拟机DHCP拿到的IP都在这个网段里通过宿主机转发到外网。仅主机模式最简单——没有NAT转换也没有外部路由只有VMnet1这个内部网段。很多教程只会说“NAT能上网桥接不能上网”其实不准确。桥接不能上网大概率是你把物理网卡选错了或者宿主机所在的网络有MAC地址绑定限制。NAT稳定省心但局域网其他设备看不到你的虚拟机这就是它和桥接最核心的差别。2.2 选型判断什么时候用NAT什么时候用桥接仅主机给谁用我的习惯是先问自己在做什么再选模式。普通学习场景比如在虚拟机上装Ubuntu学Linux命令、写Python脚本、搭Docker环境用NAT模式就够了。它不依赖外部网络的IP资源宿主机换了网络环境比如从家里带到公司虚拟机照样能上网因为NAT转换始终走宿主机。而且VMware内置的DHCP服务会自动分配IP基本零配置。需要和局域网互通的场景就得上桥接典型的有开发板烧写系统后要挂载到虚拟机NFS目录局域网内其他电脑要访问虚拟机里跑的Web服务或者你要用SSH从手机连到虚拟机。桥接模式下虚拟机就是局域网的一台普通主机路由器给它分配IP别的设备可以直接访问它。仅主机模式我平时用得最少但它有一个明确的用途——在宿主机没有外网、或者不想让虚拟机有任何外网访问权限时做本地通信和文件共享。比如在离线环境里做内核模块编译宿主机和虚拟机之间用共享文件夹或者Samba互传文件仅主机模式比NAT更安全因为它连NAT转换都不做完全封闭在VMnet1网段里。2.3 对应到VMware界面三种模式在设置里长什么样在VMware Workstation里切换模式的位置是虚拟机右键 - 设置 - 网络适配器。里面有三个单选选项NAT模式、桥接模式、仅主机模式。NAT模式默认勾选“已连接”桥接模式下方还有个“复制物理网络连接状态”的复选框这个在笔记本电脑上特别有用后面避坑章节会讲。虚拟网络编辑器里三种模式各有对应的子网配置。以VMnet8为例NAT模式默认子网是192.168.x.0子网掩码255.255.255.0NAT设置里能看到网关IP是192.168.x.2DHCP设置里能看到起始和结束IP地址范围。VMnet1的子网默认是192.168.y.0只有宿主机VMware Network Adapter VMnet1的IP 192.168.y.1作为网关。VMnet0不显示IP配置因为它直接桥接到物理网卡上。提示虚拟网络编辑器右下角有个“更改设置”按钮必须点了它才能编辑子网IP和DHCP范围否则所有参数都是灰色的。第一次操作的人很容易卡在这个地方。3. NAT模式实战配置从默认能上网到固定IP、SSH全搞定3.1 默认NAT为什么能上网VMnet8的网段与网关原理装好Ubuntu后如果你用的是VMware默认配置虚拟机的网卡会通过VMnet8的DHCP自动拿到一个192.168.x.x的地址比如192.168.88.128。同时虚拟机的默认网关是192.168.88.2DNS服务器也是这个地址。打开Ubuntu终端执行ip addr能看到ens33网卡执行ip route能看到default via 192.168.88.2。这个192.168.88.2是VMware的虚拟NAT网关它接收虚拟机发来的数据包做一个源地址转换把虚拟机的IP换成宿主机的物理网卡IP发出去。返回值再原路转回来。这一整套是VMware的NAT服务在宿主机后台完成的——你不需要在Windows里做任何配置Ubuntu也不用改任何文件。但要注意VMnet8的子网IP段是VMware按某个规则自动生成的。你可以在虚拟网络编辑器里看到它生成了192.168.88.0/24这个段可能和宿主机所在局域网段冲突也可能不冲突。如果宿主机IP和VMnet8同网段比如宿主机正好也是192.168.88.66那NAT模式可能会出问题因为路由规则会打架。遇到这种情况我一般直接把VMnet8改到别的段。3.2 改子网段和DHCP范围编辑虚拟网络参数打开虚拟网络编辑器选中VMnet8点“更改设置”获取管理员权限后可以看到子网IP一栏。如果默认的192.168.88.0/24和宿主机网段冲突改成192.168.188.0/24或者172.16.88.0/24这种不冲突的段都可以。改完之后检查三处联动NAT设置里的网关IP通常VMware会自动把网关改成新子网的第二个地址比如192.168.188.2DHCP设置里的起始IP和结束IP确保范围覆盖你要分配的地址宿主机Windows里的“VMware Network Adapter VMnet8”网卡IP需要改成同网段地址比如192.168.188.1方便宿主机直接访问虚拟机。每改一处点一次“应用”。提示改完VMnet8网段后最稳的做法是把虚拟机关机再开机一次让DHCP重新分配IP。Ubuntu里执行sudo dhclient -r sudo dhclient ens33也能强制重新获取不过netplan管理下更推荐直接reboot。3.3 Ubuntu侧固定IPnetplan配置与参数拆解Ubuntu 22.04用的是netplan管理网络网卡配置统一写在/etc/netplan/里。默认装完后会有一个01-network-manager-all.yaml或者类似的配置文件。固定IP的做法是新建一个YAML配置文件或者直接改默认文件。以下是我常用的写法# /etc/netplan/01-netcfg.yaml network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: no addresses: - 192.168.188.128/24 routes: - to: default via: 192.168.188.2 nameservers: addresses: - 192.168.188.2 - 223.5.5.5这段配置含义ens33是虚拟机网卡接口名Ubuntu 18.04以后稳定叫ens33老版本可能是eth0dhcp4设为no关闭DHCP启用静态地址addresses是虚拟机在VMnet8网段的固定IProutes里的to:default是默认路由via指向VMware NAT网关与虚拟网络编辑器里的网关地址保持一致nameservers配了两个DNS第一个是VMware网关做DNS转发第二个是阿里公共DNS做兜底。写好执行sudo netplan apply生效。然后跑ip addr确认IP是否变成了192.168.188.128跑ping 223.5.5.5测试外网连通性再跑ping 192.168.188.1测试宿主机连通性。三个全通说明NAT固定IP配置成功。3.4 配置后的验证从IP到外网DNS一套走完配置完固定IP后不要急着高兴把验证命令按顺序跑一遍能帮你快速定位哪一层出了问题。第一条是ip addr show ens33看IP、掩码、网卡的UP状态——如果显示DOWN说明网卡没启动第二条是ip route show看默认路由的via是否指向网关192.168.188.2第三条是ping 192.168.188.1测宿主机联通性。第四条是ping 192.168.188.2测NAT网关第五条是ping 223.5.5.5测外网IP通路通的话说明NAT转换正常第六条是ping baidu.com测DNS解析。哪一条不通就对应哪一层的问题IP没生效查netplan网关不通查NAT设置外网不通查Windows网络共享域名解析不了查nameserver。验证过程中最常翻车的是DNS。如果你发现ping 223.5.5.5通了但ping baidu.com不通基本可以断定是nameserver配置的问题。NAT模式下网关192.168.188.2本身就是DNS转发器如果VMware的NAT服务没把DNS转发做好就要在nameservers里加入公共DNS。4. 桥接模式实战配置开发板挂载、局域网互通的正确姿势4.1 桥接网卡选择选错物理网卡会直接没网切到桥接模式的第一步不是改Ubuntu配置而是去虚拟网络编辑器里看桥接到哪个物理网卡。VMware默认是“自动”这个选项在多数有线网络上能用但在笔记本上翻车率极高——笔记本有线和Wi-Fi两块网卡VMware自动选中的可能是一块没连网的网卡虚拟机就会彻底没网。我的做法是打开”编辑 - 虚拟网络编辑器 - VMnet0桥接模式”把桥接到那块绑定的物理网卡改成当前正在上网的网卡。比如现在用的是Wi-Fi就选Intel Wireless-AC 9462或对应的无线网卡用的是有线就选Realtek PCIe GbE这类有线网卡。选错的下场是虚拟机网卡的link灯都亮不起来。另外还有个容易忽略的细节Windows网络连接里的物理网卡如果开了“Internet连接共享”有时会干扰桥接。桥接模式下虚拟机的数据包直接走二层交换共享网关反而会让路由冲突建议关掉共享让虚拟机直接用路由器做网关。4.2 Ubuntu侧桥接IP配置DHCP优先静态IP按路由段填桥接模式下Ubuntu最简单的方式是恢复DHCP。netplan里改成dhcp4: yes网卡能自动从路由器获取IP前提是路由器开启了DHCP。虚拟机桥接后就是一个普通终端设备路由器给它分配IP、网关、DNS什么都不用改。需要固定IP的场合比如开发板挂载虚拟机NFS目录得让虚拟机的IP长期不变。这时查一下路由器的网段假设是192.168.1.0/24网关192.168.1.1就照下面的配置写# /etc/netplan/02-bridge-static.yaml network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: no addresses: - 192.168.1.66/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.1 - 223.5.5.5这段配置和NAT固定IP的区别只在网段和网关桥接模式必须用宿主机所在局域网的真实网关192.168.1.1DNS也用路由器地址。配好sudo netplan apply后用另一台局域网设备ping 192.168.1.66能通就说明桥接生效了。提示Ubuntu里默认renderer是NetworkManager时配置会在图形界面右上角的网络设置里同步显示。如果在配置文件里改了静态IP图形界面显示的还是DHCP状态不要慌执行sudo systemctl restart NetworkManager让它重新读取。4.3 桥接模式翻车现场从网卡选错到公司网络策略拦截我用桥接模式被坑过三次第一次就是网卡选错——笔记本插着有线网线VMware却自动桥接给了Wi-Fi虚拟机始终拿不到IP在虚拟网络编辑器里手动改成有线网卡后秒通。第二次是把虚拟机从家里带到公司家里用的是192.168.31.0网段公司是10.0.0.0网段桥接的DHCP重新分配了IP但虚拟机里配的静态IP还是老网段的直接断网改成DHCP后恢复。第三次比较坑公司网络做了端口隔离和MAC绑定桥接上去的虚拟机分到IP也ping不通网关。这种限制不是配置能解决的老老实实切回NAT模式。所以在公司网络环境里我优先NAT只有在自己可控的路由器局域网下才用桥接。5. VMware里Ubuntu网络连接设置避坑记录网卡消失、SSH不通、DNS全挂5.1 重启后网卡起不来ens33变成eth0还是直接消失现象在Ubuntu里改了netplan配置执行sudo netplan apply时提示成功但重启虚拟机后ip addr里找不到ens33只有lo回环接口网络图标消失。原因最常见的原因是改了netplan的YAML文件时缩进或者字段名写错。netplan对语法极其敏感一个空格错位就静默失败不报错但配置不生效其次是renderer写成了networkd而系统实际用的是NetworkManager两套管理工具打架导致网卡根本没接管。解决先跑sudo netplan generate看配置是否有语法错误然后跑sudo netplan apply重新加载。注意apply之后马上跑ip addr有些版本需要等几秒。如果网卡还是没起来看systemctl status NetworkManager确认renderer和实际服务一致。我踩过最深的一次坑就是把systemd-networkd的配置也写上去了两个文件互相覆盖删掉多余的就好。5.2 SSH连不上网关记错、防火墙没关、VMnet网段冲突现象Windows宿主机用MobaXterm或者Xshell连虚拟机的SSH连接超时或者提示Connection refused。原因SSH连不上的原因有三类地址错乱。第一类以为NAT网关是宿主机VMnet8网卡IP 192.168.188.1结果把虚拟机IP也配成192.168.188.1冲突了肯定不通第二类Ubuntu里没装openssh-server默认只有openssh-clientsshd服务压根没跑第三类Ubuntu的ufw防火墙默认放行不了22端口虽然22端口在监听但数据包被防火墙丢了。解决先确认sshd状态——sudo systemctl status sshd没装就sudo apt install openssh-server。再查防火墙——sudo ufw status如果active就sudo ufw allow 22/tcp。然后检查IP冲突——在Windows里ping虚拟机IP通了再连。另外VMware的NAT网段如果是192.168.1.0/24而宿主机正好在同一个网段电脑上同时存在两个网段的192.168.1.1路由会很混乱建议把VMnet8改成不冲突的段。5.3 Ubuntu安装gcc失败源更新时DNS解析不通过现象执行sudo apt update时提示无法解析archive.ubuntu.com或者解析成功但包下载速度极慢sudo apt install gcc一直卡在等待状态。原因NAT模式下apt要访问外网的软件源服务器第一步就是DNS解析。虚拟机的/etc/resolv.conf里nameserver如果指向192.168.188.2这个VMware网关而VMware的NAT DNS转发服务偶尔不稳定解析就会超时。另外国内网络访问Ubuntu官方源本来就慢这不是网络配置的锅。解决在netplan的nameservers里加上223.5.5.5或119.29.29.29sudo netplan apply后重新apt update。源的问题可以把/etc/apt/sources.list.d/ubuntu.sources里的URL从archive.ubuntu.com换成mirrors.aliyun.com或mirrors.tuna.tsinghua.edu.cn。做完这两个操作gcc基本能装上。注意换源后跑sudo apt update更新索引再install否则会报404。5.4 VMware Tools启动脚本未在虚拟机中成功运行现象虚拟机开机后弹窗提示“VMware Tools启动脚本未能在虚拟机中成功运行”且虚拟机窗口分辨率固定无法调整复制粘贴和文件拖拽都失效。原因VMware Tools是一个帮助虚拟机和宿主机交互的服务包装完后有个vmtoolsd的守护进程提示脚本未运行要么是工具包没装完整要么是运行了但没有注册成systemd服务。更常见的是现在Ubuntu 22.04默认用open-vm-tools和VMware自带的VMware Tools安装包冲突。解决推荐直接用open-vm-tools替代原版。执行sudo apt install open-vm-tools open-vm-tools-desktop -y装完后重启。这个包是开源实现功能覆盖共享文件夹、自适应分辨率、复制粘贴命令行版本用open-vm-tools桌面版加desktop后缀。装好之后VMware Tools的弹窗就不会再出现了。5.5 克隆虚拟机后网卡变ens32MAC地址冲突与IP失效现象克隆一台装好的虚拟机后开机ip addr显示网卡名从ens33变成了ens32或者干脆没有IP只有lo。怎么执行DHCP都拿不到地址/etc/netplan里的ens33配置不生效。原因克隆虚拟机时VMware会为克隆体生成一张新的虚拟网卡和新的MAC地址。但/etc/netplan里的配置文件写死了接口名ens33Ubuntu通过udev规则识别到新网卡时没有匹配规则就给它分配了一个新名字ens32或者ens-pci编号。DHCP客户端在ens32上启动但netplan调度的还是ens33两边对不上。解决找到实际网卡名把netplan配置文件里的ens33改成ens32或者更彻底的做法是改用通配匹配比如把接口名写成ens*这样以后不管克隆成什么名字都能识别。修改后sudo netplan apply生效。如果之后还要继续克隆建议先统一用通配符配置。6. 进阶技巧克隆模板、双网卡配置与网络排查三板斧6.1 修改网卡MAC后的IP刷新技巧虚拟机的网卡MAC地址在Windows的设备管理器里是可以重新生成的。如果把MAC换了虚拟机里的Ubuntu会发现新网卡连接但DHCP服务器根据旧的MAC记录的租约还在有可能分配一个新IP也可能分配原来的IP。最省事的做法是保留MAC不动不要频繁改。确实要改的情况下在netplan配置里把dhcp4设为yes重启网络让DHCP重新分配。6.2 一块网卡跑两个IP段NAT和桥接双网卡配置开发场景里经常需要同时满足“外网下载软件”和“局域网设备访问”两个需求。做法是给虚拟机加两块网络适配器一块设为NAT模式负责外网连接一块设为桥接模式负责局域网通信。netplan配置里给两块网卡分别写配置NAT网卡配静态IP桥接网卡配DHCP或静态IProutes里只留NAT网关那条default桥接网卡就不需要加默认路由避免两条默认路由打架。# /etc/netplan/03-dual-nic.yaml network: version: 2 renderer: NetworkManager ethernets: ens33: dhcp4: no addresses: [192.168.188.128/24] routes: - to: default via: 192.168.188.2 nameservers: addresses: [192.168.188.2, 223.5.5.5] ens34: dhcp4: yes这个配置里ens33走NAT出外网ens34走桥接做局域网互通。关键点在第二条bridge网卡上不加routes字段DHCP获取的网关默认会被安装成默认路由需要额外处理——可以用网关指标来控制优先级给NAT的default路由加一个metric 100给桥接DHCP的默认路由加metric 200Linux会优先走metric小的那条。6.3 网络排错三板斧与常用命令清单网络问题排查我守着一套固定流程来遇到问题按顺序跑命令基本十分钟内能定位第一板斧是看状态ip addr确认网卡UP和IP地址ip route确认默认路由systemd-resolve --status查看DNS配置。第二板斧是逐层ping先ping网关再ping外网IP最后ping域名。ping网关不通是二层问题查VMnet网卡和桥接选择ping外网IP不通是NAT或路由问题查网关和VMware网络服务ping域名不通是DNS问题改nameserver就行。第三板斧是看日志journalctl -u systemd-networkd或者vmware的日志能查到网卡启动过程中的具体报错。从那以后我每次配完VMware里Ubuntu的网络都会强制走一遍这套排查流程不管是NAT、桥接还是双网卡先把链路层状态打印出来对照一遍再逐层ping上去省掉了至少一半的返工。中间踩过的那些坑——网卡名字变了、DNS解析挂掉、克隆后配置失效——大半都是因为当时图快直接跳过了验证步骤后来把流程固化下来实现一次装完一次调通的习惯偶尔再出问题也知道往哪个方向查。希望帮到你。本文还有配套的精品资源点击获取