拓冰建站拓冰建站
首页 / 资讯中心 / 正文

VMware桥接模式配置指南:局域网设备访问虚拟机服务

同一局域网下多设备访问 VMware 虚拟机服务桥接模式算是最直接、也最容易踩坑的一条路。很多人装了虚拟机配了桥接结果宿主机能访问手机连不上或者虚拟机压根没网再或者IP冲突搞得整个办公室断网。这篇教程就专门解决这些问题从网络模式的选择逻辑、桥接模式的完整配置、固定IP的细节到VMware里虚拟机的网络服务放行、Windows和Linux两种系统下的实操再到局域网内常见故障的排查思路一次性讲明白。适合正在用VMware Workstation做开发测试、搭本地服务或者想在自己电脑上架个服务给手机、平板、同事电脑一起访问的朋友。1. 内容整体设计与思路拆解1.1 桥接模式到底解决了什么问题先说结论桥接模式Bridged Mode就是让虚拟机变成你局域网里的一台独立电脑。它和宿主机你正在用的这台物理机处于完全平等的网络地位有自己的IP地址能直接和其他设备通信。打个比方NAT模式像是你住在一栋大公寓里虚拟机是你的室友你俩共用一条网线但外面的人找不到你室友的房间号码要联系他得先通过你转达。而桥接模式是给你室友单独办了张门禁卡他自己有独立的房间号外面的人可以直接找到他。这个特性决定了桥接模式特别适合以下场景局域网内其他设备需要直接访问虚拟机里运行的服务Web服务、数据库、API接口、共享文件夹等虚拟机需要参与局域网内的通信比如设备发现、P2P通信、广播消息你需要调试网络相关的应用希望虚拟机的网络行为和真实物理机完全一致我见过不少人纠结用NAT加端口转发不也能访问吗确实可以但两个问题很现实一是NAT模式下端口转发配置起来繁琐每开一个服务都要手动加一条映射规则二是部分应用和服务依赖广播、组播或者多端口动态通信NAT转发根本cover不住只有桥接模式才能让虚拟机的网络行为变得透明。1.2 为什么不用NAT或仅主机模式VMware Workstation 默认提供三种网络模式很多初学者不看场景就直接选默认的NAT后面出了问题也不知道为什么。这里我把三种模式拉出来对比一下网络模式虚拟机IP来源宿主机能否访问虚拟机局域网设备能否访问虚拟机虚拟机能否访问外网适用场景NAT由VMware虚拟NAT网关分配如192.168.xxx.0/24网段能默认不能需端口转发能虚拟机仅需上外网、不想暴露给局域网桥接由局域网内真实路由器DHCP分配能能能需要虚拟机向局域网提供服务的场景仅主机由VMware虚拟DHCP分配仅宿主机可见网段能不能不能仅需宿主机与虚拟机通信、强调隔离从表格里能看出来桥接模式和另外两种模式的本质区别在于它直接共享了宿主机的物理网卡和局域网内的其他设备处于同一个二层网络。这也是为什么桥接模式下的虚拟机在路由器后台能看到一个独立的设备条目而NAT模式下你只能看到宿主机一台设备。1.3 用桥接模式之前先想清楚的三个问题先说几个容易翻车前就该确认的点别等配置完了才发现方向不对第一你的网络环境允不允许。有些办公楼、酒店、学校宿舍的网关开启了端口隔离或AP隔离这种情况下就算配好了桥接天其他设备也访问不到虚拟机。判断方法很简单把你的物理机当成虚拟机用手机流量开热点让物理机连上去看其他设备能不能ping通物理机。如果连物理机都ping不通那说明网络策略禁止了设备间互访桥接模式再折腾也没意义。第二IP地址够不够用。桥接模式下虚拟机需要从路由器获取一个独立的IP。如果你所在网络的路由器DHCP地址池很小比如就分配100个地址但已用了99个虚拟机可能拿不到地址。这是我踩过一次的坑当时在酒店用桥接模式虚拟机怎么都获取不到IP后来发现是酒店的网关开启了每个MAC地址只分配一个IP的限制。第三虚拟机操作系统是否需要额外配置静态IP。这一步很关键也是后面要重点讲的。DHCP分配的IP随时可能变化你今天配好了访问地址明天路由器一重启IP变了手机里存的地址就全失效了。做服务给局域网用的虚拟机建议直接配静态IP。2. 核心细节解析与实操要点2.1 桥接模式配置的核心参数与加速配置步骤在VMware Workstation里开启桥接模式操作其实就几步打开虚拟机设置选择网络适配器在网络连接处选择桥接模式勾选复制物理网络连接状态但光这么选完不一定就能用重点是第三步这个复制物理网络连接状态很多教程一笔带过实际影响却不小。它的作用是当宿主机在无线网络和有线网络之间切换比如拔网线、切换WiFi时虚拟机的网络会自动跟着重新适配。如果你不勾选虚拟机可能一直绑定着之前那块物理网卡的桥接关系网络一换就断了。建议勾选上尤其是笔记本用户。接下来打开虚拟机系统正常开机后系统会自动通过DHCP获取IP。如果要确认是否成功在Linux虚拟机里执行ip addr show在Windows虚拟机里执行ipconfig看看是否能拿到一个和宿主机在同一个网段的地址。比如宿主机IP是192.168.1.100虚拟机应该也拿到192.168.1.x的地址。这里有个很常见的坑点虚拟机里显示的网络连接是已连接但拿不到IP地址。最常见的原因有两个一是宿主机的物理网卡启动了随机硬件地址功能导致虚拟机MAC地址在路由器那边频繁变更二是虚拟机网卡默认生成的MAC地址和局域网内某个设备冲突。解决办法是在VMware虚拟机设置里把MAC地址改成固定值在.vmx配置文件里加一行ethernet0.addressType vpx ethernet0.generatedAddress 00:0c:29:xx:xx:xx ethernet0.address 00:0c:29:xx:xx:xx其中00:0c:29:xx:xx:xx是VMware虚拟机的MAC地址段需要改成你想固定的地址前三位保持00:0c:29不变后面六位十六进制数可以自己指定但建议不要和局域网内其他设备重复。2.2 静态IP配置让服务地址永远不变这是桥接模式下最重要的一个环节也是很多人忽略的。虚拟机默认通过DHCP获取IP但DHCP租约到期或者路由器重启IP就可能变。你要是运行的是一个给整个办公室用的内部系统IP一变所有同事浏览器里的收藏夹就全挂了。Linux虚拟机以Ubuntu Server为例配静态IP的方法Ubuntu 18.04以上的系统用的是netplan编辑配置文件sudo vim /etc/netplan/01-network-manager-all.yaml写入以下内容注意缩进用空格不能用Tabnetwork: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.1.88/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 192.168.1.1 - 223.5.5.5其中192.168.1.88是你给虚拟机分配的固定IP192.168.1.1是你的路由器网关地址223.5.5.5是阿里公共DNS。执行让配置生效sudo netplan applyWindows虚拟机配静态IP的方法打开控制面板 - 网络和 Internet - 网络连接右键虚拟机网卡选择属性双击Internet 协议版本 4 (TCP/IPv4)选择使用下面的 IP 地址填入IP地址和宿主机同网段比如192.168.1.90子网掩码255.255.255.0默认网关路由器管理地址如192.168.1.1首选DNS服务器192.168.1.1 或 223.5.5.5配完之后在宿主机上ping一下虚拟机的IP能通就说明网络层没问题了。2.3 多网卡宿主机的桥接网卡选择如果你的宿主机有多块物理网卡有线网卡、无线网卡、还有虚拟网卡VMware的桥接模式默认是自动选择网卡的。这就会导致一个诡异的现象虚拟机明明配好了静态IP但局域网里其他设备就是访问不到而宿主机却可以。原因就是VMware把虚拟机桥接到了错误的物理网卡上。比如你实际用WiFi上网但VMware把虚拟机的桥接绑定到了有线网卡上而有线网卡根本没插网线。解决方法是手动指定桥接目标网卡。在VMware Workstation顶部菜单找到编辑 - 虚拟网络编辑器选择VMnet0默认用于桥接把桥接到从自动改成你实际在用的那块物理网卡如果你用WiFi上网选Intel(R) Wireless-AC 9560这类无线网卡如果你用有线网络上网选Realtek PCIe GbE Family Controller这类有线网卡这里有个细节你通过网络名称来判断。在Windows的控制面板 - 网络连接里看哪块网卡有网络字样且显示Internet访问就选哪块。改完之后重启虚拟机网络再检查一下虚拟机里的IP是否还能正常获取到。如果虚拟机IP变成169.254.x.xWindows或者提示网卡未激活说明桥接网卡选得还是不对。2.4 DNS与网段冲突局域网访问失败的隐形杀手很多人在局域网访问虚拟机服务时服务本身没问题IP能ping通但就是打不开页面、连不上数据库。这种问题十有八九出在DNS或网段冲突上。DNS问题典型的表现为在同一局域网内你用虚拟机IP能访问但用虚拟机的主机名hostname访问总是超时。解决办法是在需要访问虚拟机的设备上配置hosts文件或者直接用IP访问省得依赖局域网DNS。网段冲突则更隐蔽。比如你的路由器本身是192.168.1.0/24网段但你的宿主机上还开着VMware的虚拟网卡VMnet1、VMnet8它们的网段是192.168.123.0/24这样的私有网段。如果虚拟机配置静态IP时不小心配成了和VMnet网段相同的地址就会出现访问不了的怪问题——因为流量被路由进了虚拟网卡而不是物理局域网。排查方法很简单在宿主机上执行route printWindows或ip routeLinux看看有没有多余的网关记录把特定网段的流量引走了。遇到这种情况直接换成明确的192.168.1.x网段地址就好。3. 实操过程与核心环节实现3.1 从零开始桥接模式下的网络访问完整流程我把整个实操流程串一遍按照这个顺序做基本不会漏掉关键环节。第一步确认物理机网络信息。在宿主机上打开命令行输入Windows下ipconfigLinux下ip addr show记下你当前物理网卡的名称、IP地址、子网掩码和默认网关。比如网卡WLAN无线网卡IPv4地址192.168.1.107子网掩码255.255.255.0默认网关192.168.1.1这组数据就是后面配置虚拟机的参照。第二步设置VMware桥接网络。打开VMware Workstation点击编辑 - 虚拟网络编辑器确认VMnet0存在且类型是桥接。在桥接到下拉框里选择刚才记录的那块物理网卡。如果你打开后发现VMnet0不存在可以点添加网络选择VMnet0虚拟网络类型选桥接然后指定桥接到的物理网卡。第三步虚拟机网络设置选择桥接模式。右键虚拟机选择设置点击网络适配器选择桥接模式勾选复制物理网络连接状态。确认后开机。第四步进入虚拟机系统配置网络。这一步分Linux和Windows两种情况前面已经详细写了配置方法这里不重复了。只补充一点配置完静态IP后一定要记得重启网络服务或者直接重启虚拟机让配置完全生效。第五步验证连通性。依次执行这些检查项在虚拟机里ping宿主机ping 192.168.1.107在宿主机里ping虚拟机ping 192.168.1.88在局域网其他设备上ping虚拟机以手机为例保证手机和宿主机连的是同一个WiFi打开终端类AppiOS用TermiusAndroid用Termux执行ping 192.168.1.88如果都能通说明网络层没问题。接下来就是验证具体服务的连通性了。第六步验证虚拟机内的服务。比如虚拟机里跑了一个Web服务监听在8080端口。在局域网任意设备浏览器里访问http://192.168.1.88:8080如果页面能打开整个链路就通了。3.2 VMware虚拟机内部防火墙放行与常用服务端口开放网络通了不代表服务就能被访问虚拟机系统内部的防火墙还会挡一层。这是很多人最后卡住的地方——IP能ping通但端口就是连不上。Linux虚拟机关闭或放行防火墙端口Ubuntu等使用ufw的系统sudo ufw status看到状态是active说明防火墙在运行。可以用两种方式处理方式一直接放行特定端口。比如要放行8080端口sudo ufw allow 8080/tcp方式二如果你只是在内网测试图省事可以临时关闭防火墙不推荐生产环境sudo ufw disableCentOS/RHEL使用firewalldsudo systemctl status firewalld sudo firewall-cmd --zonepublic --add-port8080/tcp --permanent sudo firewall-cmd --reloadWindows虚拟机放行防火墙端口在Windows虚拟机里打开控制面板 - Windows Defender 防火墙 - 高级设置点击左侧入站规则右侧新建规则选择端口协议选TCP特定本地端口填你要放行的端口如8080操作选允许连接配置文件全部勾选名称随意填。这里我要多提醒一句如果你在虚拟机里跑的是数据库服务比如MySQL的3306端口或者默认情况下只监听了127.0.0.1那么即使防火墙放行了外部也连不上。判断方法是看服务监听在哪个地址上。在Linux虚拟机里执行ss -tlnp看输出结果中端口对应的地址如果是127.0.0.1:3306说明数据库只回环监听外部访问不了如果是0.0.0.0:3306或:: :3306说明监听所有接口外部可以访问如果是前者需要修改数据库配置文件把bind-address改成0.0.0.0。比如MySQL的配置文件通常位于/etc/mysql/mysql.conf.d/mysqld.cnf找到这一行bind-address 127.0.0.1改成bind-address 0.0.0.0改完重启MySQL服务sudo systemctl restart mysql3.3 Web服务与共享文件访问的典型配置示例讲两个最常见的应用场景直接照抄就能用。场景一虚拟机里跑一个Nginx服务给局域网用在Linux虚拟机里安装Nginxsudo apt update sudo apt install nginx -y默认Nginx监听80端口先看看服务是否在跑systemctl status nginx然后修改默认站点配置编辑/etc/nginx/sites-available/defaultserver { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ 404; } }默认配置基本就能用。为了验证在/var/www/html下新建一个测试页面echo h1VMware Bridge Test/h1 | sudo tee /var/www/html/test.html然后在局域网任意设备浏览器里访问http://虚拟机IP/test.html能显示VMware Bridge Test就说明链路完全打通了。场景二Windows虚拟机开启文件夹共享给局域网访问Windows虚拟机开启共享比较简单。找到要共享的文件夹右键 - 属性 - 共享 - 高级共享勾选共享此文件夹设置好共享名。然后设置共享权限点击权限确保Everyone有读取权限如果只是访问如果要修改就勾选更改和读取。下一步需要确保共享相关的网络发现和文件共享已经开启。打开控制面板 - 网络和共享中心 - 高级共享设置中确保网络发现和文件和打印机共享处于开启状态。最后在局域网其他设备的资源管理器/文件管理器地址栏输入\\192.168.1.90就能看到共享文件夹了。如果提示需要凭据可以创建一个专门用于共享的Windows本地账户避免直接共享正在使用的用户账户。3.4 手机/平板访问VMware虚拟机浏览器与App实测要点大家最常问的就是我手机怎么访问虚拟机。其实只要网络通了方式跟电脑一样但有几个细节值得注意。移动设备访问虚拟机服务常见的坑手机必须在同一个网段连同一个WiFi且路由器没有开启客户端隔离如果虚拟机跑的是HTTP服务而虚拟机里配了HTTPS证书手机上访问时可能因为证书不受信任而阻止。测试时用HTTP最简单某些手机浏览器会拦截非标准端口比如8080、3000如果打不开换Chrome/Safari浏览器或者改用IP加端口直接访问以Android手机为例安装Termux或者直接用浏览器访问浏览器访问Web服务http://192.168.1.88:8080如果虚拟机跑的是SSH服务需要SSH客户端iOS可以用TermiusAndroid可以用Termux或JuiceSSHssh username192.168.1.88总之手机访问和电脑访问本质上是一样的只是终端工具不同而已。4. 常见问题与排查技巧实录4.1 虚拟机桥接后无网络的排查思路这个问题是最常见的我可以负责任地说80%的情况出在宿主机的物理网卡选择上。VMware Workstation默认桥接到的网卡是自动有时候它会自动选一个不可用的虚拟网卡或者已断开的物理网卡。排查步骤就三步在VMware虚拟网络编辑器里把桥接到改成当前正在使用的物理网卡。确认物理网卡没有被Hyper-V、其他虚拟化软件占用。Windows自带的Hyper-V和VMware的桥接功能有时会冲突现象是虚拟机桥接模式拿不到IP。如果装了Hyper-V可以尝试在Windows功能里禁用Hyper-V或者改用VMware的NAT模式。在虚拟机里执行dhclientLinux或ipconfig /renewWindows手动重新获取IP。注意要保证虚拟机系统的网卡是启用状态用ip link set ens33 up可以激活。排查时最有效的命令是看虚拟机的ARP表和路由表ip neigh ip route如果ip route里没有默认网关说明虚拟机连到路由器的那一跳没建立起来。此时检查是不是IP地址和网关不在同一个网段。4.2 宿主机能访问但局域网其他设备不能访问这个现象说明虚拟机和宿主机的网络是通的但在局域网设备这一个维度有问题。按照优先级排查这几项第一检查局域网设备与宿主机是否在同一个网段。如果手机连的是访客WiFi、5G频段WiFi而虚拟机用的网段是192.168.1.x但手机获取的IP是192.168.50.x那肯定访问不了。确保所有设备都在同一个网段里。第二检查路由器是否开启了AP隔离。很多路由器在设置里有隔离客户端或允许客户端间通信这类选项如果关闭了设备间的互相访问即使同一网段也ping不通。找到路由器后台关闭AP隔离或允许客户端间通信。第三检查虚拟机的服务是否绑定了特定的网卡。有时候服务本身配置了只监听宿主机网卡地址但虚拟机是桥接模式IP已经是局域网的地址了理论上不该出现这种情况。但Nginx、MySQL这类服务如果配置了监听特定IP而那个IP不是桥接网卡的IP就会出现局域网访问失败。解决方法参考前面讲过的把监听地址改成0.0.0.0。第四检查Windows虚拟机的网络配置文件类型。在Windows虚拟机里打开控制面板 - 网络连接右键当前网卡 - 属性 - 网络 - 配置 - 高级。确保网络地址MAC地址没有设置成和宿主机一样的值。如果一样会导致路由器把两者当作同一设备网络异常。4.3 MAC地址冲突与IP冲突问题局域网访问虚拟机时报IP地址冲突或者虚拟机突然断网十有八九是IP或者MAC地址冲突了。IP冲突的快速排查方法在虚拟机里执行arping -I eth0 192.168.1.88如果收到多个回复说明局域网内已有设备占用这个IP。解决办法是换一个不冲突的IP或者先从路由器后台查看当前IP分配情况。MAC地址冲突怎么避免VMware虚拟机默认自动生成的MAC地址前三位是00:0c:29这个前缀基本不会和真实网卡冲突。但如果你手动改过MAC地址又恰好和其他设备撞了就会引发严重的问题。建议在.vmx配置里固定MAC地址同时避免使用局域网上其他设备正在使用的MAC。我在实际运维中还遇到过一个情况VMware桥接模式下虚拟机的MAC地址在网上邻居扫描里不出现但ping是通的。后来发现是交换机的MAC表项老化时间太长有时需要重启交换机端口或者等一两分钟让MAC表刷新。遇到ping得通但扫描不到设备的情况不用太紧张不代表虚拟机没在网里。4.4 Windows与Linux虚拟机桥接模式排查差异对照Windows虚拟机和Linux虚拟机在桥接模式下遇到的问题和排查手段其实有区别我整理一个对照表方便你快速定位排查项Windows虚拟机Linux虚拟机查看IP地址ipconfig /allip addr show重新获取IPipconfig /release后再ipconfig /renewdhclient -r后再dhclient查看路由route printip route防火墙状态netsh advfirewall show allprofilessudo ufw status或systemctl status firewalld放行端口控制面板 - 防火墙高级设置 - 入站规则sudo ufw allow 端口或sudo firewall-cmd --add-port端口/tcp测试端口连通Test-NetConnection 192.168.1.88 -Port 8080nc -zv 192.168.1.88 8080查看服务监听netstat -anoss -tlnpWindows虚拟机有一个特有的坑如果虚拟机的网卡配置了通过DHCP获取IP但宿主机的网络是无线网络且无线网卡开启了随机硬件地址会导致每次连接WiFi后虚拟机拿到的IP都不稳定。解决方法是在Windows设置里关闭无线网卡的随机硬件地址功能或者干脆给虚拟机配静态IP。Linux虚拟机则要特别注意网络管理工具的冲突。如果你的系统同时装了NetworkManager和systemd-networkd两个工具可能会互相干扰导致网卡时通时断。最简单的办法是选一个用把另一个禁用。比如用NetworkManagersudo systemctl stop systemd-networkd sudo systemctl disable systemd-networkd然后用NetworkManager管理网络nmcli device status nmcli connection show4.5 局域网内访问慢或时通时断的深层原因排查完能不能连上接下来大概率还会碰到不稳定的问题。能连上但慢或者一会通一会不通原因往往比单纯连不上更复杂无线网络的干扰。如果宿主机是通过WiFi上网的桥接模式下的虚拟机网络质量会受无线信号影响。信号弱、距离远都可能导致虚拟机时延高。如果对稳定性要求高建议用有线网络连接宿主机。DHCP租约时间过短。有些路由器的DHCP租约时间是30分钟甚至更短虚拟机频繁续约偶尔会失败。如果给虚拟机配了静态IP就没这个问题。宿主机开启了省电模式导致网卡休眠。Windows默认允许网卡在空闲时自动关闭以省电这会导致虚拟机网络间歇性断开。在设备管理器 - 网络适配器 - 属性 - 电源管理里取消勾选允许计算机关闭此设备以节约电源。虚拟机系统本身资源不足。如果虚拟机内存分配太少小于512MB系统会频繁swap网络服务响应就会变慢。适当调高虚拟机的内存和CPU核心数对网络性能也有改善。最后分享一个在实战中很好用的小技巧确认局域网访问虚拟机时先用局域网内另一台真正的物理机访问虚拟机服务如果能通再换手机如果物理机能通但手机不能通问题很可能出在手机的WiFi策略或者路由器的客户端隔离上别在虚拟机里浪费时间排查。我个人用得比较顺手的组合是宿主机用有线网稳定性优先虚拟机用桥接模式 静态IP服务监听0.0.0.0虚拟机防火墙只放行必要端口。这套方案从搭建到维护基本不需要再碰其他配置。如果你是把虚拟机当作长期运行的服务载体强烈建议学一下快照功能每次在重要改动之前打个快照出问题秒回滚比什么都强。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门