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

VMware桥接模式实现Windows与CentOS虚拟机及局域网设备互访配置指南

先交代一句这个场景我实际搭过不止一次踩过的坑也都记在下面。你如果照着走一遍基本能在半小时内把Windows宿主机、VMware里的CentOS虚拟机还有同一个路由下其他实体电脑三者打通实现互相访问。这套组合最常见的用途是本地开发调试。我在Windows上跑IDE和数据库客户端CentOS里跑服务端程序旁边工位的电脑或者手机、平板通过Wi-Fi直接访问虚拟机里开着的Web服务省去来回拷贝文件、反复部署的麻烦。只要网络配置得当它就等价于一台独立的局域网服务器。整个过程不涉及任何工具的破解和灰色操作核心是VMware桥接模式、固定IP和防火墙放行这三件事。1. 整体思路拆解先弄清楚为什么是桥接模式1.1 这套互访组合实际解决什么问题先说使用场景。你手头有一台Windows笔记本或台式机装了VMware Workstation里面跑着一个CentOS虚拟机。平时你在这台虚拟机里装各种Linux服务比如Nginx、MySQL、Redis或者自己编译的程序。问题来了虚拟机默认上网方式往往是NAT也就是它躲在Windows宿主机后面和宿主机共用一张“假网卡”出网。虚拟机可以上网宿主机也能访问虚拟机但局域网里其他电脑根本不知道这台虚拟机的存在。别人想访问你虚拟机里跑的服务就得绕道非常麻烦。改成今天要说的桥接模式之后虚拟机会直接挂在你的物理Wi-Fi网卡上由路由器给它分配一个和宿主机同一网段的IP。这时虚拟机在网络世界里的地位就和你那台Windows笔记本一模一样大家都能直接访问它它也能直接访问大家。这正是标题里“三者互相访问”的本质。1.2 为什么要选桥接而不是NAT或仅主机模式VMware一共提供三种常见网络模式NAT、桥接、仅主机。新人最容易在选型上栽跟头所以我把取舍逻辑说透。NAT模式虚拟机通过宿主机的一张虚拟网卡通常是VMnet8访问外网。优点是配置简单、开箱即用虚拟机不会占用局域网真实IP缺点是外部设备看不到虚拟机做不到“被访问”。仅主机模式虚拟机只能和宿主机通信完全隔离外部网络适合做实验不符合我们要的局域网共享。桥接模式VMware在宿主机物理网卡上建立一个虚拟交换机把虚拟机的网卡桥接到真实网络上。路由器视角里虚拟机就是一个普通无线终端它拥有独立IP能参与局域网内所有通信。这也是实现标题场景的正解。缺点是需要占用一个真实局域网IP并且要求路由器允许设备互访普通家用路由器默认都允许。1.3 动手之前先做好IP规划桥接模式下虚拟机默认会使用DHCP从路由器获取IP但实际使用中我强烈建议给虚拟机配一个固定IP。原因有两个一是IP频繁变化会导致你记不住、其他设备配好的访问地址全部失效二是固定IP能保证SSH连接、服务访问白名单等配置长期稳定。做IP规划前先在Windows宿主机上打开命令行输入ipconfig查看当前自己电脑的IP地址、子网掩码和默认网关。假设你看到如下内容无线局域网适配器 WLAN: 连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 192.168.1.100 子网掩码 . . . . . . . . . . . . : 255.255.255.0 默认网关 . . . . . . . . . . . . : 192.168.1.1这就说明你路由器的局域网段是192.168.1.x网关是192.168.1.1。我建议给虚拟机分配192.168.1.101或192.168.1.102这类避开DHCP自动分配池的低位地址其他实体电脑维持原状。为避免DHCP冲突建议进入路由器后台看一眼DHCP地址池范围把静态IP设置在地址池之外或者选一个地址池里不容易被自动分配到的序号。这一步很多人忽略实际很重要。2. 环境准备从VMware安装到CentOS系统部署2.1 宿主机和VMware的前置设置如果是新环境先确认VMware Workstation版本我自己用的VMware Workstation Pro 17Player版其实也支持桥接只是高级管理功能少一些。安装完以后打开VMware的“编辑 - 虚拟网络编辑器”第一次打开时会看到一个默认的VMnet8NAT模式。这里不需要对VMnet8动太多手脚但需要检查一下“VMnet0”也就是桥接模式的配置确认它绑定的是你的真实无线网卡。重点来了笔记本通常同时有有线网卡和无线网卡虚拟机桥接时必须选对物理网卡。默认情况下桥接模式会自动选择但有时候它会桥接到没有插网线的有线网卡上导致虚拟机完全没网络。我的习惯是手动指定在虚拟网络编辑器里选择“桥接到”并选中当前连接Wi-Fi的那张无线网卡比如名字里带Wireless、Wi-Fi、WLAN或者具体型号的设备。保存之后后续所有桥接流量都会走这张网卡。2.2 安装CentOS 7时的网络选项系统镜像建议用CentOS 7.9 x86_64 Minimal 2009.isoMinimal版本够轻量服务类的实验环境不需要图形界面还能省下不少内存和磁盘。新建虚拟机时选择“稍后安装操作系统”客户机操作系统选Linux、版本选CentOS 7 64位。内存至少给2GB实际我自己开发用一般给4GB磁盘给20GB以上虚拟磁盘类型选NVMe或SATA都可以。安装过程中的关键点在“网络与主机名”那一屏。默认情况下网卡是关闭的一定要手动把开关拨到ON并且确保NetworkManager能拿到底层网卡。系统安装完成后先别急着关机进入系统后用ip addr查看当前网卡名最常见的是ens33。这块必须先确认因为后面所有配置文件都跟这名字有关。安装完成后建议立刻安装VMware Tools新版本叫open-vm-tools。虽然标题要实现的是网络互通装好VMware Tools能解决很多隐性体验问题比如分辨率调整、剪贴板共享、鼠标流畅度、虚拟机随宿主机重启之类的。多数CentOS 7环境可以直接执行yum install -y open-vm-tools来安装如果系统还没配置外网源那就从VMware菜单“虚拟机 - 安装VMware Tools”挂载光盘镜像后手动安装不过需要提前准备好编译器环境。我的经验和建议是如果你只是做网络访问实验open-vm-tools就够用后面需要文件拖拽和共享文件夹时再补装完整工具即可。3. CentOS 7静态IP配置完整实录3.1 先看清网卡名再动手网上很多教程上来就让你改ifcfg-ens33但不同版本、不同环境下你的网卡名可能不是ens33可能是ens32、ens160也可能是eno1。所以我坚持先做一步确认。登录CentOS后执行ip addr正常情况下会看到loopback和一张名字类似ens33的网卡。记录下这个名称同时记住它的MAC地址后面配置文件里要关联。如果执行完发现网卡没有IP地址说明DHCP没有自动分配成功可以先临时执行dhclient ens33让它拿一个地址确认网卡本身工作正常再进行静态配置。3.2 编辑ifcfg配置文件CentOS 7的网卡配置文件位于/etc/sysconfig/network-scripts/ifcfg-ens33名字里的ens33要替换成你自己查到的网卡名。用vim或者nano编辑它vi /etc/sysconfig/network-scripts/ifcfg-ens33默认文件内容大概是这样的TYPEEthernet BOOTPROTOdhcp NAMEens33 UUIDxxxx DEVICEens33 ONBOOTyes把它改成静态配置我给出的示例基于前面假设的局域网按你自己实际网段替换TYPEEthernet BOOTPROTOstatic NAMEens33 UUIDxxxx DEVICEens33 ONBOOTyes IPADDR192.168.1.101 NETMASK255.255.255.0 GATEWAY192.168.1.1 DNS1192.168.1.1 DNS2223.5.5.5这里解释几个关键点。BOOTPROTOdhcp改成static表示不使用动态获取而是读取下面手动指定的IPIPADDR就是给虚拟机固定的局域网地址这个地址必须和宿主机同一个网段否则无法互通GATEWAY必须和宿主机一致否则虚拟机无法出网更无法访问其他网段的设备DNS1可以填路由器的网关地址也可以填公共DNS。虚拟机如果需要解析域名来访问外网或局域网内的域名服务DNS必须正确。保存退出后执行命令重启网络服务systemctl restart network重启后建议顺便执行systemctl status network检查服务状态是否为active。3.3 验证静态IP是否生效重启网络后执行ip addr show ens33应该能看到配置的192.168.1.101已经出现在网卡上。再执行ping -c 4 192.168.1.1 ping -c 4 192.168.1.100如果能ping通网关和宿主机说明网络层面的配置已经正确。我在实际配置中经常遇到一种情况配置文件改了、重启了但IP还是原来的DHCP地址通常是NetworkManager和network服务冲突导致的。CentOS 7里两个服务同时管理网卡会互相干扰最简单的办法是把NetworkManager关掉只保留network服务systemctl stop NetworkManager systemctl disable NetworkManager systemctl restart network注意关闭NetworkManager在某些桌面版CentOS里会影响网络管理工具如果你用的是Minimal版或者纯命令行关掉它几乎没副作用。4. 三者互通的验证流程与常见访问方式4.1 Windows宿主机访问CentOS虚拟机Windows宿主机访问CentOS最常用的是SSH。CentOS Minimal默认可能没装SSH服务先确认或安装openssh-serveryum install -y openssh-server systemctl enable sshd systemctl start sshd然后在Windows命令行或PowerShell里执行ssh root192.168.1.101如果弹出提示输入密码说明从宿主机到虚拟机已经通了。注意Windows 10以上的系统自带OpenSSH客户端不需要额外装工具。如果你习惯图形化的SFTP工具还可以用WinSCP或MobaXterm直接连接虚拟机传文件。另外还有一个很实用的验证方式在Windows浏览器里直接输入http://192.168.1.101。如果CentOS里装了Nginx或Apache并启动了服务浏览器能打开页面就说明HTTP层的连通性也完全没问题。我经常用浏览器访问虚拟机的管理后台或API调试页面直观又方便。4.2 同一个Wi-Fi下的其他实体电脑访问CentOS这是标题里最容易忽略、也最容易出问题的一步。当你在办公桌上用一台同样连接着Wi-Fi的实体电脑想访问虚拟机里跑的服务时操作其实和宿主机访问虚拟机一模一样直接访问192.168.1.101即可。我建议在实体电脑上做两个验证。第一个是ping通性验证ping 192.168.1.101第二个是实际业务验证比如在CentOS里跑一个Python自带HTTP服务python -m SimpleHTTPServer 8000然后在实体电脑浏览器里打开http://192.168.1.101:8000能看到文件列表就说明TCP层面和业务层面都通了。这里有一个关键点如果其他电脑连的是同一个Wi-Fi但ping不通虚拟机大概率不是虚拟机的错而是路由器开启了“AP隔离”或“客户端隔离”功能需要去路由器后台关闭。这个问题我放在后面的排查部分细说。4.3 虚拟机反过来访问宿主机和其他实体电脑很多人只关注外部设备访问虚拟机忽略了虚拟机的主动访问能力。如果你的CentOS需要连接宿主机的服务比如MySQL、Redis、FTP或者需要访问局域网里另一台Windows机器共享的文件夹这些同样依赖当前这套网络配置。在CentOS里执行ping -c 4 192.168.1.100 ping -c 4 192.168.1.50只要目标机器防火墙允许ping应答应该都能通。如果ping不通先检查目标Windows机器有没有开启“文件和打印机共享”相关的防火墙规则或者直接在Windows防火墙里临时关闭专用网络防火墙做一次快速验证。注意虚拟机访问Windows上的共享文件夹还需要Windows开启SMB共享权限并配置好账号密码。这里要额外提一句跨设备访问Windows共享目录比较稳妥的是给共享账号设置一个独立密码避免使用空密码导致安全策略拦截。5. 防火墙、SELinux与无线网络的隐性拦路虎5.1 CentOS防火墙必须放行对应端口CentOS 7默认已经开启了firewalld很多情况下你配好IP后ping得通但SSH或者业务端口就是访问不了十次里有八次是防火墙拦住了。先看当前防火墙状态systemctl status firewalld如果active并且你想让局域网设备访问SSH、HTTP这些常用服务执行firewall-cmd --permanent --add-servicessh firewall-cmd --permanent --add-servicehttp firewall-cmd --reload如果你测试的是自定义端口比如上面的8000端口就执行firewall-cmd --permanent --add-port8000/tcp firewall-cmd --reload查看是否生效firewall-cmd --list-all如果是在实验室环境不在意安全细节也可以直接禁掉防火墙systemctl stop firewalld systemctl disable firewalld但我不建议一上来就关防火墙万一这台虚拟机以后要跑线上服务开着防火墙反而是一个习惯性保障。用类似白名单思想去添加端口后面排查问题也会更清晰。5.2 SELinux的干扰SELinux是CentOS系统里让人头疼但又不能忽视的安全机制。网络层通信本身不受SELinux管理但如果你后续在虚拟机上搭了Nginx、Samba、FTP之类的应用SELinux可能限制这些服务的网络行为。比如Samba共享文件夹别人无法访问但SELinux日志里明确提示denied这种情况就可以针对某项放行setsebool -P samba_enable_home_dirs 1如果只是做基础网络互访实验SELinux通常不会挡SSH和HTTP但一旦遇到“服务明明起来了别人却访问不到”的问题请第一时间查看/var/log/audit/audit.log。实在需要临时关闭SELinux的话可以修改/etc/selinux/config里的SELINUXdisabled然后重启系统生效。我只建议在纯实验环境下这么做生产环境还是让SELinux保持开启更稳妥。5.3 无线AP隔离和路由设备问题Wi-Fi环境比有线环境多一层不确定性就是无线AP的隔离机制。很多路由器为了方便公共场景默认开启“AP隔离”模式让同一个Wi-Fi下的设备之间不能互相通信。这种模式主要用于酒店、商场和公司访客网络目的是防止设备互访带来的安全隐患但它会直接破坏你想要的局域网互通。判断方法很简单在实体电脑上ping宿主机Windows的IP如果也ping不通而所有设备都能正常上网那基本可以断定路由器开启了AP隔离。进入路由器管理后台在无线设置里找到“AP隔离”或“客户端隔离”关掉它再测试。另外5G频段和2.4G频段共用同一局域网通常没问题因为三层路由是通的。但个别双频路由器的“智能切换”或者访客网络设置可能会影响互访如果你的设备分别连了2.4G和5G导致互相不通可以先把测试设备都切到同一个频段验证一次缩小排查范围。6. 常见问题与排查技巧实录6.1 VMware Workstation无法连接到虚拟机启动模块有的用户会遇到启动虚拟机时提示“VMware Workstation无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问该程序使用的所有临时目录。”这个问题通常发生在重新安装VMware、Windows系统更新、或者安全软件清理过系统文件之后。原因多数是VMware相关的Windows服务没有跑起来或者VMware Authorization Service状态异常。打开Windows服务管理器按WinR输入services.msc找到以下服务VMware Authorization ServiceVMware DHCP ServiceVMware NAT Service重点看Authorization Service的状态把它设为“自动”并启动。如果再启动失败用管理员身份打开命令行执行net start VMwareAuthorization如果服务启动还是失败可以尝试以管理员身份重新运行VMware Workstation安装包进行修复安装。还有一个很常见的原因是TAP驱动或虚拟机监控驱动被安全软件隔离这时需要去安全软件的隔离区恢复相关驱动文件。我遇到这类问题有两次都是因为Windows更新后驱动没有重新签名修复安装往往比手动折腾驱动更省时间。6.2 桥接模式虚拟机开机后拿不到IP这类问题多出现在笔记本切换无线网络之后。桥接模式绑定了特定的无线网卡但笔记本休眠、切换Wi-Fi或者重新连接后虚拟机的虚拟网卡可能并没有跟着刷新导致虚拟机一直拿不到IP。排查步骤在虚拟机里执行ip addr看网卡是否存在、是否处于DOWN状态。如果是DOWN执行ip link set ens33 up把它拉起来。如果仍然没有IP在宿主机上重新开关一次Wi-Fi或者禁用再启用无线网卡。在VMware虚拟网络编辑器里把桥接模式切换为“自动”再切回你指定的无线网卡强制刷新桥接关系。虚拟机里临时执行dhclient ens33看能否获取IP能获取说明物理链路没问题问题在静态配置或NetworkManager冲突。这里我说一个比较隐蔽的操作技巧如果你用的是VMware Workstation Pro可以先编辑虚拟机设置把网络适配器的“桥接模式”取消勾选再重新勾选并在重启虚拟网络编辑器后重新启动虚拟机。这样可以强制VMware重新加载网卡驱动和桥接配置解决掉大部分休眠后的诡异网络问题。6.3 其他电脑能ping通虚拟机但SSH或业务端口连不上这类情况几乎可以断定是虚拟机内部防火墙没有放行对应端口或者是SSH服务没启动或者是访问的端口写错了。先用宿主机测一遍排除虚拟机本身的问题telnet 192.168.1.101 22如果宿主机能通、其他电脑不能通把问题放到路由器AP隔离和Windows防火墙方向排查。我在办公环境里遇到过一种情况其他电脑的杀毒软件自带的防火墙拦截了入站连接虽然Windows系统防火墙看起来是关闭的但第三方的网络防护仍然在起作用。解决办法是先临时退出第三方安全软件测试如果通了就在该安全软件的防火墙规则里添加入站白名单。如果宿主机和其他电脑都不通回到虚拟机里确认服务监听地址。比如Nginx默认监听0.0.0.0这没问题但如果你手动改过配置服务只监听了127.0.0.1外部设备当然连不上。所以在服务配置层面一定要确认监听的是0.0.0.0而不是localhost。6.4 虚拟机IP地址总变刚配好的静态地址经常失效这种情况多半是NetworkManager在捣鬼。CentOS 7默认启用NetworkManager你改了/etc/sysconfig/network-scripts/ifcfg-ens33但NetworkManager的配置文件可能还保留着旧的DHCP管理状态重启网络服务后它会把你的静态配置覆盖或者干扰掉。最稳妥的做法是彻底停用NetworkManager只保留network服务systemctl stop NetworkManager systemctl disable NetworkManager systemctl enable network systemctl restart network然后再次用ip addr确认地址正确。如果重启后IP又变检查有没有另一个网络配置文件在生效可以直接执行nmcli con show查看NetworkManager视图下的连接配置哪怕NetworkManager已经停了它也可能残留了活动连接记录。把这些残留连接删掉再重启network服务。6.5 虚拟机访问外网慢或域名解析失败出现这种问题优先检查DNS配置。如果网关地址是192.168.1.1DNS也填192.168.1.1会依赖路由器转发DNS请求有时候路由器本身解析慢或者上游DNS不稳定就会导致域名解析超时。我的建议是主DNS填223.5.5.5这种公共DNS副DNS填网关地址既保证解析速度也兼顾内网域名解析需求。测试命令cat /etc/resolv.conf ping -c 4 www.baidu.com如果不能解析域名但能ping通IP说明确实是DNS问题。修改配置文件后无需重启网络执行systemctl restart network即可。7. 再往前走一步文件共享与扩展思路7.1 从Windows复制文件到CentOS的几种方式很多新人的第一直觉是用U盘拷贝或者借助网盘中转实际上既然网络已经打通最方便的方式是直接在宿主机上用SFTP工具。Windows自带命令行scp也可以完成scp D:\test.txt root192.168.1.101:/root/输入密码后文件就会出现在虚拟机的/root目录下。如果不想每次输密码可以配置SSH密钥免密登录在Windows上生成密钥对把公钥追加到CentOS的~/.ssh/authorized_keys里。以后不管是从宿主机还是其他电脑只要持有私钥就能免密登录比输密码舒服太多。还有一种方式是让CentOS挂载Windows共享目录或者反过来把CentOS目录通过Samba共享给Windows。Samba配置稍微复杂但一旦配好Windows文件管理器里直接网络映射一个盘符访问虚拟机文件就像访问本地目录一样非常适合做代码目录的同步开发和日志文件的实时查看。7.2 给虚拟机扩展磁盘时必须注意的细节桥接网络配好之后你可能会长时间把CentOS当作一个开发服务器跑磁盘空间就会慢慢吃紧。CentOS扩容不能在系统运行中直接改虚拟磁盘大小必须先在VMware关机状态下编辑虚拟机设置把磁盘大小调到目标值。启动系统后执行df -h和lsblk先看分区结构再用growpart扩展分区最后用xfs_growfs或resize2fs扩展文件系统。CentOS 7默认文件系统可能是xfs所以扩展命令是xfs_growfs /dev/mapper/centos-root。如果直接调磁盘大小后在系统里看不到新空间一定是忘了扩展分区那一步这一步新手最容易漏。7.3 我这个方案的适用边界和最后的建议这套桥接方案适用于同一局域网内的设备互访也适用于虚拟机和真实机器混合在一起的测试环境。它不适合跨网段、跨路由器的远程访问场景那种情况需要做端口映射或内网穿透属于另一个话题了。我在多次配置里最大的感受是网络问题一定要一层一层排查不要瞎猜。先确认物理链路通不通再确认IP规划对不对然后确认防火墙和监听地址是否放行最后才是服务层面的事。如果你把顺序反过来一头扎进某个服务的配置文件里往往会越改越乱。另外养成改配置前备份的习惯。每次修改CentOS的网卡配置之前先复制一份ifcfg-ens33到ifcfg-ens33.bak出了问题可以秒回滚。我因为大意没备份曾经把一张生产环境虚拟机的网卡配置改到完全连不上最后只能通过VMware虚拟机的只读快照恢复教训够深刻。最后分享一个小技巧把常用的SSH连接地址和命令存成一个Windows批处理文件或者PowerShell脚本放在桌面上双击就能进入虚拟机。别小看这个习惯当你有三四台虚拟机、十几个IP要连时一条命令直接到位比来回敲SSH省心得多。希望这篇经验能帮你在半小时内把整套网络跑通少走我当时走的弯路。
分享:

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

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