1. 问题场景与需求拆解
遇到这种网络配置需求,本质上是要解决虚拟机同时访问两个不同网络域的问题。具体来说,我们需要让虚拟机:
- 通过主机的WiFi连接访问互联网
- 通过有线网卡与开发板建立局域网通信
这种需求在嵌入式开发、物联网设备调试等场景非常常见。比如用STM32开发板做网络功能测试时,开发板通过网线直连电脑,同时我们又需要让开发环境能访问在线文档和软件仓库。
2. 网络拓扑分析
当前物理连接情况:
- 主机通过WiFi连接路由器(假设获取的IP是192.168.1.100)
- 主机有线网口与开发板直连(假设手动配置为192.168.100.1)
- 虚拟机软件(VMware/VirtualBox)运行在主机上
关键矛盾点在于:虚拟机默认的网络适配器通常只能选择一种连接方式(NAT或桥接),无法同时满足内外网访问需求。
3. 解决方案设计
3.1 双网卡配置方案
最可靠的方案是为虚拟机配置两个虚拟网卡:
- 第一个网卡设置为NAT模式 - 用于外网访问
- 第二个网卡设置为Host-Only或桥接模式 - 用于连接开发板
以VMware为例具体配置步骤:
- 打开虚拟机设置 → 添加网络适配器
- 适配器1:
- 连接方式:NAT
- 高级设置中勾选"开机时连接"
- 适配器2:
- 连接方式:Host-Only
- MAC地址建议设置为固定值(避免重启变化)
3.2 主机网络配置要点
主机有线网卡需要手动配置:
- IP地址:192.168.100.1
- 子网掩码:255.255.255.0
- 默认网关:留空
- DNS:留空
开发板网络配置应对应:
- IP地址:192.168.100.x(x≠1)
- 子网掩码:255.255.255.0
- 网关:可设为192.168.100.1或留空
4. 虚拟机内部网络配置
4.1 Linux系统配置示例
编辑/etc/network/interfaces文件:
bash复制# 外网接口(对应NAT网卡)
auto ens33
iface ens33 inet dhcp
# 开发板接口(对应Host-Only网卡)
auto ens38
iface ens38 inet static
address 192.168.100.2
netmask 255.255.255.0
重启网络服务:
bash复制sudo systemctl restart networking
4.2 Windows系统配置
- 打开"网络连接"面板
- 对NAT对应的网卡:
- 自动获取IP地址
- 自动获取DNS
- 对Host-Only对应的网卡:
- 手动设置IP:192.168.100.2
- 子网掩码:255.255.255.0
- 默认网关:留空
5. 路由与防火墙配置
5.1 路由表优化
在虚拟机中执行:
bash复制# 查看当前路由表
route -n
# 确保开发板网段走特定接口
sudo route add -net 192.168.100.0 netmask 255.255.255.0 dev ens38
5.2 防火墙设置
如果使用ufw(Ubuntu):
bash复制sudo ufw allow from 192.168.100.0/24
Windows防火墙:
- 进入"高级安全Windows防火墙"
- 添加入站规则 → 允许192.168.100.0/24网段的连接
6. 验证与测试
6.1 基础连通性测试
在虚拟机中执行:
bash复制# 测试外网连接
ping 8.8.8.8
# 测试开发板连接
ping 192.168.100.x
6.2 进阶测试方法
如果开发板运行SSH服务:
bash复制ssh username@192.168.100.x
同时保持外网访问:
bash复制curl https://www.example.com
7. 常见问题排查
7.1 开发板无法ping通
检查步骤:
- 确认主机有线网卡和开发板在同一网段
- 检查网线是否正常(尝试更换网线)
- 查看虚拟机网络适配器是否已连接
- 在主机上尝试ping开发板IP
7.2 虚拟机无法上网
排查方法:
- 确认NAT适配器已启用
- 检查虚拟机能否获取到NAT网关IP(通常是192.168.x.2)
- 测试DNS解析是否正常:
bash复制
nslookup www.baidu.com
7.3 网络接口识别问题
在Linux系统中,有时网卡名称会变化:
bash复制# 查看所有网络接口
ip a
# 如果接口名不固定,可以创建udev规则
sudo vim /etc/udev/rules.d/70-persistent-net.rules
8. 高级配置技巧
8.1 静态路由持久化
在Ubuntu中使路由配置永久生效:
bash复制sudo vim /etc/network/interfaces
# 在对应接口后添加:
up route add -net 192.168.100.0 netmask 255.255.255.0 dev ens38
8.2 网络优先级调整
修改metric值确保外网流量优先走NAT:
bash复制sudo ip route change default via 192.168.x.1 dev ens33 metric 100
8.3 虚拟交换机配置(VMware)
对于复杂场景可以:
- 打开VMware虚拟网络编辑器
- 创建自定义Host-Only网络
- 指定特定子网(如192.168.100.0/24)
- 关闭DHCP服务
9. 替代方案比较
9.1 单网卡方案(不推荐)
通过路由配置实现单网卡访问两个网络:
- 优点:节省虚拟网卡资源
- 缺点:配置复杂,容易出现路由冲突
9.2 USB网卡扩展
物理方案:
- 为主机添加USB有线网卡
- 将新网卡完全分配给虚拟机
- 开发板连接USB网卡
9.3 网络共享方案
Windows主机的Internet共享功能:
- 将WiFi连接共享给有线网卡
- 开发板通过DHCP获取IP
- 虚拟机使用桥接模式
10. 安全注意事项
-
开发板网络隔离:
- 避免将开发板网络直接暴露在公网
- 开发板防火墙应默认拒绝所有入站
-
虚拟机网络隔离:
- Host-Only模式比桥接模式更安全
- 禁用虚拟网卡的IPv6协议(如不需要)
-
定期检查:
- 监控虚拟机的网络流量
- 检查异常连接尝试