OPENWRT-Day01

# 方案 A 完整复盘:OpenWrt 树莓派「WiFi 当 WAN + eth0 当 LAN」

这是一份从你零基础到跑通的全过程记录,包含拓扑、配置步骤、踩坑与修复。


一、方案 A 是什么

```text

WiFi (WAN)

家里主路由\] ←────────────────── \[树莓派 OpenWrt

2.4G SSID │

eth0 (LAN)

你的 PC

```

| 角色 | 接口 | 作用 |

|------|------|------|

| **WAN** | `phy0-sta0`(WiFi 客户端) | 连家里路由器,Pi 从这里上网 |

| **LAN** | `eth0` → `br-lan` | 网线直连 PC,PC 经 Pi 出网 |

**为什么不需要 USB 网卡?**

教程里加 USB 网口,是因为默认假设 **eth0 = LAN、第二个口 = WAN**。你只有一根网线时,eth0 接 PC 是**正确用法**;缺的只是 **第二条上行**,用 **WiFi 补上** 即可。

**为什么选 OpenWrt?**

Pi 当网关时,能统计整网 DNS、连接数、端口流量------这是后面做「网络心跳 SPI 屏」的基础。


二、硬件与物理连接

```text

PC 以太网口\] ←------网线------→ \[树莓派 eth0

树莓派 WiFi\] ←------无线------→ \[家里 2.4G WiFi

```

注意:

  • 树莓派 4B **WiFi 只有 2.4GHz**,必须连 **2.4G SSID**,不能连 5G。

  • PC 与 Pi 之间 **不要** 开 Windows「Internet 连接共享 (ICS)」。

  • 配置阶段建议 **关掉 PC 的 WiFi**,避免 PC 绕过 Pi 直接上网。


三、完整配置流程

阶段 0:PC 网络(最初用 192.168.1 网段)

| 项 | 值 |

|----|-----|

| IP | `192.168.1.100` |

| 掩码 | `255.255.255.0` |

| 网关 | `192.168.1.1` |

| DNS | `192.168.1.1` |

SSH 目标是 **Pi**,不是 PC 自己:

```bash

ssh root@192.168.1.1 # 对

ssh root@192.168.1.10 # 错(若 .10 是 PC 自己的 IP)

```


阶段 1:确认 LAN(eth0 / br-lan)

目标:eth0 在桥里,LAN 地址固定为 Pi 网关。

```bash

uci show network.lan

uci show network | grep -E 'br-lan|eth0'

ip addr show dev br-lan

brctl show

```

**你的正确结果:**

```text

network.lan.device='br-lan'

network.lan.ipaddr='192.168.1.1/24'

network.@device0.ports='eth0'

br-lan 下有 eth0,IP 为 192.168.1.1

```

结论:**LAN 配置正确,eth0 没有被 PC「占用坏」,而是正常充当 LAN 口。**


阶段 2:配置 WiFi 当 WAN

2.1 无线客户端(STA)

```bash

uci set wireless.radio0.country='CN'

uci set wireless.radio0.disabled='0'

uci set wireless.default_radio0.disabled='1' # 关掉默认 AP

uci set wireless.sta=wifi-iface

uci set wireless.sta.device='radio0'

uci set wireless.sta.mode='sta'

uci set wireless.sta.network='wan'

uci set wireless.sta.ssid='你的2.4G_WiFi名'

uci set wireless.sta.encryption='psk2'

uci set wireless.sta.key='你的WiFi密码'

uci commit wireless

```

2.2 WAN 接口

```bash

uci set network.wan=interface

uci set network.wan.proto='dhcp'

uci set network.wan.device='phy0-sta0' # 不是 wlan0!

uci commit network

wifi down

wifi up

/etc/init.d/network restart

```

2.3 验证 WAN

```bash

ip addr show dev phy0-sta0

ping -c 3 223.5.5.5

```

**成功标志:** `phy0-sta0` 有 IP(如 `192.168.1.113`),且能 ping 通 `223.5.5.5`。


阶段 3:防火墙 + PC 出网

```bash

uci set firewall.@zone1.masq='1'

uci set firewall.@zone1.mtu_fix='1'

uci commit firewall

/etc/init.d/firewall restart

```

确认存在 `lan → wan` 转发(一般默认就有)。

PC 上网测试:

```powershell

ping 192.168.1.1

ping 223.5.5.5

ping baidu.com

```

**你当时三条都通 → 方案 A 从 PC 视角已跑通。**


阶段 4:修复 Pi 本机 DNS + 网段冲突(后续完善)

4.1 Pi 不能 ping `baidu.com`

```text

ping 223.5.5.5 → 通(IP 路由 OK)

ping baidu.com → bad address(DNS 解析失败)

```

**原因:** Pi 本机查域名走 `/etc/resolv.conf` → dnsmasq,上游 DNS 未配好;PC 能 ping 域名,是因为 PC 用的 DNS 路径和 Pi 本机不同。

**修复:**

```bash

uci set network.wan.peerdns='0'

uci delete network.wan.dns

uci add_list network.wan.dns='223.5.5.5'

uci add_list network.wan.dns='114.114.114.114'

uci commit network

uci set dhcp.@dnsmasq0.noresolv='0'

uci add_list dhcp.@dnsmasq0.server='223.5.5.5'

uci add_list dhcp.@dnsmasq0.server='114.114.114.114'

uci commit dhcp

/etc/init.d/network restart

/etc/init.d/dnsmasq restart

```

4.2 `udhcpc: no lease, failing`

WiFi 已连接,但重启网络后 WAN 拿不到 DHCP。

**根因:LAN 与 WAN 同网段冲突**

```text

br-lan (eth0) → 192.168.1.1/24

phy0-sta0 (WiFi) → 也要 192.168.1.0/24

主路由网关 → 通常也是 192.168.1.1

```

Pi 自己占着 `192.168.1.1`,WAN 又要向 `192.168.1.1` 要 DHCP,内核路由混乱,`udhcpc` 就容易失败。

**修复:把 LAN 改到独立网段**

| 接口 | 改后网段 |

|------|----------|

| LAN (`br-lan`) | `192.168.50.1/24` |

| WAN (`phy0-sta0`) | 保持 `192.168.1.x`(主路由网段) |

| PC | `192.168.50.100`,网关 `192.168.50.1` |

```bash

uci set network.lan.ipaddr='192.168.50.1/24'

uci commit network

/etc/init.d/network restart

```

改完后 PC 与 Pi 都用 **50 网段** 通信,WAN 在 **1 网段** 向主路由要 IP,不再打架。


四、问题与解决对照表

| # | 现象 | 原因 | 解决 |

|---|------|------|------|

| 1 | SSH 连不上 `192.168.1.10` | `.10` 是 PC 自己的 IP,不是 Pi | SSH 目标改为 `192.168.1.1`(后改为 `192.168.50.1`) |

| 2 | 以为 eth0 被占用,必须 USB 网卡 | 误解教程拓扑 | eth0 = LAN 接 PC 正确;WAN 用 WiFi 即可 |

| 3 | 命令报错 `grep: show: No such file` | 多条命令粘在一行 | 每次只粘贴一行执行 |

| 4 | `ip: can't find device 'wlan0'` | OpenWrt 在 Pi 上无线口名是 `phy0-sta0` | `uci set network.wan.device='phy0-sta0'` |

| 5 | `NO-CARRIER` / `Failed to initiate sched scan` | 国家码、默认 AP、可能连了 5G | 设 `country=CN`、关 AP、连 **2.4G** SSID |

| 6 | 误加 `wireless.sta.sskey` | 字段名错误,应为 `key` | `uci delete wireless.sta.sskey`,用 `key` |

| 7 | `wifi downwifi down` 报错 | 又是命令粘在一起 | `wifi down` 与 `wifi up` 分开执行 |

| 8 | PC 全通,Pi 不能 ping `baidu.com` | Pi 本机 DNS 未配置 | 给 WAN/dnsmasq 配上游 DNS |

| 9 | `udhcpc: no lease, failing` | LAN/WAN 同网段 + 网关 IP 冲突 | LAN 改 `192.168.50.0/24` |


五、最终稳定拓扑

```text

主路由 192.168.1.1

↑ WiFi 2.4G

phy0-sta0 (WAN, DHCP 192.168.1.x)

OpenWrt Pi

br-lan 192.168.50.1 (LAN)

eth0

PC 192.168.50.100

```

**数据流:**

```text

PC → 192.168.50.1 (Pi) → NAT → phy0-sta0 → 主路由 → 互联网

```


六、常用维护命令

```bash

看接口

ip -br addr

brctl show

看 WAN 是否拿到 IP

ip addr show dev phy0-sta0

测 Pi 出网

ping -c 2 223.5.5.5

ping -c 2 baidu.com

无线重连

wifi reload

ifup wan

看日志

logread | tail -30

```


七、经验小结

  1. **单网口 Pi 不是 eth0 坏了**,而是 WAN/LAN 要分到 **WiFi + eth0** 两个口上。

  2. **接口名以 `ip link` 为准**,Pi 上常见 `phy0-sta0`,不是 `wlan0`。

  3. **`ping IP` 通 ≠ DNS 通**;PC 能上网不代表 Pi 本机 DNS 已配好。

  4. **LAN 与 WAN 不要用同一网段**;Pi LAN 尽量别和主路由网关同 IP(都用 `192.168.1.1` 会出各种怪问题)。

  5. SSH 里 **一行一回车**,避免命令粘在一起。


八、下一步(你原本的目标)

网络底座已就绪,可以继续:

  1. **SPI ST7735 屏**:接 GPIO,在 OpenWrt 上读 `phy0-sta0` / `br-lan` 流量、dnsmasq 统计做「心跳显示」。

  2. **Docker 靶机 / DNS 隧道实验**:建议放在 **PC 或 NAS** 上;OpenWrt 继续当网关更合适。

如果你愿意,下一步可以从 **ST7735 接线 + OpenWrt 点亮第一帧** 开始,我可以按你的 1.44 寸屏逐步写命令。

相关推荐
水利行业RTU手艺人6 小时前
RTU固件中的“数据保险箱”——离线数据补发系统设计
c++·stm32·单片机·物联网
2301_793121048 小时前
基于单片机的水平角度仪系统设计
单片机·嵌入式硬件
KaifuZeng9 小时前
通信与接口协议面试十、PCIe
单片机·嵌入式硬件·面试·通信与接口协议
lzx186488437029 小时前
【AH8966】可替代 KP3211 非隔离 AC110220V转12V 0.5A 降压转换芯片
人工智能·单片机·嵌入式硬件·集成测试·硬件工程·ic
csg110710 小时前
PIC单片机防破解:从硬件到软件的全面防护
单片机·嵌入式硬件·物联网·自动化
电化学仪器白超11 小时前
低阻域 ADC 与参考源选型理论分析
人工智能·python·单片机·嵌入式硬件·自动化
小小的代码里面挖呀挖呀挖11 小时前
杰理蓝牙耳机开发--LE Audio与游戏耳机应用
笔记·单片机·物联网·学习
张海森-16882011 小时前
怎么算进程 总共运行时间
单片机
bu_shuo12 小时前
STM32-BOOT的三种启动方式
stm32·单片机·嵌入式硬件
YYRAN_ZZU12 小时前
Lattice 自定义IP业务逻辑核
嵌入式硬件·fpga开发