主机、虚拟机、开发板网络通信排错日志

环境:Hi3516CV610 开发板(BusyBox 系统)、Ubuntu 虚拟机(NFS 服务端)

日志主题

解决开发板与 PC 主机、Ubuntu 虚拟机之间的网络连通性问题,最终实现 NFS 挂载,支持嵌入式开发的代码调试。

按照下面的网络拓扑结构,重点要注意主机有线静态 IP、桥接绑定正确网卡、虚拟机双网卡网关隔离、防火墙放行这四点。

之后重启设备,再次出现设备网络断连,可能原因写在了第五部分,同时也针对那些原因修改了前四部分。

重启虚拟机老是自动修改虚拟机上网卡的连接方式,每次重启虚拟机就自动把桥接模式的那个网卡改成了仅主机模式,导致网络通信失败。最后我以管理员身份打开VMware就不会自动修改了。

一、初始网络拓扑与问题描述

  1. 初始拓扑

开发板:通过网线直连 PC 主机的有线网卡

PC 主机:同时连接校园网(无线网卡 10.142.138.42/15,网关 10.143.255.254)和开发板(有线网卡)

虚拟机:桥接模式,初始连接无线网卡,可上外网,但无法与开发板通信

  1. 核心问题

开发板与 PC 主机无法直连 ping 通

虚拟机与开发板网络隔离,无法通信

开发板挂载虚拟机 NFS 时出现 Permission denied 权限错误

二、排错过程与解决方案

阶段 1:打通 PC 主机 ↔ 开发板直连链路

问题 1:开发板 IP 配置错误,与 PC 网段隔离

初始开发板配置:

复制代码
# ifconfig eth0
inet addr:10.142.130.100 Mask:255.255.255.0

子网掩码为 255.255.255.0,与 PC 无线网段 10.142.0.0/15 不匹配,导致 PC 无法识别。

解决方案:

开发板重新配置 IP 与掩码,与 PC 网段对齐:

复制代码
ifconfig eth0 10.142.138.100 netmask 255.254.0.0 up
route add default gw 10.143.255.254 eth0

验证路由表:

复制代码
route -n
# 输出需包含10.142.0.0/15网段路由,走eth0网卡

问题 2:PC 主机有线网卡未配置 IP,无法识别开发板

初始 PC 状态:有线网卡无静态 IP,无法响应开发板的 ARP 请求,导致 ping 超时。

解决方案:

以管理员身份打开 CMD(shift+ctrl+enter打开cmd命令),为主机的有线网卡配置静态 IP

复制代码
语法:
netsh interface ipv4 set address name="网卡名称" static IP地址 子网掩码 [默认网关] [跃点数]

netsh interface ipv4 set address name="以太网" static 10.142.138.200 255.254.0.0

添加静态路由,强制 10.142.138.0/24 网段走有线网卡:

复制代码
route -p add 10.142.138.138 mask 255.255.255.0 10.142.138.200 metric 1

单主机路由,强制指定虚拟机IP走有线网卡,优先级最高,不会被抢占。

验证 PC 与开发板连通性:

复制代码
ping 10.142.138.100
# 输出:来自10.142.138.100的回复,无丢包

阶段 2:打通虚拟机 ↔ 开发板通信链路(双网卡方案)

问题 1:单网卡桥接无法同时满足 "上外网" 和 "连开发板"

初始虚拟机配置:单网卡桥接无线网卡,可上外网,但无法与直连开发板通信;若桥接有线网卡则断外网。

解决方案:为虚拟机配置双网卡,分工明确:

1.虚拟机添加第二块网卡,模式为 NAT(用于上外网),原有网卡改为桥接模式,手动绑定 PC 有线网卡。重启虚拟机可能会修改桥接的虚拟网卡,最好是选择手动绑定桥接网卡,操作如下:

  1. 打开 VMware 虚拟网络编辑器。

  2. 将一张虚拟网卡设置为【桥接模式】,手动绑定主机有线网卡(Realtek PCIe GbE)。

  3. 取消勾选:将主机虚拟适配器连接到此网络。

  4. 在桥接模式的网卡的网络设置中选择自定义 ,下拉菜单选择前面设置桥接模式的网卡。

2.虚拟机 Netplan 配置(/etc/netplan/01-network-manager-all.yaml):

复制代码
network:
  version: 2
  renderer: networkd
  ethernets:
    ens33:  # 桥接有线网卡,与开发板通信(无网关)
      addresses:
        - 10.142.138.195/15
    ens37:  # NAT模式网卡,自动获取IP(负责外网)
      dhcp4: true
      nameservers:
        addresses: [8.8.8.8, 114.114.114.114]

如果桥接网卡也设网关,虚拟机路由会乱,内网走外网出口,导致开发板访问卡顿 / 超时。编辑 netplan 配置文件,只给 NAT 网卡开网关,桥接网卡无网关。

复制代码
虚拟机输入:
route -n

看默认路由 0.0.0.0 只出现在 NAT 网卡 上,桥接网卡无默认网关,即为正常。

3.应用配置并验证:

复制代码
sudo netplan apply
ifconfig
# 验证ens33 IP为10.142.138.195,ens37获取到NAT网段IP

阶段 3:解决 NFS 挂载权限问题

问题:开发板挂载虚拟机 NFS 时 Permission denied

原因:虚拟机 NFS 服务配置未添加 no_root_squash,开发板 root 用户被映射为匿名用户,无读写权限。

解决方案:

1.虚拟机修改 /etc/exports 文件,添加开发板网段权限:

复制代码
sudo nano /etc/exports
# 添加配置:/home/dev/nfs *(rw,sync,no_subtree_check,no_root_squash)

2.重启 NFS 服务并应用配置:

复制代码
sudo exportfs -ra
sudo systemctl restart nfs-kernel-server

3.开发板执行挂载命令:

复制代码
mount -t nfs -o nolock,tcp,rsize=32768,wsize=32768 10.142.138.195:/home/dev/nfs /mnt

三、最终状态

1.各设备ip配置

四、开发板网络永久生效方案

永久配置:将网络命令写入 /etc/init.d/rcS 开机脚本。

rcS 是嵌入式 Linux 标准开机自启方案,最稳定、最通用。

配置完成后,开发板每次上电自动联网,自动连通虚拟机,可直接使用 NFS。

复制代码
vi /etc/init.d/rcS

# 在最后添加
ifconfig eth0 10.142.138.100 netmask 255.254.0.0 up
route add default gw 10.143.255.254
mount -t nfs -o nolock,tcp,rsize=32768,wsize=32768 10.142.138.195:/home/dev/nfs /mnt

# 保存退出
ESC :wq

chmod +x /etc/init.d/rcS
reboot

五、重启后再次出现网络断链

设备重启后网络再次断连的原因分析(本次问题根因)

  1. VMnet0 自动桥接重启后失效/丢失 - VMware 默认桥接网络 VMnet0 重启后会重置、漂移到无线网卡 - 导致虚拟机桥接通道断开,主机无法访问虚拟机

  2. Windows 网段路由被无线网卡优先级抢占 - 原 10.142.138.0/24 路由与无线网卡 10.142.0.0/15 冲突 - 系统优先走无线,不走向有线网卡,导致 ping 不通

  3. 桥接模式未固定绑定物理网卡 - 自动桥接会随机选择无线/有线,重启后必然错乱

最终稳定解决方案(重启永不失效)

  1. 固定桥接通道 - 使用 VMnet1 手动桥接有线网卡,虚拟机网卡绑定自定义 VMnet1 - 不使用自动桥接,不使用 VMnet0

  2. Windows 路由改为单主机路由 - 路由目标:10.142.138.195/32 - 强制指向有线网卡,优先级最高

  3. 双网卡网关严格隔离 - 桥接网卡(ens33)无网关 - NAT 网卡(ens37)唯一默认路由

  4. 开发板 IP 写入 rcS 开机自启 - 重启自动配置 IP、网关、NFS 挂载

注意:

一、VMware 桥接模式绑定正确物理网卡(核心避坑)

桥接必须绑定主机有线网卡,不能绑无线,否则虚拟机桥接网卡跑在校园网网段,和开发板私网不在一个局域网,直接不通。

修改步骤

  1. 关闭虚拟机,打开 VMware 首页

  2. 顶部菜单:编辑 → 虚拟网络编辑器

  3. 选中 桥接模式 (Bridge)

  4. 下方「桥接到」:手动选择 你的有线网卡 名称一般带:Realtek 以太网、Intel 以太网、Ethernet,不要选 Wi-Fi / Wireless

  5. 勾选 将虚拟网络适配器连接到物理适配器

  6. 应用 → 确定

  7. 进入虚拟机设置 → 网络适配器 1确认模式为:桥接模式

    ip a

    看桥接网卡(一般是 ens33)IP 是否能配置成同网段

二、Windows 防火墙放行私网网段

Windows 默认防火墙会拦截外来设备 ping、SSH、开发调试端口,出现能 ping 通但无法串口调试、sftp、ssh 连接失败。

修改方法:放行 192.168.10.0/24 网段(更安全)

控制面板 → 系统和安全 → Windows Defender 防火墙→高级设置 →入站规则 → 新建规则

允许所有端口和协议,作用域限定 远程 IP:所放行的虚拟机ip。

相关推荐
小小的木头人2 小时前
Ubuntu 26.04 换阿里云镜像源
linux·ubuntu·阿里云
路溪非溪2 小时前
BLE MESH基础知识总结
网络·网络协议·智能路由器·射频工程
qq_254674412 小时前
Ubuntu 20.04取消自动休眠的三种实现方案
linux·chrome·ubuntu
Yang96112 小时前
鼎讯信通 Smart-S1:超便携带光测试光时域反射仪优选
网络·信号处理
念恒123063 小时前
STM32---新建工程
linux·stm32·嵌入式硬件
Yang96113 小时前
12 小时续航 + 1.5kg 便携!鼎讯信通 OTDR 适配复杂野外运维
运维·网络
悲伤小伞3 小时前
Linux_传输层协议TCP详解
linux·网络·c++·网络协议·tcp/ip
笨笨饿3 小时前
#72_聊聊I2C以及他们的变体
linux·c语言·网络·stm32·单片机·算法·个人开发
偷懒下载原神3 小时前
【网络编程】UDP协议
网络·网络协议·udp