ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

VMware桥接模式配置:CentOS虚拟机与局域网设备互通指南

VMware桥接模式配置:CentOS虚拟机与局域网设备互通指南 Windows宿主机加VMware CentOS虚拟机再拖上同一个Wi-Fi下面的几台实体电脑想让它们之间互相ping通、互传文件、直接访问服务这个需求我太熟了。玩虚拟机的人大概率都经历过这个阶段虚拟机刚装完宿主机能访问它但换个设备就断了或者虚拟机能上网但宿主机反而连不上气得人想砸键盘。这篇文章就围绕这个场景把VMware的网络原理、配置步骤、踩坑点一次性讲清楚。不管你是刚接触虚拟机的新手还是被网络折腾过几次的老手按照这里的顺序走一遍大概率能解决。1. 内容整体设计与思路拆解1.1 为什么“互相访问”这么难先说清楚一个核心事实VMware虚拟机默认的网络模式根本不是为了“被外部设备访问”设计的。大多数人安装CentOS虚拟机时一路点“下一步”网络模式保持默认的NAT。在NAT模式下虚拟机躲在宿主机背后由宿主机充当“代理网关”。虚拟机可以主动访问外面的世界但外面的设备想主动找虚拟机不好意思无门。你从同一Wi-Fi下的另一台电脑去ping虚拟机的IP大概率直接超时因为虚拟机的IP是VMware虚拟出来的私有网段其他实体设备根本不知道这个网段怎么走。所以“三者互相访问”这件事本质上是一个网络模式选型问题。你要让虚拟机直接暴露在局域网里像一个普通的实体电脑一样拥有自己的局域网IP而不是蜷缩在NAT后面。1.2 三种网络模式的核心差异VMware Workstation提供三种网络模式很多人背过概念但没真正理解我用最直白的话拆一下桥接模式Bridged虚拟机直接“插”到你家的路由器上。宿主机网卡变成一个交换机虚拟机通过它跟同一局域网的所有设备平起平坐。此时虚拟机的IP由路由器分配其他设备可以直接访问它它也能直接访问其他设备。这就是实现“三者互相访问”的关键。NAT模式宿主机充当网关虚拟机在一个虚拟内网里。默认状态下外部设备看不见虚拟机但虚拟机可以上网。适合“只需要虚拟机上网”的场景。仅主机模式Host-only虚拟机只能和宿主机通信完全隔离外部网络。通常用于测试环境避免虚拟机网络影响局域网。要达成标题描述的目标核心选择就是桥接模式。1.3 方案选型的补充考量有人会问那NAT模式加端口转发能不能实现能但很麻烦。你得在VMware的NAT设置里给每个服务手动映射端口比如把宿主机的2222端口映射到虚拟机的22端口这样外部设备访问宿主机IP加2222端口才能连到虚拟机的SSH。如果虚拟机里跑了多个服务端口映射会越来越多管理成本直线上升。而且映射只对TCP/UDP端口有效像ping这种ICMP协议还不好转发。桥接模式就不存在这个问题。虚拟机直接拿一个局域网IP所有服务、协议、端口统统对外开放外部设备访问虚拟机就跟访问一台物理机一模一样。所以我个人强烈建议只要你的需求里包含“局域网内的其他设备要主动访问虚拟机”就直接选桥接模式不要绕弯子。2. 核心细节解析与实操要点2.1 桥接模式网卡选择的讲究在VMware里给虚拟机设置桥接模式时有一个下拉框叫“桥接到”很多人忽略了这个选项但它恰恰是最容易出坑的地方。如果你宿主机同时有有线网卡、无线网卡、蓝牙网卡VMware默认的“自动”设置不一定每次都能选中你实际连接Wi-Fi的那块网卡。万一它桥接到了一个没在用的网卡上虚拟机就拿不到网络或者能拿到但局域网内不通。我建议直接手动指定在虚拟机设置里网络连接选“桥接模式”然后把“桥接到”明确指向当前连接Wi-Fi的那块无线网卡。不同版本VMware显示的名字不一样常见的是“Intel(R) Wi-Fi 6 AX201”之类的字样或者“自动”旁边有一个具体的网卡名称。选对网卡之后网络稳定性会好很多。这一点尤其在笔记本上很重要因为笔记本同时存在有线网口和Wi-Fi网卡的概率非常高。2.2 虚拟机内部网卡与硬件版本除了VMware层面的设置虚拟机内部的网卡类型也值得注意。CentOS 7及以下版本默认支持比较好的是e1000网卡CentOS 8以上用vmxnet3表现更好。如果安装时选择了默认的VMXNET 3而系统里没有对应驱动网卡可能直接不识别表现为ifconfig看不到任何网卡。实操建议如果你不确定安装CentOS虚拟机时在“自定义硬件”里把网卡类型选为e1000e这是兼容性比较折中的选项CentOS 7/8/9都能正常识别。当然如果是新装的CentOS Stream 9或者CentOS 9vmxnet3通常自带驱动也没问题。另外一个容易忽略的点给虚拟机分配的内存和CPU不要太抠门。虽然网络互通跟内存关系不大但如果你用的CentOS带图形界面而只给了1GB内存系统会卡到怀疑人生操作效率极低排查问题也容易误判。推荐至少2GB内存、双核CPU起步。2.3 宿主机防火墙与虚拟网卡的影响很多人在桥接模式下发现虚拟机跟外部设备通了但宿主机跟虚拟机的通信偶尔抽风。这往往跟Windows上VMware创建的虚拟网卡有关。VMware在安装时会创建VMnet1和VMnet8两块虚拟网卡分别对应仅主机模式和NAT模式。如果你切换到了桥接模式这两块网卡理论上不影响通信但如果它们配置了错误的静态IP或者网关也可能在Windows的路由表里造成干扰。一个比较干净的排查方式在Windows命令行里执行route print看一下到虚拟机网段的路由是否走了正确的网卡。如果发现有走VMnet8的异常路由用route delete删掉或者干脆禁用VMnet1和VMnet8网卡。反正桥接模式用不到它们禁用之后反而省心。不过注意禁用VMnet8之前确认你确实不再需要NAT模式。3. 实操过程与核心环节实现3.1 VMware侧的网络模式切换第一步在VMware Workstation主界面里选中你的CentOS虚拟机右键“设置”。第二步在“硬件”选项卡里选中“网络适配器”右侧勾选“桥接模式”并且确认“复制物理网络连接状态”这个选项根据情况勾选。这里有个细节如果宿主机是通过Wi-Fi连接网络的建议勾选“复制物理网络连接状态”特别是在笔记本经常切换网络环境的场景下这个选项有助于虚拟机跟随宿主机网络状态变化。第三步把“桥接到”从“自动”改为具体的无线网卡。如果列表里有很多选项拿不准就选名称里带Wi-Fi字样或者型号和你实际网卡接近的那个。第四步点击确定启动虚拟机。3.2 CentOS系统内的网络配置虚拟机启动进入CentOS系统后需要确认系统是否拿到了IP地址。用ip addr命令查看网卡状态。如果网卡显示没有IP说明DHCP没有自动分配成功需要手动配置。这里分两种情况CentOS 7及以下和CentOS 8以上网络配置方式有区别。CentOS 7的配置方法vi /etc/sysconfig/network-scripts/ifcfg-ens33假设你的网卡名称是ens33把文件内容调整成这样TYPEEthernet BOOTPROTOdhcp NAMEens33 DEVICEens33 ONBOOTyes关键就是BOOTPROTOdhcp和ONBOOTyes这两行。很多人改了配置不生效就是ONBOOT还是no系统启动时压根不会激活这块网卡。修改完成后执行systemctl restart network或者直接service network restart。CentOS 8/9的配置方法这些版本默认使用NetworkManager推荐用nmcli来操作比改配置文件更省心nmcli con mod ens33 ipv4.method auto nmcli con up ens33两条命令搞定。配置完成后再次执行ip addr正常的话会看到网卡拿到了一个和路由器同网段的IP比如你家的路由器是192.168.1.1那虚拟机大概率会拿到192.168.1.x的地址。3.3 验证宿主机与虚拟机的互访拿到IP后第一件事是验证宿主机能不能ping通虚拟机以及虚拟机能不能ping通宿主机。在Windows命令行里执行ping 虚拟机IP在CentOS终端里执行ping 宿主机IP两边都能通说明桥接成功。如果宿主机能ping通虚拟机但虚拟机ping不通宿主机绝大多数情况是Windows防火墙拦截了ICMP请求。Windows默认的防火墙策略会阻止外部ping入解决办法有两个一是临时关闭Windows防火墙测试二是单独放行ICMPv4-In规则。我个人建议放行规则不要长期关闭防火墙毕竟安全性是底线。放行ICMP的PowerShell命令New-NetFirewallRule -DisplayName Allow ICMPv4-In -Protocol ICMPv4 -Action Allow3.4 同一Wi-Fi下其他实体电脑的互访这个环节基本不用改配置只要你确认虚拟机确实拿到了和路由器同网段的IP而且路由器的“AP隔离”功能没有开启其他实体电脑就能直接访问虚拟机。这里插一句很多人家里路由器默认开启“AP隔离”或者叫“客户端隔离”这个功能的作用就是不允许同一Wi-Fi下的设备互相通信目的是防止蹭网者访问局域网内的其他设备。如果你发现宿主机和虚拟机、虚拟机和其他电脑之间都ping不通先检查路由器后台有没有开启这个选项把它关掉。正常情况下在另一台实体电脑上打开命令行ping 虚拟机IP能通说明三者互访已经成立。为了进一步验证访问服务的能力可以在虚拟机上起一个简单的HTTP服务yum install -y nginx systemctl start nginx然后在任意一台电脑的浏览器里访问虚拟机的IP能看到Nginx欢迎页就说明完全没问题了。这也是我用来跟客户演示“虚拟机对外提供服务”时最常用的小实验。3.5 静态IP配置的进阶操作DHCP分配IP确实省心但有一个隐患路由器的租约时间到了之后虚拟机可能换IP。如果你在虚拟机上部署了服务别的外部设备记的是旧IP一旦变了就会连不上。解决思路有两种第一种是在路由器后台做MAC地址和IP绑定把虚拟机的MAC地址固定分配一个IP这种方式需要在路由器上操作不同品牌界面不一样。第二种是在虚拟机里手动配置静态IP。CentOS 7的静态IP配置示例vi /etc/sysconfig/network-scripts/ifcfg-ens33内容改成TYPEEthernet BOOTPROTOstatic NAMEens33 DEVICEens33 ONBOOTyes IPADDR192.168.1.200 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS1192.168.1.1 DNS28.8.8.8注意IPADDR要选一个路由器DHCP分配范围之外的地址避免冲突。GATEWAY要填你路由器的管理地址DNS1可以用路由器的地址也可以用运营商的DNS。改完之后重启网络服务生效。CentOS 8/9用nmcli设置静态IPnmcli con mod ens33 ipv4.addresses 192.168.1.200/24 nmcli con mod ens33 ipv4.gateway 192.168.1.1 nmcli con mod ens33 ipv4.dns 192.168.1.1 8.8.8.8 nmcli con mod ens33 ipv4.method manual nmcli con up ens33这里有个小提醒静态IP必须和路由器在同一网段网关必须和路由器管理地址一致否则虚拟机可以上网但访问不了别的设备。我见过不少人卡在这一步查了半天发现网关填错了。4. 常见问题与排查技巧实录4.1 虚拟机桥接后上不了网这个现象很典型虚拟机设置了桥接模式其他设备能ping通虚拟机但虚拟机自己上不了外网。优先检查DNS配置。桥接模式下虚拟机直接从路由器获取IP和DNS正常情况下不会出问题。但如果你之前手动配置过静态IP把DNS写错了或者没写就会出现“能访问局域网但不能解析域名”的情况。排查方法在虚拟机里执行ping 8.8.8.8如果能通说明网络通畅问题出在DNS。再执行cat /etc/resolv.conf看DNS配置确保至少有一个可用的DNS服务器。如果DNS有问题手动改一下配置或者用nmcli重新设置一下。另一种可能虚拟机获取的IP和局域网内其他设备冲突。用ip addr看一下IP然后在宿主机上执行arp -a检查同网段有没有IP冲突的提示。一般家用路由器DHCP冲突概率不高但如果你手动设置过静态IP而路由器刚好把同一个地址分配给了其他设备就会出现断断续续不通的现象。4.2 宿主机能ping通虚拟机但其他电脑ping不通这种情况说明虚拟机桥接本身没问题问题大概率出在Wi-Fi路由器的隔离策略上。前面提到的“AP隔离”是首要怀疑对象特别是手机上连Wi-Fi无法访问局域网设备的时候基本就是它。另外还有一种情况其他电脑连接的是访客网络Guest Network或者5G频段而宿主机连接的是2.4G频段。有些路由器默认对访客网络做了隔离不同频段之间也可能做了隔离策略。检查路由器后台确认所有设备连接同一个Wi-Fi并且没有开启隔离功能。4.3 Windows防火墙拦截导致ping超时这个问题非常常见。你从宿主机ping虚拟机通了从虚拟机ping宿主机超时。原因几乎确定是Windows防火墙拦截了ICMP入站请求。我用一个命令解决过很多次这个问题New-NetFirewallRule -DisplayName Allow ICMPv4-In -Protocol ICMPv4 -Action Allow执行后再次尝试ping宿主机一般就通了。如果不成功再检查专用网络和公用网络的防火墙配置文件是不是把这条规则落到了错误的位置。Windows防火墙的规则可以按网络配置文件来区分你当前的网络环境属于“公用网络”的话规则里就要勾选Public这个配置文件。4.4 VMware提示“无法连接到虚拟机”这个报错通常有几种情况一是在虚拟机正在启动时VMware的虚拟机服务没有正常运行二是权限不够VMware Workstation以普通用户启动没权限访问虚拟机的配置文件三是Windows Hyper-V功能与VMware冲突。解决办法依次尝试重新以管理员身份运行VMware在Windows服务里检查VMware Authorization Service是否已经启动如果本机同时开启了Hyper-V需要关闭Windows功能里的Hyper-V以及内核隔离的内存完整性否则VMware的虚拟化引擎和Hyper-V抢资源导致虚拟机直接打不开。4.5 如何从Windows复制文件到CentOS热搜词里有一个很实际的痛点“如何从windows复制到linux”。正常情况下VMware Tools安装好之后宿主机和虚拟机之间是可以双向拖拽文件的。但很多人在CentOS里装VMware Tools时遇到“没有数字签名不能安装”的提示或者安装失败导致剪贴板和拖拽不可用。这种情况下最稳妥的替代方案是用SCP命令。在Windows命令行里scp C:\path\to\file.txt root虚拟机IP:/root/前提是虚拟机的SSH服务已开启systemctl start sshd systemctl enable sshd或者在Windows上安装WinSCP、MobaXterm这类图形化SFTP工具连上虚拟机之后直接拖文件体验也很顺畅。4.6 CentOS磁盘扩容的关联问题如果你在虚拟机上部署了比较多的服务CentOS默认的20GB磁盘经常告急。热搜词里的“centos扩容”也反映了这个问题。VMware磁盘扩容的流程先在VMware设置里把磁盘大小调大然后在CentOS系统里扩展分区和文件系统。CentOS 7的分区扩容命令大致是fdisk /dev/sda # 删除原有分区重新创建但不要改变起始扇区 partprobe resize2fs /dev/sda1这个操作有一定风险因为fdisk重新分区的过程中一旦起始扇区发生变化数据可能丢失。如果你对分区操作不熟另一个思路是给虚拟机加一块新磁盘挂载到某个目录下把大文件放进去。新磁盘的操作比扩容安全得多适合新手尝试。5. 一些补充经验与后续扩展5.1 虚拟机快照是保命符在网络配置过程中改错了配置导致虚拟机无法启动或者网络起不来是常有的事。我的习惯是在装好系统、网络也调通之后立刻打一个快照。后续做任何高风险操作之前再打一个快照。这样一来出了问题恢复快照就行不用重装系统省下的时间至少以小时计算。在VMware里打快照非常简单虚拟机菜单 - 快照 - 拍摄快照。起名字的时候写清楚当前状态比如“网络已调通-静态IP 192.168.1.200”这类描述性的名字方便日后回退。5.2 多台虚拟机的IP规划如果你不只是跑一台CentOS而是同时跑了好几台虚拟机做集群实验桥接模式下IP规划更要提前思考。每台虚拟机最好都设置静态IP并且写清楚每台机器的角色和IP。不然临时想起来要跟某台虚拟机通信还得先用VMware的界面登录进去看IP效率很低。我自己的习惯是网络规划表虚拟机名称角色描述静态IP系统版本CentOS-Node1主节点192.168.1.201CentOS 7.9CentOS-Node2计算节点192.168.1.202CentOS Stream 9CentOS-Node3存储节点192.168.1.203CentOS 8.5做个简单的表格贴在自己的笔记里比什么都强。5.3 开放到局域网后的安全提醒虚拟机通过桥接直接暴露在局域网后意味着同一网络里的任何设备都能尝试访问它。如果你的虚拟机只是做测试用不涉及敏感数据问题不大。但如果虚拟机里跑了数据库、文件共享服务一定要设置强密码并且只开放必要的端口。钉在门上的规则不用的服务就关了。比如CentOS默认的防火墙是firewalld可以通过它来控制端口开放systemctl start firewalld firewall-cmd --permanent --add-servicessh firewall-cmd --permanent --add-servicehttp firewall-cmd --reload这样只放行SSH和HTTP其他端口默认拒绝能大幅减少被扫描的风险。同理Windows宿主机在局域网共享文件时尽量不要用简单的共享密码设置好权限再开放。5.4 与Docker场景的联动思路热搜词里还有“docker windows”说明不少人是想在Windows上跑Docker或者用虚拟机来跑Docker集群。如果你的CentOS虚拟机是用来跑Docker的桥接模式的优势会进一步放大。比如在虚拟机的Docker里起了一个容器映射了8080端口那么局域网内的其他电脑直接访问虚拟机的IP加8080端口即可完全不用额外配置端口转发。这对学习Docker、搭建微服务测试环境很有价值。我实际试过在CentOS虚拟机上用Docker部署一个简单的Nginx加一个Spring Boot应用外部电脑通过浏览器直接访问虚拟机的IP加映射端口体验跟访问一台云服务器几乎没有区别。这个组合很适合用来练手成本低效果直观。5.5 如果实在搞不定还有招虽然桥接模式是首选但有些特殊网络环境比如公司网络开启了端口安全、路由器关闭了DHCP、网络管理员禁止陌生人接入桥接模式可能行不通。这种时候退而求其次用NAT加端口转发也能实现“外部设备访问虚拟机服务”的效果只是不能ping通虚拟机本身。NAT模式下设置端口转发的方法编辑虚拟机设置 - 网络适配器 - NAT模式 - 点击“NAT设置” - 添加端口转发规则。把宿主机的某个端口映射到虚拟机的22端口用于SSH把8080映射到虚拟机的8080用于访问服务。外部设备访问宿主机IP加映射端口就能连到虚拟机里的服务算是桥接模式不可用时的备选方案。写在最后的实际操作心得这个“Windows宿主机加VMware CentOS虚拟机加Wi-Fi下其他电脑互相访问”的场景我在不同时期做过很多次从最早的CentOS 6到现在的CentOS Stream 9都试过。整体的感觉是理解VMware网络模式的工作方式比记配置命令更重要。桥接模式的原理就一句话虚拟机蹭宿主机的网卡直接在局域网里拿一个身份。理解了这一点很多配置细节都是水到渠成的事。最后再分享一个我现在仍然坚持的小习惯每次修改完网络相关配置先别急着验证业务先把ping这条路从虚拟机到宿主机、宿主机到虚拟机、其他电脑到虚拟机整个链路全部跑一遍。链路通到哪一层问题就定位到哪一层排查效率能上来很多。虚拟机和网络这个东西慢就是快按顺序来一定不会白折腾。
返回列表