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

环境: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。

相关推荐
A小辣椒16 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒20 小时前
TShark:基础知识
linux
AlfredZhao1 天前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao2 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334662 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
bush43 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5203 天前
Linux 11 动态监控指令top
linux
网络研究院3 天前
2026年网络安全
网络·安全·法律·法规·趋势·发展