ARTICLE DETAIL

资讯详情

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

VMware虚拟机NAT模式配置与排障:VMnet8、静态IP和端口转发

VMware虚拟机NAT模式配置与排障:VMnet8、静态IP和端口转发 VMware虚拟机用NAT模式做网络连接是我带新人时最常被问到的场景之一。很多人第一次装完Ubuntu或Windows虚拟机发现浏览器打不开、终端ping不通、共享目录报错第一反应是重装系统其实大多数问题都卡在虚拟网络这一层。这篇分享就按我平时排障的顺序把VMware Workstation里NAT模式的配置过程拆成能照做的步骤也把容易踩的坑一并说清楚。不管你是刚接触虚拟机的新手还是准备做实验环境的老手只要跟着走基本能让虚拟机在NAT模式下正常上网、访问宿主机也能让宿主机通过端口转发访问虚拟机里的服务。NAT模式最大的好处是虚拟机共享宿主机的网络出口不需要宿主机所在网络额外分配IP也不容易和办公室、家里的网段起冲突。但它也有边界外部机器默认看不到虚拟机虚拟机之间默认也不能随便被局域网设备发现。所以先把原理和适用场景弄明白后面配置起来才不会一头雾水。1. 先把NAT模式讲透它到底帮你解决了什么问题1.1 NAT模式在VMware里的角色NAT是Network Address Translation的缩写中文常叫网络地址转换。VMware里的NAT模式本质上是让虚拟机先连到宿主机上的一块虚拟网卡VMnet8再由VMware提供的虚拟NAT设备把虚拟机的流量转换成宿主机的流量发出去。虚拟机以为自己在一个独立小局域网里网关通常是192.168.x.2宿主机在VMnet8上通常是192.168.x.1。虚拟机请求外网时先到虚拟网关再由虚拟网关转发。外部网络看到的只是宿主机的连接不知道后面还藏着一台虚拟机。这样做的直接好处是省IP、少冲突、配置简单。对做开发测试、学习Linux、跑数据库、做临时环境的人来说NAT是最省心的默认选择。1.2 什么时候该用NAT什么时候该绕开如果你只是想让虚拟机上网、装软件、访问代码仓库或者让宿主机通过端口转发访问虚拟机里的网站NAT很合适。它的隔离性也让实验环境更干净虚拟机IP变了也不影响宿主机所在局域网。可是如果虚拟机需要被同网段的其他电脑直接访问或者要连接工业PLC、网络打印机、局域网摄像头这类设备NAT就会挡路。因为那些设备看不到NAT后面的虚拟机。还有做局域网广播、组播、设备发现、P2P联调时NAT也容易失灵。我的习惯是先问一句“谁需要主动找到谁”。如果只有虚拟机和宿主机互相访问NAT够用如果局域网设备要主动找虚拟机优先考虑桥接如果只想宿主机和虚拟机内部互通仅主机模式更干净。1.3 NAT、桥接、仅主机三种模式对比模式虚拟机上网宿主机访问虚拟机局域网其他设备访问虚拟机IP来源典型场景NAT能需端口转发默认不能VMnet8 DHCP或静态开发测试、学习、临时环境桥接能依赖物理网能能物理网DHCP或静态PLC联调、局域网服务、被外部访问仅主机默认不能上外网能不能VMnet1 DHCP或静态隔离实验、纯内部通信这张表建议你收藏。很多网络模式选错不是技术能力问题而是目标没想清楚。比如你想让手机访问虚拟机里的网页NAT默认做不到需要端口转发或者换桥接你想让虚拟机和PLC在同一个网段NAT也做不到因为PLC根本不知道NAT后面的地址。把“谁访问谁”写在纸上再对照表格选模式比装完系统再改要省事得多。1.4 VMnet8就是NAT身后的虚拟路由器VMware Workstation安装后会创建多个虚拟网络VMnet8是NAT模式默认使用的。打开“虚拟网络编辑器”能看到VMnet8的类型是NAT子网地址比如192.168.124.0掩码255.255.255.0网关192.168.124.2DHCP范围通常从.128到.254。宿主机上也会多出一块“VMware Network Adapter VMnet8”的虚拟网卡地址通常是192.168.124.1。把它想成一台迷你路由器.1是宿主机侧的门牌.2是虚拟机的网关DHCP负责给虚拟机发地址。虚拟机要上网必须和.2通宿主机要访问虚拟机必须和虚拟机IP通。很多“网络连接激活失败”其实就是这个迷你路由器的配置乱了。2. 配置前的准备别急着进系统先把这几件事确认了2.1 检查宿主机物理网络与虚拟化支持先确认宿主机自己能上网。如果宿主机都断网虚拟机NAT再正确也没用。Windows下打开任务管理器看性能里的CPU虚拟化是否开启或者在BIOS/UEFI里确认Intel VT-x、AMD-V处于启用状态。虚拟化没开虚拟机可能跑不起来更别提网络。还要看宿主机物理网卡是不是正常是否被第三方安全软件限制。有些公司电脑装了终端管理软件会限制新网卡或虚拟网卡导致VMnet8起不来。遇到这种情况先退出或调整那类软件的限制再重启VMware相关服务。这个前置检查花两分钟能省掉后面半小时瞎折腾。2.2 VMware相关服务和虚拟网卡是否正常Windows宿主机按WinR输入services.msc找VMware DHCP Service、VMware NAT Service、VMware Authorization Service等服务确保它们处于运行状态。再看网络连接面板应该有VMware Network Adapter VMnet1和VMnet8。VMnet8用于NATVMnet1用于仅主机。如果VMnet8缺失或带感叹号先别急着改虚拟机先修宿主机这一侧。常见操作是以管理员身份打开VMware点“编辑”-“虚拟网络编辑器”右下角“更改设置”然后“还原默认设置”。还原会重建虚拟网卡和虚拟网络绝大多数驱动错乱都能修好。注意还原后原有子网、端口转发会清空所以能备份就备份。2.3 系统镜像与网络规划装Ubuntu 20.04或Windows虚拟机前先想清楚用途。只是学习命令默认NAT加DHCP最省事要部署Web服务给宿主机访问NAT加端口转发即可要做多台虚拟机互联可以都用NAT并在同一VMnet8子网也可以加一块仅主机网卡。IP规划上不要和宿主机所在局域网冲突。比如公司网段是192.168.1.0/24VMnet8就尽量别用192.168.1.0/24换成192.168.124.0/24这类不常用网段。虚拟机内部如果手动配静态IP建议选DHCP范围之外的地址比如192.168.124.10到192.168.124.100避免和自动分配地址打架。2.4 版本与授权提醒VMware Workstation有多个版本界面位置可能略有差异但核心逻辑一致。安装包和授权建议走官方渠道别用来路不明的修改版否则虚拟网卡驱动、共享文件夹组件可能被替换后面排错会很痛苦。授权状态不影响NAT基本功能但版本过旧可能对新的宿主机系统支持不好。如果你的VMware 17里找不到某些配置项先确认是不是界面被简化、窗口没拉全或者安装时组件没装完整。修网络之前把版本、补丁、组件的一致性确认好能避免把软件问题误判成网络问题。3. 从零配置NAT网络连接一条能照做的实操链路3.1 恢复虚拟网络编辑器的默认设置打开VMware Workstation点顶部“编辑”选“虚拟网络编辑器”。如果按钮是灰的点右下角“更改设置”给管理员权限。选中VMnet8先看类型是不是NAT模式再点“还原默认设置”。这一步会重建VMnet1、VMnet8和NAT设备。等进度条走完宿主机网络连接里会重新出现虚拟网卡。还原后建议重启一次宿主机或者至少重启VMware NAT Service和DHCP Service。很多人跳过重启结果虚拟机拿到旧地址怎么都不通。如果你有正在使用的端口转发规则还原前记下规则后面再加回来。3.2 设置VMnet8的子网、DHCP和NAT网关仍然在虚拟网络编辑器里选中VMnet8。子网IP填192.168.124.0掩码255.255.255.0这是我最常用的示例网段冲突概率低。点“NAT设置”确认网关IP是192.168.124.2。点“DHCP设置”确认起始地址和结束地址例如192.168.124.128到192.168.124.254租用时间默认即可。如果不需要DHCP也可以取消勾选“使用本地DHCP服务将IP地址分配给虚拟机”但新手不建议关手动配静态IP容易把网关写错。配置完点“应用”和“确定”。这里的.1、.2、.128不是随便定的.1给宿主机VMnet8网卡.2给虚拟NAT网关.128以后留给自动分配这样宿主机和网关不会和虚拟机抢地址。3.3 把虚拟机网络适配器切到NAT选中虚拟机点“编辑虚拟机设置”找到“网络适配器”。勾选“已连接”和“启动时连接”网络连接选择“NAT模式使用已共享的主机IP地址”。如果你看到“自定义特定虚拟网络”也可以选VMnet8效果类似。不要一边选NAT一边又在虚拟机里禁用网卡。改完后启动虚拟机。如果虚拟机是克隆出来的还要点“高级”确认MAC地址没有和原虚拟机重复可以点“生成”重新生成。MAC重复会导致DHCP发地址混乱表现为两台机器抢同一个IP或者一台通一台不通。3.4 在Ubuntu 20.04里确认网卡与DHCPUbuntu 20.04启动后先在终端执行ip addr ip route看有没有ens33、ens160之类的网卡以及是否拿到192.168.124.x地址。默认路由应该指向192.168.124.2。如果没地址执行sudo dhclient -v ens33把ens33换成你的实际网卡名。若提示找不到命令先确认系统是否用的是NetworkManagernmcli device status nmcli connection show如果网卡状态是unmanaged说明NetworkManager没接管。可以编辑/etc/NetworkManager/NetworkManager.conf把managedfalse改成true再重启NetworkManager。DHCP成功后可执行ping -c 4 192.168.124.2 ping -c 4 223.5.5.5 ping -c 4 www.baidu.com先通网关再通公网IP最后通域名。这个顺序能快速定位是二层、三层还是DNS问题。3.5 Ubuntu静态IP的netplan写法与验证如果你需要固定IP比如跑Web服务Ubuntu 20.04常用netplan。先看/etc/netplan/下有哪些yamlls /etc/netplan/常见是00-installer-config.yaml或01-network-manager-all.yaml。编辑前备份sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.bak sudo nano /etc/netplan/00-installer-config.yaml内容参考network: version: 2 renderer: networkd ethernets: ens33: dhcp4: no addresses: - 192.168.124.188/24 gateway4: 192.168.124.2 nameservers: addresses: - 223.5.5.5 - 8.8.8.8注意YAML缩进必须用空格不能用Tab。网卡名、子网、网关都要换成你自己的。保存后执行sudo netplan try测试没问题再sudo netplan apply如果应用后断网用VMware快照回滚或者改回dhcp4: yes。gateway4在新版本会提示弃用但不影响20.04使用。静态IP一定要在VMnet8子网内且不要和DHCP范围重叠。3.6 Windows虚拟机中的IPv4设置Windows虚拟机里右键网络图标打开“网络和Internet设置”-“更改适配器选项”找到以太网右键属性双击“Internet协议版本4”。如果走DHCP选“自动获得IP地址”和“自动获得DNS服务器地址”。如果要静态填IP 192.168.124.188掩码255.255.255.0网关192.168.124.2DNS可以填223.5.5.5或宿主机同款DNS。注意Windows有时会记住旧网卡配置换网络后要禁用再启用一次。命令行验证ipconfig /all ping 192.168.124.2 ping 223.5.5.5 nslookup www.baidu.com如果ping网关通、ping公网IP不通问题多半在NAT服务或宿主机出口如果IP通、域名不通就是DNS配置问题。3.7 连通性测试从网关到外网再到宿主机配置完成后按这个顺序测虚拟机ping网关192.168.124.2虚拟机ping公网IP 223.5.5.5虚拟机ping域名www.baidu.com虚拟机ping宿主机VMnet8地址192.168.124.1宿主机ping虚拟机192.168.124.188如果宿主机要访问虚拟机Web服务先在虚拟机启动服务再在宿主机浏览器访问NAT模式下通常需要端口转发。任何一步失败先别重装虚拟机。第一步失败查虚拟网卡和VMnet8第二步失败查VMware NAT Service和宿主机出口第三步失败查DNS第四步失败查宿主机防火墙第五步失败查虚拟机防火墙第六步失败查端口转发和服务监听地址。把问题分层比盲目点“还原默认设置”高效得多。4. 踩坑记录NAT模式最常见的故障与排查4.1 Ubuntu网络连接激活失败Ubuntu 20.04报“网络连接激活失败”常见原因有四类。第一NetworkManager没接管网卡nmcli显示unmanaged。第二netplan配置有语法错误比如Tab缩进、网卡名写错、网关不在同子网。第三VMnet8的DHCP没启动或者DHCP地址池耗尽。第四克隆虚拟机导致MAC冲突。排查时先看nmcli device status ip addr journalctl -u NetworkManager --no-pager -n 50如果网卡名变成了ens33而配置里写的是eth0NetworkManager会找不到设备。把网卡名统一后重启sudo systemctl restart NetworkManager sudo netplan apply如果是DHCP问题可以在VMware虚拟网络编辑器里确认DHCP服务已启用并扩大地址池。MAC冲突就重新生成MAC再在虚拟机里释放旧地址sudo dhclient -r ens33 sudo dhclient -v ens334.2 没有网络适配器、VMnet1有感叹号虚拟机里没有网络适配器先在虚拟机设置里确认“网络适配器”存在且已勾选连接。如果宿主机网络连接里VMnet1有感叹号说明虚拟网卡驱动或网络堆栈异常。可以尝试以管理员身份运行VMware进入虚拟网络编辑器点“还原默认设置”再到设备管理器里卸载带黄色感叹号的VMware Virtual Ethernet Adapter重启后让VMware重装若仍不行用官方卸载工具清理后重装VMware。注意清理重装会丢失虚拟网络配置和端口转发操作前把虚拟机目录备份好。很多“没有网络适配器”其实是宿主机安全软件拦截了虚拟网卡安装退出这类软件再重装往往就好了。4.3 共享文件夹失败与网络重置“从服务器获取共享列表失败重置时断开网络连接”是VMware Tools或共享组件常见报错。先确认虚拟机里装了VMware ToolsWindows看托盘图标Ubuntu执行vmware-toolbox-cmd -v如果没装重新安装对应组件。共享文件夹依赖虚拟网络和VMware Tools的通道NAT配置乱掉时也可能连带失败。处理顺序是先修好NAT上网再重装VMware Tools最后在虚拟机设置里重新添加共享目录。Ubuntu下共享目录常挂载在/mnt/hgfs如果目录为空检查vmware-hgfsclient ls /mnt/hgfs必要时手动挂载sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other如果宿主机网络重置后共享列表仍失败重启虚拟机往往比反复点重试更有效。4.4 主机访问虚拟机网站失败NAT模式下宿主机访问虚拟机网站失败通常不是网络断了而是方向不对。虚拟机访问外网是“出方向”NAT允许宿主机主动访问虚拟机是“入方向”默认被NAT挡住。解决方法有两种一是端口转发把宿主机某端口映射到虚拟机IP和端口二是改用桥接模式让虚拟机直接拿到局域网IP。端口转发的配置在虚拟网络编辑器选中VMnet8点NAT设置添加映射。比如宿主机8080转虚拟机192.168.124.188的80。配好后宿主机浏览器访问http://127.0.0.1:8080。如果还不通检查虚拟机服务是否监听0.0.0.0而不是只监听127.0.0.1再检查虚拟机防火墙和宿主机防火墙是否放行。4.5 虚拟机连PLC/TIA场景该怎么选用VMware连PLC做调试时网络模式选择很关键。NAT模式适合让虚拟机上网不适合让虚拟机主动发现同网段的PLC。PLC通常在同一物理局域网里虚拟机的NAT地址对PLC不可见PLC也看不到虚拟机。更合适的做法是桥接模式让虚拟机直接加入宿主机所在局域网拿到同网段IP。如果只是做离线编程不连真实设备NAT或仅主机都可以。若必须用NAT又想连PLC需要在宿主机上做端口转发或路由但这类配置对广播和组播支持有限调工业协议容易出怪问题。我的经验是涉及真实PLC、HMI、摄像机、打印机这类局域网设备优先桥接少折腾NAT。4.6 常见问题速查表现象可能原因快速处理Ubuntu网络连接激活失败netplan语法错、网卡名不对、NetworkManager未接管检查nmcli、journalctl改配置后netplan apply虚拟机无网络适配器虚拟机设置未添加、宿主机虚拟网卡异常添加适配器还原虚拟网络VMnet1有感叹号驱动异常、安全软件拦截卸载重装虚拟网卡重装VMware能ping通IP不能解析域名DNS未配或错误改DNS为223.5.5.5检查resolv.conf宿主机ping不通虚拟机宿主机防火墙、虚拟机防火墙、网段不一致关闭临时防火墙测试核对VMnet8主机访问虚拟机网站失败NAT入方向被挡配置端口转发或换桥接共享文件夹失败VMware Tools异常、网络重置重装Tools重启虚拟机克隆机IP冲突MAC重复重新生成MAC释放续租DHCP5. 进阶配置端口转发、固定IP和多网卡组合5.1 NAT端口转发让宿主机访问虚拟机Web服务端口转发是NAT模式下最实用的补丁。假设虚拟机IP是192.168.124.188里面跑了Nginx监听80端口。打开虚拟网络编辑器选中VMnet8点“NAT设置”点“添加”。主机端口填8080类型TCP虚拟机IP填192.168.124.188虚拟机端口填80。确定后宿主机浏览器访问http://127.0.0.1:8080就能看到虚拟机的页面。原理是宿主机8080的入站连接被VMware NAT设备转给了虚拟机80。注意主机端口不要和宿主机已占用端口冲突可以用netstat -ano查。如果转发不生效先确认虚拟机服务监听地址是0.0.0.0:80而不是127.0.0.1:80。Ubuntu下可以用ss -tlnp查看监听。Windows下用netstat -ano | findstr :80服务只监听本地回环时端口转发也救不了。5.2 固定IP的两种做法固定IP有两条路在VMware DHCP里绑定MAC或者在虚拟机系统里配静态。DHCP绑定更省心虚拟网络编辑器里DHCP设置中有“添加”按钮把虚拟机MAC和期望IP绑定虚拟机继续用DHCP但每次拿到同一个地址。系统静态更直接Linux用netplanWindows用IPv4属性。我的建议是实验环境用DHCP绑定减少系统配置出错需要精确控制、经常换网卡时用系统静态。无论哪种都要避开DHCP动态池。比如动态池是.128到.254静态就选.10到.100。还要注意克隆虚拟机时MAC会变DHCP绑定也要跟着更新否则固定IP会失效。5.3 NAT加仅主机既能上网又能隔离实验有些实验既要虚拟机能上网装包又要宿主机和虚拟机之间有隔离内网。这时可以给虚拟机加两块网卡一块NAT用于上网一块仅主机用于宿主机与虚拟机内部通信。仅主机模式走VMnet1默认不能上外网但宿主机可以稳定访问虚拟机。配置时在虚拟机设置里添加网络适配器一个选NAT一个选仅主机。进系统后用ip addr会看到两块网卡。注意默认路由要指向NAT那块网卡的网关别让仅主机网卡抢了默认路由。Linux下可以用ip route确认default via 192.168.124.2。如果默认路由跑到VMnet1网段外网就不通。可以在netplan里给仅主机网卡不配网关只配地址和掩码。这样上网走NAT内部实验走仅主机互不干扰。5.4 快照、克隆与网络配置迁移网络配置改错时快照是最快的后悔药。建议在虚拟机网络正常后打一个快照命名比如“NAT网络正常”。以后改IP、装服务、调端口转发前再打一个。克隆虚拟机时VMware会询问是否重新生成MAC务必选是。克隆后如果IP冲突先在虚拟机里释放DHCP再重新获取。迁移虚拟机到另一台宿主机时VMnet8子网可能不同原来的静态IP和端口转发会失效。迁移前记录虚拟机IP、网关、DNS、VMnet8子网、NAT端口转发规则。到新宿主机后先还原虚拟网络默认设置再按记录重建。不要直接把旧宿主机的虚拟网络配置文件复制过去驱动和网卡标识不同容易出玄学问题。6. 实操心得我平时排障和维护的顺序6.1 先分层再动手网络排障最忌讳一上来就重装。我习惯按层查物理层看宿主机能不能上网、虚拟网卡是否存在虚拟网络层看VMnet8类型、子网、DHCP、NAT服务虚拟机网卡层看适配器是否连接、模式是否NAT系统层看IP、路由、DNS应用层看服务监听、防火墙、端口转发。每一层只改一个变量改完立刻测。这样即使出错也知道是哪一步引入的。比如ping网关不通就停在虚拟网络层别去折腾DNS。ping公网IP通但域名不通就只查DNS。把复杂问题拆成小问题排障速度会快很多。6.2 备份虚拟网络配置虚拟网络编辑器里的配置容易被“还原默认设置”清掉尤其是端口转发、DHCP绑定、自定义子网。我的做法是建一个文本文件记录VMnet8子网、网关、DHCP范围、静态IP分配表、端口转发规则。虚拟机里的netplan文件也备份一份Windows虚拟机的IP配置截图保存。这样换电脑、重装VMware、恢复快照后能快速重建。端口转发规则尤其要记因为界面上不能导出。你要是管理多台虚拟机建议给每台机器编号记录MAC、IP、用途、端口后面排查冲突会轻松很多。6.3 什么时候切桥接更省事NAT不是万能。需要被局域网访问、需要连PLC、需要做设备发现、需要虚拟机像一台真实电脑一样出现在网络里时桥接往往更省事。桥接的代价是虚拟机要占用物理网段IP可能和公司网络策略冲突也可能因为无线网卡或安全软件导致桥接失败。遇到桥接不通先确认宿主机物理网卡选对再确认没有多个物理网卡抢桥接。我的经验是学习和开发默认NAT涉及局域网设备联调就切桥接纯内部实验用仅主机。三种模式没有谁绝对更好关键看谁需要主动找到谁。配置前把这个问题想清楚后面能少走很多弯路。
返回列表