OK3588 开发板|笔记本 WiFi 共享网络给 Linux 服务器(ICS 共享 + 路由排坑,解决内网通外网不通)

一、场景说明

硬件环境

  1. 上位机:Windows笔记本(WiFi连接外网,有线网口直连开发板)
  2. 下位机:OK3588开发板(Ubuntu Linux系统,双网口eth0、eth1)

组网需求

笔记本开启Windows自带【Internet连接共享(ICS)】,把WiFi网络共享给有线网卡,开发板网线直连笔记本,以笔记本作为网关访问外网。

常见故障现象

开发板可以ping通笔记本网关192.168.137.1,内网通信完全正常,但是无法ping通外网IP(8.8.8.8),域名解析失败。


二、第一步:Windows笔记本配置(ICS网络共享)

1. 开启网络共享

  1. 打开「更改适配器设置」,找到WLAN(正在上网的无线网卡)、以太网(网线连接板子的网卡,网络2)。
  2. 右键WLAN → 属性 → 【共享】选项卡。
  3. 先取消勾选共享,保存;再次打开,重新勾选:
    允许其他网络用户通过此计算机的Internet连接来连接
  4. 家庭网络连接选择:以太网(网络2),点击确定。

生效后,笔记本有线网卡会自动固定IP:192.168.137.1,这是ICS默认网段。

2. Windows关键优化(90%联网失败都卡在这一步)

以管理员身份打开CMD,逐条执行命令:

cmd 复制代码
# 1. 开启ICS共享核心服务
sc config SharedAccess start= auto
net stop SharedAccess
net start SharedAccess

# 2. 开启IPv4数据包转发(NAT转发必备)
netsh int ipv4 set global forwarding=enabled

# 3. 重置Windows网络协议栈,修复共享失效bug
netsh winsock reset
netsh int ip reset

执行完成后重启笔记本电脑

3. 关闭所有拦截策略

  1. 彻底退出火绒、360、电脑管家等第三方杀毒软件;
  2. 关闭Windows Defender防火墙(专用+公用网络全部关闭);
    防火墙会直接拦截开发板的外网转发数据包。

三、第二步:OK3588开发板(Linux端IP与路由配置)

1. 查看本机网卡信息

执行ifconfig,查看网卡设备名称:

bash 复制代码
root@ok3588:~# ifconfig
docker0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:bc:cd:b9:bc  txqueuelen 0  (Ethernet)

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.232  netmask 255.255.255.0  broadcast 192.168.0.255
        ether 76:c6:f0:f5:03:0a  txqueuelen 1000

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        ether 00:e0:99:a6:9c:98  txqueuelen 1000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000

目标网卡:eth0,为有线直连笔记本的网口。

2. 给网卡新增137网段子IP(和网关同网段)

bash 复制代码
# 给eth0新增IP:192.168.137.11
ifconfig eth0:1 192.168.137.11

3. 修改默认路由(核心!网关指向笔记本192.168.137.1)

  1. 先删除系统自带的旧默认网关:
bash 复制代码
ip route del default
  1. 新增默认路由,把所有外网流量转发到笔记本共享网关:
bash 复制代码
ip route add default via 192.168.137.1

4. 查看最终路由表

bash 复制代码
root@ok3588:~# ip route show
default via 192.168.137.1 dev eth0
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.232
192.168.137.0/24 dev eth0 proto kernel scope link src 192.168.137.11

✅ 路由规则解读:

  • 内网网段保留原有通信;
  • 所有外网流量全部交给笔记本192.168.137.1转发。

5. 清理Linux防火墙,避免数据包被拦截

bash 复制代码
# 清空iptables所有过滤规则
iptables -F
iptables -t nat -F
# 关闭反向路由校验(多网卡机器必开,防止回程路由被拦截)
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0

6. 配置DNS,防止域名解析失败

bash 复制代码
echo "nameserver 114.114.114.114" > /etc/resolv.conf
echo "nameserver 8.8.8.8" >> /etc/resolv.conf
# 锁定DNS文件,防止系统自动覆盖
chattr +i /etc/resolv.conf

四、第三步:连通性测试

测试1:ping内网网关(必须通)

bash 复制代码
ping 192.168.137.1

正常输出:延迟1~3ms,零丢包,说明二层网线+ARP通信正常。

测试2:ping外网IP

bash 复制代码
ping 8.8.8.8

测试3:域名连通测试

bash 复制代码
ping www.baidu.com

能正常收到数据包,代表网络配置全部完成。


五、重点故障排查:内网通,外网完全不通

故障现象

可以正常ping通192.168.137.1,但是外网数据包发出去没有任何回复。

根因定位

Linux路由、网卡配置完全正常,问题出在Windows ICS共享没有开启NAT转发,仅打通了内网,没有转发外网流量

排查顺序

  1. 检查笔记本本机能不能正常上网(WiFi网络无异常);
  2. 重新执行上文Windows管理员CMD命令,重启ICS服务;
  3. 双重确认Windows防火墙、杀毒软件全部关闭;
  4. 检查路由表,删除多余的静态路由条目,避免多网段造成路由冲突;

不要同时配置多条同网段静态路由,会导致数据包迷路。

兜底替代方案(ICS共享bug太多时使用)

Windows自带的Internet共享稳定性极差,多网段环境极易失效:

  1. 方案A:笔记本开启手机热点,开发板直连路由器DHCP自动获取IP;
  2. 方案B:改用VMware虚拟机NAT模式,彻底抛弃ICS网络共享。

六、永久固化配置(重启不失效)

把临时IP、路由写入网卡配置文件/etc/network/interfaces,开机自动加载,不需要反复手动敲命令。


结尾总结

  1. ICS共享会自动生成192.168.137.x网段,开发板必须配置同网段IP;
  2. 默认网关必须指向笔记本192.168.137.1,删除原有默认路由;
  3. 内网通外网不通,99%是Windows端NAT转发被防火墙拦截或共享服务异常;
  4. 多网卡Linux务必关闭rp_filter反向路由过滤,防止数据包被内核丢弃。