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 寸屏逐步写命令。

相关推荐
u1521096484925 分钟前
S.S.Audio PRO A2音频隔离器
嵌入式硬件·音视频·实时音视频·视频编解码·视频
zd84510150043 分钟前
RS485 总线详解
单片机·嵌入式硬件
半条-咸鱼2 小时前
【STM32】I2C协议原理、HAL读写与OLED显示操作
嵌入式硬件·c·信息与通信
牛根生同志2 小时前
SPI数据收发的时候 TXE与RXNE标志位置位的时机
stm32·spi·transfer
wohoo_wangzi2 小时前
苏州晟雅泰电子:关于W25Q128JVSIQ这个芯片物料的参数,规格及应用领域
嵌入式硬件
goldenrolan4 小时前
学习型红外控制系统稳定性挂测工装专项总结
软件测试·python·stm32·嵌入式·红外
✎ ﹏梦醒͜ღ҉繁华落℘4 小时前
编程基础 --高内聚,低耦合
c语言·单片机
科芯创展5 小时前
1A,1MHz,30VIN,XZ4115,降压恒流LED驱动芯片
单片机·嵌入式硬件
集芯微电科技有限公司5 小时前
四通道2A输出集成功率电感降压模块专为紧凑型方案设计
人工智能·单片机·嵌入式硬件·生成对抗网络·计算机外设
踏着七彩祥云的小丑5 小时前
嵌入式测试学习第 37 天:异常场景测试:断电、拔插、干扰、非法指令
单片机·嵌入式硬件·学习