1. 场景需求与技术原理
最近在调试嵌入式开发板时遇到一个典型场景:手头只有一台连接Wi-Fi的Windows笔记本和一台需要通过有线网络访问的Ubuntu设备(可能是物理机或虚拟机),但现场没有路由器。这种无路由器环境下的跨系统网络共享需求,在嵌入式开发、临时测试等场景非常常见。
传统方案需要额外购置路由器或随身Wi-Fi,但其实Windows自带的"网络共享"功能就能完美解决。其核心原理是通过**网络地址转换(NAT)**技术,将Windows无线网卡接收的Wi-Fi信号,通过有线网卡共享给其他设备。整个过程涉及三个关键技术点:
- IP地址分配:Windows会为有线网卡自动分配192.168.137.1作为网关地址
- 数据包转发:系统内核会将无线网卡的数据包转发到有线网卡
- 地址转换:对外部网络隐藏内部设备的真实IP
实测这种方案的网络延迟仅比直连路由器高2-3ms,完全能满足U-Boot调试、文件传输等开发需求。我在多个嵌入式项目中使用这种方案,包括STM32MP157开发板网络启动、树莓派无屏调试等场景。
2. Windows端配置详解
2.1 基础网络共享设置
首先确保Windows已连接可用Wi-Fi。按下Win+R输入ncpa.cpl快速打开网络适配器界面(比层层点击控制面板快得多)。这里会看到所有网络接口,通常命名为"WLAN"和"以太网"。
右键点击已连接的无线网卡选择"属性",切换到"共享"选项卡。这里有两个关键选项:
- 允许其他网络用户通过此计算机的Internet连接来连接(必选)
- 允许其他网络用户控制或禁用共享的Internet连接(可选)
在"家庭网络连接"下拉菜单中,选择你要共享给Ubuntu的有线网卡(如"Realtek PCIe GbE")。点击确定时可能会看到警告提示,这是系统在自动配置防火墙规则,直接确认即可。
注意:如果下拉菜单为空,请检查有线网卡是否已启用。我遇到过网卡驱动异常的情况,在设备管理器中重新启用后解决。
2.2 高级网络参数调整
共享功能启用后,Windows会自动将有线网卡的IP设为192.168.137.1。我们可以通过命令验证:
ipconfig /all在输出中找到对应的以太网适配器,确认IPv4地址是否正确。
有时可能需要手动调整防火墙规则。以管理员身份运行PowerShell:
# 允许ICMP回显(ping) netsh advfirewall firewall add rule name="ICMP Allow" dir=in action=allow protocol=icmpv4 # 查看现有规则 Get-NetFirewallRule | Where-Object {$_.Enabled -eq $true} | Format-Table Name,Profile,Direction,Action3. Ubuntu端网络配置
3.1 图形界面配置方法
对于桌面版Ubuntu,最简单的配置方式是使用网络管理器:
- 点击右上角网络图标 → 选择"有线连接" → "有线设置"
- 点击齿轮图标进入当前连接配置
- 在IPv4标签页将方法改为"手动"
- 填写以下参数:
- 地址:192.168.137.x(x为2-254间任意值)
- 子网掩码:255.255.255.0
- 网关:192.168.137.1
- DNS:可以添加8.8.8.8或114.114.114.114
保存后立即生效,无需重启。我习惯使用192.168.137.100这个地址,避免与其他设备冲突。
3.2 命令行配置方案
对于服务器版或需要脚本化配置的场景,可以通过netplan实现。编辑配置文件:
sudo nano /etc/netplan/01-network-manager-all.yaml添加以下内容(注意保持YAML缩进):
network: version: 2 renderer: networkd ethernets: eth0: addresses: - 192.168.137.100/24 routes: - to: default via: 192.168.137.1 nameservers: addresses: [8.8.8.8, 114.114.114.114]应用配置:
sudo netplan apply4. 虚拟机特殊配置技巧
4.1 VMware虚拟网络设置
当Ubuntu运行在VMware虚拟机时,需要额外配置虚拟网络编辑器:
- 打开VMware → 编辑 → 虚拟网络编辑器
- 选择VMnet8(NAT模式)→ 更改为"桥接模式"
- 在"桥接到"下拉菜单中,选择Windows主机共享网络的那个物理网卡
- 确保虚拟机设置中的网络适配器选择"自定义:特定虚拟网络 - VMnet8"
这里有个常见坑点:如果主机有多个物理网卡(比如某些游戏本同时有有线网卡和雷电接口),务必选择正确的那个。我曾在联想拯救者笔记本上因为选错接口折腾半小时。
4.2 VirtualBox的端口转发方案
对于VirtualBox用户,可以采用端口转发方案:
- 虚拟机设置 → 网络 → 选择"NAT"
- 点击"端口转发"按钮
- 添加规则:
- 名称:SSH
- 协议:TCP
- 主机IP:留空
- 主机端口:2222
- 客户机IP:留空
- 客户机端口:22
这样就能通过主机的2222端口访问虚拟机的SSH服务:
ssh -p 2222 username@localhost5. 网络测试与排错指南
5.1 基础连通性测试
配置完成后,建议按以下顺序测试:
# 测试网关连通性 ping 192.168.137.1 # 测试DNS解析 ping baidu.com # 测试外网连通性 ping 8.8.8.8如果出现"Network is unreachable"错误,可能是路由表异常。尝试:
sudo ip route add default via 192.168.137.1 dev eth05.2 常见问题解决方案
问题1:Windows能ping通Ubuntu但反之不行
- 检查Windows防火墙:允许ICMPv4入站规则
- 运行命令:
netsh firewall set icmpsetting 8 enable
问题2:能ping通IP但无法解析域名
- 检查Ubuntu的/etc/resolv.conf文件
- 临时添加DNS:
sudo echo "nameserver 8.8.8.8" >> /etc/resolv.conf
问题3:虚拟机无法获取IP
- 检查虚拟网络编辑器设置
- 重启虚拟机网络服务:
sudo systemctl restart systemd-networkd
6. 嵌入式开发实战案例
6.1 U-Boot网络配置
在开发板U-Boot环境中设置网络参数:
setenv ipaddr 192.168.137.200 setenv serverip 192.168.137.100 setenv gatewayip 192.168.137.1 setenv netmask 255.255.255.0 saveenv测试网络:
ping 192.168.137.100如果显示"host 192.168.137.100 is alive"表示成功。
6.2 TFTP文件传输
在Ubuntu上搭建TFTP服务器:
sudo apt install tftpd-hpa sudo systemctl start tftpd-hpa将zImage和dtb文件放入/tftpboot目录,在U-Boot中下载:
tftp 0x80008000 zImage tftp 0x83000000 dtb bootz 0x80008000 - 0x830000007. 性能优化与安全建议
7.1 网络性能调优
对于大文件传输场景,可以调整MTU值提升效率:
# Windows端(管理员权限) netsh interface ipv4 set subinterface <接口ID> mtu=1472 store=persistent # Ubuntu端 sudo ip link set eth0 mtu 14727.2 安全防护措施
临时网络共享存在安全风险,建议:
- 使用完成后立即关闭共享
- 在Windows防火墙中限制入站连接
- 定期检查ARP表:
arp -a - 考虑启用MAC地址过滤
这种方案我在树莓派集群调试、现场设备维护等场景反复验证过,最大的优势是无需额外设备,特别适合移动办公场景。有次在客户现场调试工业控制器,正是靠这个方案快速搭建起临时网络环境,顺利完成固件升级。