1. 桥接模式基础概念与场景需求搞嵌入式开发的朋友们应该都遇到过这样的场景你的PC通过网线直连开发板同时PC上还跑着Ubuntu虚拟机。这时候想要实现开发板、PC和虚拟机三者之间互相ping通就像让三个房间的人自由串门一样需要正确的网络配置方案。桥接模式Bridged Mode是解决这个问题的关键。简单来说它会让虚拟机直接住在你的物理网络中就像一台真实存在的设备。我刚开始用这个功能时总觉得虚拟机网络特别神秘后来发现把它想象成合租室友就明白了——桥接模式就是给虚拟机分配一个和你同小区的门牌号IP地址大家自然就能互相串门了。为什么选择桥接而不是NAT在嵌入式开发中我们经常需要从开发板通过NFS挂载虚拟机的文件系统用SSH从PC登录到虚拟机操作在开发板上直接访问虚拟机搭建的服务器 NAT模式虽然能让虚拟机上网但就像给虚拟机单独装了电话分机外部设备无法直接呼叫它。而桥接模式是给虚拟机装了直拨电话开发板、PC都能直接联系。2. 环境准备与基础配置2.1 硬件连接方案先说说我的标准实验环境配置开发板树莓派4B其他开发板配置逻辑相同PCWin10系统带一个无线网卡连接互联网和一个有线网卡连接方式用网线直接将PC的有线网卡与开发板相连这里有个关键细节很多笔记本只有一个网卡这时候建议用USB转网口扩展。我实测过绿联的USB3.0转千兆网卡稳定性不错价格也就几十块钱。2.2 软件版本确认Vmware版本差异会导致配置界面不同建议使用较新的Workstation 16或Player 16。我吃过亏——曾经用Vmware 12配置桥接死活不成功升级到16后问题自动消失。可以通过菜单栏帮助→关于VMware Workstation查看版本。3. 分步配置实战3.1 虚拟机网络适配器设置首先打开虚拟机设置界面右键虚拟机 → 设置 → 硬件 → 网络适配器选择桥接模式不要勾选复制物理网络连接状态在桥接到下拉菜单中一定要选择你的有线网卡比如我的是Realtek PCIe GBE这里有个血泪教训如果你同时开着WIFI和有线网Vmware可能会默认桥接到无线网卡。我有次排查两小时才发现这个问题所以务必确认选择的是连接开发板的那块网卡。3.2 虚拟网络编辑器关键配置这一步很多人会忽略在VMware菜单栏选择编辑 → 虚拟网络编辑器点击右下角更改设置获取管理员权限选择VMnet0设置为桥接模式在已桥接到的下拉菜单中再次确认选择有线网卡注意如果列表里没有VMnet0点击添加网络手动添加即可。我遇到过某些精简版VMware会出现这个问题。3.3 IP地址规划与设置三端IP必须在同一网段比如都使用192.168.1.x。我的常用配置方案设备IP地址子网掩码网关PC有线网卡192.168.1.10255.255.255.0192.168.1.1虚拟机192.168.1.20255.255.255.0192.168.1.1开发板192.168.1.30255.255.255.0192.168.1.1设置方法Windows端控制面板 → 网络和共享中心 → 更改适配器设置 → 右键有线网卡 → 属性 → IPv4Ubuntu虚拟机sudo nano /etc/netplan/00-installer-config.yaml修改为network: ethernets: ens33: dhcp4: no addresses: [192.168.1.20/24] gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8,114.114.114.114] version: 2应用配置sudo netplan apply开发板根据系统不同可以通过ifconfig命令或uboot环境变量设置4. 常见问题排查指南4.1 两两能通但三方不全通这种情况我遇到过多次典型表现PC能ping通虚拟机开发板能ping通PC但开发板ping不通虚拟机解决方案检查Vmware虚拟网络编辑器中是否选对了物理网卡在Ubuntu中关闭防火墙临时测试sudo ufw disable在Windows中关闭防火墙控制面板 → Windows Defender防火墙 → 启用或关闭4.2 虚拟机获取不到IP如果ifconfig显示ens33没有inet地址尝试重启网络服务sudo systemctl restart systemd-networkd检查Vmware NAT服务是否运行服务中启动VMware NAT Service终极方案 - 手动指定IPsudo ifconfig ens33 192.168.1.20 netmask 255.255.255.04.3 开发板与虚拟机不通但其他正常这个问题折磨了我整整一天最后发现是MTU值不匹配在开发板上查看MTUifconfig eth0在虚拟机中临时修改MTUsudo ifconfig ens33 mtu 1400如果生效可以永久修改sudo nano /etc/netplan/00-installer-config.yaml添加ethernets: ens33: mtu: 14005. 网络互通后的高级应用5.1 NFS文件共享配置在Ubuntu上安装NFS服务sudo apt install nfs-kernel-server sudo mkdir -p /nfs/share sudo chown nobody:nogroup /nfs/share sudo nano /etc/exports添加/nfs/share *(rw,sync,no_subtree_check,no_root_squash)启动服务sudo exportfs -a sudo systemctl restart nfs-kernel-server开发板挂载mount -t nfs -o nolock 192.168.1.20:/nfs/share /mnt5.2 SSH免密登录配置在虚拟机生成密钥ssh-keygen -t rsa将公钥复制到开发板ssh-copy-id root192.168.1.30现在可以直接ssh root192.168.1.306. 维护与优化建议使用快照功能在Vmware中对虚拟机创建快照配置失败时可以快速回滚双网卡方案如果同时需要上网和连接开发板可以给虚拟机添加两块网卡第一块桥接模式连接开发板第二块NAT模式上网用IP持久化在开发板的/etc/network/interfaces中配置静态IP避免每次重启都要重新设置遇到网络问题时建议按这个顺序排查确认物理连接网线、网卡指示灯检查IP地址配置三端ifconfig/ipconfig关闭防火墙临时测试使用tcpdump抓包分析sudo tcpdump -i ens33 icmp