拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

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

VMware虚拟机NAT模式详解:原理、配置与故障排查

VMware虚拟机NAT模式详解:原理、配置与故障排查 装好VMware虚拟机之后很多人第一件事就是进系统、装软件、跑环境结果卡在第一步虚拟机里面上不了网。我见过不少朋友明明选了NAT模式网络还是不通于是怀疑是镜像问题、VMware版本问题甚至直接重装系统。其实大多数情况下问题根本不在安装而是没搞懂NAT模式在VMware里到底是怎么工作的。这篇就围绕VMware虚拟机NAT模式的使用把原理、配置、端口转发、文件共享、故障排查这些实际操作中绕不开的点完整过一遍我尽量写得细一些因为很多坑真的是只有踩过才知道。1. NAT模式的工作原理虚拟交换机加伪装网关的组合拳1.1 NAT模式到底做了什么NAT模式全称是Network Address Translation网络地址转换。VMware给你虚拟出一张专用网卡VMnet8这台虚拟网卡连接着一个虚拟交换机所有设置为NAT模式的虚拟机都会连接在这台虚拟交换机上。而宿主机就是你装VMware的这台物理电脑通过VMnet8这张虚拟网卡充当了虚拟机们的网关角色。虚拟机发出的数据包会先送到VMnet8这个虚拟交换机然后由宿主机内核里的NAT服务改写源IP和源端口再通过宿主机真实的物理网卡发出去。外部服务器看到的是一个来自宿主机IP的请求完全不知道背后还有虚拟机存在。这个机制和家用路由器做的地址转换几乎一模一样——整个局域网内几十台设备共享一个公网IP出去上网靠的就是NAT。1.2 三个隐藏组件虚拟NAT设备、虚拟DHCP服务器、虚拟网卡很多人以为NAT模式只是一个选项其实VMware在你选择NAT模式的那一刻就在后台替你配好了三样东西虚拟NAT设备负责IP地址转换和多路复用相当于一个软件版路由器。虚拟DHCP服务器给NAT网络内的虚拟机自动分配IP地址默认网段是192.168.xxx.0/24。VMnet8虚拟网卡宿主机这一端接入虚拟交换机的入口也是虚拟机访问宿主机的必经之路。这三样平时都隐藏着只有在编辑→虚拟网络编辑器里才能看到和修改。你可以把整个NAT网络想象成一个小型局域网VMnet8是小区大门NAT设备是门卫DHCP服务器是给每户发门牌号的管理员。1.3 为什么NAT模式对新手最友好相比桥接模式需要占用一个局域网IP、还要考虑路由器分配规则NAT模式最大的优势就是开箱即用。只要宿主机能上网虚拟机基本就能上网不依赖外部路由器配置。就算你人在酒店、在公司会议室、在咖啡厅宿主机每次切换Wi-Fi虚拟机都能自动跟着走因为对外通信始终是通过宿主机完成的。它的代价是外部网络默认无法主动访问虚拟机。宿主机可以ping通虚拟机虚拟机可以访问宿主机和外部网络但从外部主动连接虚拟机需要额外做端口转发这一点后面会专门讲。2. NAT模式下虚拟机联网的完整配置流程2.1 先检查宿主机这边的VMnet8网络很多人配置NAT模式失败第一步就栽在宿主机网络适配器的设置上。VMware安装后会自动创建VMnet8这块虚拟网卡但在Windows上有时会被禁用或者在网络属性里被手动取消了IP配置。检查方式很简单Windows下打开控制面板→网络连接或者直接运行ncpa.cpl找到VMware Network Adapter VMnet8。它的IP地址一般是192.168.xxx.1子网掩码255.255.255.0正常情况下不需要手动改。我建议顺手ping一下这个地址能ping通说明虚拟网卡驱动正常这是后续所有网络操作的基础。很多奇怪的虚拟机无法联网问题最后定位下来就是VMnet8被禁用。右键启用之后一切恢复正常。这个动作一句话就能做好但排查过程可能花掉你小半天。2.2 在虚拟网络编辑器里核对NAT参数打开VMware Workstation的编辑→虚拟网络编辑器选中VMnet8正常情况下你会看到NAT模式与虚拟机共享主机的IP地址的说明。点更改设置管理员权限可以看到DHCP设置和NAT设置入口。这里有两个参数需要留意子网IP默认是192.168.xxx.0这个网段尽量不要和宿主机所在局域网网段冲突。比如你的公司局域网是192.168.1.0/24VMware的NAT默认网段也是192.168.1.0/24虚拟机访问宿主机时会有一堆莫名其妙的问题改掉其中一个就好。网关IP默认是192.168.xxx.2这个就是虚拟机的默认网关地址后面配置虚拟机静态IP时要用到。2.3 虚拟机内部网卡的设置在VMware主界面右键虚拟机→设置→网络适配器下拉框里选择NAT模式。注意这里有几个选项桥接模式、NAT模式、仅主机模式、自定义。选NAT模式后下面还可以选择自定义(U):特定虚拟网络手动指向VMnet8。实际操作中有个小细节如果虚拟机是同时配置了多块网卡的比如一张桥接、一张NAT系统里会出现路由优先级混乱的情况。建议日常使用只保留一块NAT网卡避免路由表打架。2.4 虚拟机内操作系统的网络配置这部分分两种情况Ubuntu/Debian等Linux系统如果安装时用的是DHCP开机后一般自动获取到192.168.xxx.xxx的地址。可以打开终端输入ip addr确认。如果没自动获取到手动编辑/etc/netplan/下的yaml文件新版本Ubuntu或/etc/network/interfaces老版本启用DHCP即可。如果你想配静态IP网关填192.168.xxx.2DNS可以填宿主机所在内外DNS也可以直接用像223.5.5.5这样的公共DNS。Windows虚拟机控制面板→网络和共享中心→更改适配器设置右键以太网适配器属性里选自动获得IP地址即可。Windows系统里网关地址也会自动变成192.168.xxx.2。配置完后的验证顺序很关键我习惯按这个链路来测ping 192.168.xxx.1 # 测试到宿主机虚拟网卡 ping 192.168.xxx.2 # 测试到虚拟网关 ping 8.8.8.8 # 测试到外网IP ping baidu.com # 测试DNS解析哪一步断了就从哪一步开始查。到不了网关问题在VMware网络组件能到网关到不了外网多半是宿主机本身网络切换或路由问题能ping通IP但解析不了域名那是DNS配置不对。3. NAT模式端口转发与外部访问实践3.1 为什么NAT模式访问不到虚拟机NAT模式下虚拟机隐藏在网络内部外部设备只知道宿主机IP不知道后面还有一台虚拟机。如果你想在局域网内另一台电脑上通过SSH连接虚拟机直接连是连不上的必须经过宿主机中转这就是端口转发干的事。端口转发的思路很朴素把宿主机某个端口比如2222的流量转给虚拟机的某个端口比如22。外部设备访问宿主机IP的2222端口最终到达的是虚拟机内的SSH服务。3.2 端口转发配置步骤在编辑→虚拟网络编辑器里选中VMnet8点NAT设置然后在端口转发里新增。以SSH为例填写内容如下主机端口2222类型TCP虚拟机IP地址192.168.xxx.xxx要看虚拟机实际获取到的IP虚拟机端口22填完后点确定宿主机防火墙再放行入站2222端口局域网的其他电脑就能用ssh -p 2222 user宿主机IP连进虚拟机了。我这几年用NAT模式做端口转发最多的场景是在虚拟机里跑测试服务、数据库开发环境宿主机上的IDE连虚拟机的MySQL、Redis、ES等端口。比如让宿主机访问虚拟机的3306端口只需要转发一波宿主机3306→虚拟机3306。这样宿主机不用装数据库客户端全部依赖虚拟机里的环境非常干净。3.3 多台虚拟机的端口规划NAT网络里可以同时跑多台虚拟机端口转发就变成了一个流量分诊台。比如宿主机端口目标虚拟机虚拟机端口用途2222192.168.10.10122SSH到Ubuntu服务器2223192.168.10.10222SSH到CentOS服务器8080192.168.10.10180访问Web服务3306192.168.10.1033306连接MySQL这样就在一台宿主机上虚拟出了多个独立服务器的访问入口。需要注意端口别冲突宿主机上已有服务占用端口时转发会失效建议先用netstat -ano查一下端口占用情况。3.4 端口转发失败排查思路端口转发设置看起来简单但失败率其实不低常见原因排序如下宿主机防火墙拦住了入站连接——这是最大的坑特别在Windows系统上。虚拟机内防火墙拦住了入站连接——Ubuntu有ufwCentOS有firewalld。虚拟机IP地址变了——DHCP重新分配导致转发目标失效。宿主机本身没有打开NAT服务——检查Windows服务里的VMware NAT Service是否在运行。前三个都很容易理解第四个是我遇到过的情况NAT服务被某些优化软件停掉了端口转发全部失效但虚拟机自己上网反而正常因为上网走的是NAT的另一个逻辑分支。这种隐蔽问题排查起来很费时间优先把Windows服务列表打开确认VMware NAT Service和VMware DHCP Service都处于正在运行状态。4. NAT模式下与宿主机的文件传输与共享4.1 VMware Tools是核心中的核心NAT模式解决的是网络通的问题但日常用虚拟机很少有人完全依赖scp传文件更多是直接拖拽。这个能力来自VMware Tools。装了VMware Tools之后宿主机和Linux虚拟机之间可以双向拖文件剪贴板也能共享虚拟机分辨率还能自适应窗口大小。Windows虚拟机一般装完就自动带了Linux虚拟机需要自己装。在VMware Workstation里点虚拟机→安装VMware Tools虚拟机内会挂载一个光盘镜像解压后执行安装脚本即可sudo mount /dev/cdrom /mnt cd /mnt sudo tar zxf VMwareTools-*.tar.gz -C /tmp cd /tmp/vmware-tools-distrib sudo ./vmware-install.pl -d-d参数表示默认选项安装免去一堆交互式提问。装完后重启虚拟机拖拽文件就能用了。4.2 共享文件夹NAT网络里的隐藏通道如果你想在宿主机和虚拟机之间共享一个目录又不想每次拖文件共享文件夹是更好的方案。右键虚拟机→设置→选项→共享文件夹添加宿主机上的某个目录指定一个名称然后在虚拟机内的/mnt/hgfs/下就能看到。注意这个能力同样依赖VMware Tools。如果Tools装了但/mnt/hgfs还是空的可能是hgfs服务没挂载好可以手动执行sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other共享文件夹在NAT模式下和桥接模式下行为完全一致跟网络模式没有关系但因为它太常被忽略我放在这篇里专门讲。4.3 不用Tools的替代方案有些特殊情况比如VMware Tools死活装不上或者Windows虚机里Tools报启动脚本未能在虚拟机中成功运行这时候文件传输可以退回到SMB或SSHWindows虚拟机启用文件和打印机共享然后宿主机通过\\虚拟机IP\共享名访问。前提是虚拟机在NAT网络内能被宿主机直接访问这个天然没问题。Linux虚拟机安装openssh-server宿主机用scp或sftp连过去。本质上NAT模式下宿主机和虚拟机处于同一个虚拟局域网访问虚拟机IP非常直接不像外部设备需要端口转发。这个同网优势很多人没意识用起来白白多绕了弯路。5. NAT模式故障排查实录5.1 虚拟机Ubuntu黑屏进不去桌面这个问题被问得非常多启动Ubuntu虚拟机VMware窗口里一片黑要么只有鼠标要么连鼠标都没有。出现这种情况我第一步不是重装系统而是先看VMware的主进程再检查虚拟机的显示设置。实测下来NAT模式下黑屏往往不是网络配置直接造成的而是显卡/图形栈问题叠加了网络初始化失败。解决顺序可以这样强制结束vmware-vmx.exe进程重新打开虚拟机。在虚拟机→设置→显示器里把加速图形关掉3D图形改为无再启动。启动时连按Shift键进入GRUB菜单选Advanced options for Ubuntu进入恢复模式至少能救回数据。如果恢复模式能进重新安装或修复显卡驱动即可。5.2 虚拟机安装Linux蓝屏蓝屏多数发生在宿主机开了Hyper-V、WHPV或内核隔离功能的时候。VMware和Windows自带虚拟化功能冲突底层CPU虚拟化权限互相抢蓝屏几乎是必然。解决办法有两个关闭Windows功能里的Hyper-V以及内核隔离中的内存完整性。或者在VMware设置里处理器→虚拟化引擎选择Intel VT-x/EPT或AMD-V/RVI。这个跟NAT模式本身没有直接关系但用户往往在配置完网络后顺手安装系统网络模式加虚拟化冲突一起爆发排查起来很容易搞混。我的建议是装系统之前先把这些虚拟化冲突处理好别等蓝屏了再慌。5.3 NAT模式下ping不通外网如果虚拟机内能ping通宿主机192.168.xxx.1但ping不通8.8.8.8定位思路要逐步收敛检查VMware NAT Service是否在运行。这一步最容易被忽略。检查宿主机是否开启了全局代理HTTP代理、系统代理等NAT服务对系统代理的处理经常出现半通不通的状态。检查宿主机当前真实网络的连接状态如果宿主机本身是断网的虚拟机的NAT网络自然也会跟着断。尝试在虚拟网络编辑器里点击还原默认设置让VMware重建NAT服务。有时候宿主机是Wi-Fi网络且开启了AP隔离虚拟机的流量也会被隔离掉。这个问题在NAT模式下出现的概率比世面教程说得高公共办公网络环境尤其明显。5.4 DNS延迟与解析异常热词里有人搜光猫路由nat模式dns延迟可见DNS问题不止在VMware里存在。在VMware NAT网络里虚拟机默认的DNS服务器由DHCP下发通常指向宿主机网关192.168.xxx.2。但VMware自带的DNS转发器解析能力很弱经常出现解析慢、解析失败。解决方式很直接在虚拟机内手写DNS跳过VMware的DNS转发。Ubuntu下可以修改netplan配置增加一行nameservers: addresses: [223.5.5.5, 119.29.29.29]Windows虚拟机直接在网卡属性里改DNS地址。改了之后DNS延迟问题基本消除。这是一个很小但很实用的优化点我建议拿到虚拟机后第一时间就做。5.5 VMware Tools启动脚本未运行这个报错在不同版本里都出现过。Tools的安装程序已经装上了但启动服务没有成功运行常见于Linux虚拟机内核更新之后。解决方法是先卸载旧Tools再重新安装一遍新版Toolssudo vmware-uninstall-tools.pl然后重新执行安装流程。还有一种情况是系统里的perl或者编译工具没装全VMware Tools安装脚本在编译内核模块时失败这时要先把build-essential、linux-headers这些依赖补齐再装Tools。5.6 虚拟机网络连接激活失败Windows虚拟机里虚拟网卡显示网络连接激活失败或网络电缆被拔出。检查顺序是虚拟机设置里网卡是否勾选了已连接和启动时连接。虚拟网络编辑器里VMnet8是否意外被删除或改名。VMnet8对应的Windows网络连接是否被禁用。这个问题的根因基本都出在宿主机侧的虚拟网络设备状态上和虚拟机内的网络栈关系不大。重置一个VMnet8虚拟交换机重新勾选连接就能恢复。6. 该选哪种网络模式NAT、桥接、仅主机对比与选型6.1 三种模式一张表看清对比维度NAT模式桥接模式仅主机模式虚拟机是否能访问外网能能不能外部设备是否能访问虚拟机需要端口转发通过真实IP直接访问不能虚拟机与宿主机是否互通能能能是否依赖宿主机网络状态依赖依赖外部路由器与IP分配不依赖外网能否在公共Wi-Fi下稳定工作稳定容易受AP隔离、IP冲突影响稳定但上不了网适合场景大多数开发、测试环境需要被外部直接访问的服务器、模拟真实局域网设备隔离环境、安全测试、离线研发6.2 典型场景选择建议如果你只是学习Linux、写代码、搭一套开发环境NAT模式是最稳妥的。虚拟机的IP地址是私有的即使你在一个IP冲突严重的局域网里虚拟机内部也基本不受干扰。如果你需要在虚拟机里搭一个Web服务让手机或局域网其他电脑直接访问而且不想每次做端口转发桥接模式确实更方便——虚拟机自己占一个局域网IP外部设备直接访问就行了。但桥接模式的代价是如果局域网里IP不够用或者路由器开启了AP隔离虚拟机可能连不上网。仅主机模式的应用场景比较窄一般是做病毒分析、网络实验等不希望虚拟机流量跑到外网的场景。日常使用NAT完完全全足够。6.3 我在NAT模式下长期使用的配置习惯这几年我基本固定了一个NAT模式的标准配置关闭VMware NAT网络的DHCP改为手动静态分配。这样虚拟机IP永不变端口转发规则、SSH配置、hgfs挂载路径都不会因为IP漂移而失效。DNS在虚拟机内显式指定公共DNS不依赖VMware转发器。宿主机防火墙仅放行需要转发的端口其他一律拦截。每台虚拟机只保留一块网卡避免多网卡导致路由混乱。定期检查VMware NAT和DHCP两个Windows服务防止被优化软件偷偷停掉。这套配置我已经用了很久虚拟机环境一直很稳定。尤其是关掉DHCP这个操作很多人觉得是给自己找麻烦但如果你的虚拟机是长期开发环境静态IP带来的稳定性收益非常大端口转发也好、共享文件也好、IDE连接虚拟机数据库也好再也不用半夜爬起来改配置。最后提醒一下NAT模式下虚拟机的网络性能受宿主机物理网卡性能影响很大。如果你发现虚拟机里下载速度上不去看了宿主机网卡的节能模式、无线网络信号强度、以及是否有其他软件抢占带宽。把宿主机网络弄顺畅了虚拟机网络自然也就顺畅了。
返回列表