2022-12-04 更新

现在树莓派的价格贵得离谱,性价比很低。如果你还没买,建议你别买。如果你已持有树莓派,建议去闲鱼卖了,换成玩法更多、性能更强的 X86 软路由/迷你主机。我 2019 年 10 月买的树莓派 4B 4GB 内存版价格是 462 元,现在同一家店卖 1098 元。我在闲鱼以 950 元卖掉了树莓派 4B 4GB(含外壳、风扇、电源、HDMI 线、内存卡),买了 1095 元的零刻 EQ59(N5105、16GB RAM、500GB SSD)。EQ59 性能远超树莓派 4B,我在 EQ59 装了 Proxmox VE,可以装多个虚拟机,用途更多,比树莓派好用多了。

树莓派作路由器有什么功能?

本文内容主要来自 SuLingGGOpenWrt-Rpi 文档,感谢 SuLingGG 编译的 OpenWrt 并写了详细的文档。我的吃灰派树莓派 4B 在墓里躺了近两年,又复活了。欢迎大家捐赠 SuLingGG 编译的 OpenWrt。如果本文太难懂,请到 Youtube 或者哔哩哔哩搜索「树莓派安装 OpenWrt」和「树莓派 旁路由」,看看教程视频了解过程。然后关闭这篇教程再回来看本文。本文主要内容为安装 OpenWrt 固件、旁路由(旁路网关)设置、后续设置(扩充容量、关闭电源灯……)。

请看 SuLingGG 的文档:

刷入固件

刷入固件前先准备好作案工具:

  • 选择一个网站下载 SuLingGG 编译的 Lean OpenWrt 固件:openwrt.ccGoogle Drive

    • Google Drive 的下载位置如下,请选择日期最新的固件,如果最新日期没有树莓派 4B 的固件就看看之前的

    • 1
      2
      3
      4
      5
      6
      7
      8
      
        firmware
            ├── 2021-08-26
            ├── 2021-08-27
            ├── 2021-08-28
            └── ...
                └── lean # Lean 版固件
                    └── bcm27xx # Lean 版树莓派系列固件
                        └── bcm2711 # 适用于树莓派 4B (64位)
      
    • 下载文件名包含 ext4-factory 或 squashfs-factory 的文件,例如 openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img.gz。squashfs 重置系统更方便,ext4 固件扩充容量更简单。下文以 ext4 固件为例。固件版本的区别请看这里

    • 解压文件,获得 openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img

  • 安装 balenaEtcher

  • microSD(TF1)卡(固件大概 1G,建议闪存卡2至少 4G)

  • microSD(TF)读卡器(建议买 USB3.0 版,速度更快)

  • 删除闪存卡所有分区,格式化为 fat32(不格式化可能导致无法保存设置

  • 1 条千兆网线

  • 电脑(带网口的更好)

  • SSH 客户端(可忽略)

准备完毕,现在开始刷入固件:

  1. 把闪存卡插入读卡器,读卡器插入电脑
  2. 打开 balenaEtcher
  3. 点击「Flash from file」
  4. 选择解压好的「openwrt-bcm27xx-bcm2711-rpi-4-ext4-factory.img」
  5. 点击「Select target」,选择闪存卡,注意看容量对不对,请勿选择本机硬盘
  6. 点击「Flash!」
  7. 成功后把闪存卡插入树莓派,树莓派插电后红灯常亮表示正常

树莓派设置

路由器默认 IP 是 192.168.1.1,用户为 root,密码为 password。如果操作中出现问题导致无法继续配置,请重新刷入固件。

连接树莓派

选择一种连接树莓派的方式:

  • 断开树莓派的有线连接,电脑连接树莓派发射的 WIFI:OpenWrt
  • 断开电脑的无线连接,用网线接入树莓派

修改 WIFI 密码

为了防止别人连上 WIFI 捣蛋,先修改 WIFI 密码。

  1. 点击「网络 -> 无线 -> 修改」
  2. 点击「基本设置」,在「ESSID」填入 WIFI 名称
  3. 点击「无线安全」,在「密码」填入新密码
  4. 点击「保存&应用」

更改 LAN 口 IP 地址

我的路由器管理界面地址为 192.168.0.1,接下来要把树莓派的 IP 改为与路由器同一网段,即 192.168.0.x(0≤x≤255)。这里我把树莓派 LAN 口 IP 设置为 192.168.0.100。为了避免冲突,不要把树莓派 LAN 口 IP 最后一段设置成 0/1/255。请根据情况设置,不要照搬我的 IP。如果你的路由器管理界面为 192.168.31.1,那你可以把 IP 设置为 192.168.31.100。更改 IP 后请记好,以后管理界面都在 192.168.0.100。设置前在电脑可以打开终端(CMD 或 Powershell )检查是否冲突:

1
ping 192.168.0.100

如果显示「Destination Host Unreachable」就代表地址没被占用。如果没问题就选择一种设置方式将 LAN 口 IP 改为 192.168.0.100:

  • 打开终端执行命令:

    1
    2
    3
    4
    
    ssh [email protected] # 密码是 password
    uci set network.lan.ipaddr=192.168.0.100
    uci commit network
    /etc/init.d/network restart
    
  • 用浏览器访问 http://192.168.1.1/,用户名为 root,密码为 password,手动设置:

    • 点击「网络 -> 接口 -> LAN -> 修改」
    • IPv4 地址改为 192.168.0.100
    • 点击「保存&应用」

设置好后重新连接树莓派网络。

更改 LAN 口参数

  • 登陆 http://192.168.0.100/
  • 点击「网络 -> 接口 -> LAN -> 修改」
    • 协议:静态地址
    • IPV4 地址:192.168.0.100(之前修改过,现在保持不变)
    • IPv4 子网掩码: 255.255.255.0
    • IPv4 网关:改为上级路由器管理界面 IP:192.168.0.1
    • Pv4 广播:把上级路由网段 IP 最后一段改为 255: 192.168.0.255
    • 使用自定义的 DNS 服务器:同样为上级路由器 IP:192.168.0.1
    • 忽略此接口/不在此接口提供 DHCP 服务 (在页面底部):打勾
  • 点击「保存&应用」

连接路由器

断开电脑与树莓派的连接,用网线将树莓派接到路由器 LAN 口。

客户端设置

连接主路由的设备需要进行以下设置:

  • IP 获取方式改为 「静态(或手动)」
  • IP 地址:填为路由器网段下任意不冲突的 IP (不能与已分配的 IP 冲突,IP 最后一段也不可为 0/1/255),以上文为例,可设置为 192.168.0.166
  • 前缀长度/子网掩码:若提示填写前缀长度,则填写 24,若提示填写子网掩码,则填写 255.255.255.0
  • DNS:填写为树莓派 LAN 口 IP:192.168.0.100
  • 网关/路由器:填写为树莓派 LAN 口 IP:192.168.0.100
  • 其他设置保持默认即可

安装后的设置

建议修改管理员密码,其余设置按需调整。

扩充容量

固件只使用闪存卡 1G 左右的空间,剩下的空间就闲置了。我前面刷入了 ext4 固件,使用 Linux 系统的 GParted 调整 rootfs 分区即可扩充空间。rootfs 分区前后至少留出 4M 的空间3。详细教程:SD 卡分区扩容指南 | 美丽应用

修改管理员密码

  1. 点击「系统 -> 管理权」
  2. 在「密码」和「确认密码」处填入管理员密码
  3. 在「SSH 密钥」处填写公钥后可以 SSH 免密码连接
  4. 点击「保存&应用」

关闭电源灯

红色电源灯看着不舒服,于是我就关掉了。

点击「系统 -> LED 配置」,使用两个配置。

  • 配置 1
    • 软件:led0
    • LED 名称:led0
    • 默认状态:不打勾
    • 触发器:无
  • 配置 2
    • 软件:led1
    • LED 名称:led1
    • 默认状态:不打勾
    • 触发器:无

防火墙

我的树莓派刷入系统网络后没问题,但还是引用一下旁路由设置指南的内容,留给需要的人。

  1. 如果你的上级路由固件为 老毛子 Pandavan,树莓派做旁路由出现卡顿情况的话,请尝试关闭 Wan 口设置中的 “IPv4 硬件加速”

  2. 如果你严格按照此文章操作,但出现 无法上网、访问国内网站缓慢 等症状,可在完成上文全部步骤的基础上,在“网络 - 防火墙 - 自定义规则”中新增一行 iptables 规则并重启防火墙再试:

    1
    
    iptables -t nat -I POSTROUTING -j MASQUERADE
    

    若仍未解决,可以尝试删除原有两条规则并重启防火墙再试:

    1
    2
    
    iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
    iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
    
  3. 如果以上两个方法未能解决,请尝试在 Lan 口的“物理设置”中取消“桥接接口”的打勾,并在下方的“接口”中选择“eth0”,保存并应用再试。但请注意,此时树莓派的板载无线网卡将无法使用 (有信号但无法上网)。

  4. 本篇文章所述设置方法可能对某些型号的华为路由器无效,建议更换其他路由器再试。

超频与散热

超频后性能更强,相关教程请看我写的两篇博客。

问答

树莓派与路由器断开连接后,怎么让电脑连接树莓派?

通过 WIFI 或网线连接树莓派,手动把 IP 设置为 192.168.0.100 的同一网段,即 192.168.0.x(0≤x≤255,x≠100),例如 192.168.0.1。此时就能连接,可以用浏览器进入管理界面 192.168.0.100 了。

忘了树莓派的 IP 地址怎么办?

先把 microSD 卡插入 Linux 电脑,然后打开终端执行命令。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 查看分区
# user 为你的用户名
ls /media/user
# 11cd116c-beae-43ae-bfb5-b8ec18c9b98a  boot  disk

# 进入分区
# 请根据情况输入分区名称
cd /media/user/11cd116c-beae-43ae-bfb5-b8ec18c9b98a

# 查看 ip
grep "ipaddr" ./upper/etc/config/network
# option ipaddr '127.0.0.1'
# option ipaddr '192.168.0.100'

输出结果里的 192.168.0.100 就是 IP 树莓派地址。如果你不会用 Linux 就重新刷固件吧。

OpenWrt-Rpi 的插件太多了,有精简版吗?

请使用 OpenWrt-Rpi 的姊妹版 OpenWrt-Mini,点击这里下载,安装方法和 OpenWrt-Rpi 一样。

参考资料


  1. microSD 才是正确的名称,但它常被误称为 TF 卡。两者的关系如下(摘录自维基百科):microSD卡原本称为TF卡(T-Flash卡或TransFlash),由摩托罗拉与闪迪共同研发,在2004年推出。不过闪迪无法自行将它推广普及化,前期仅有摩托罗拉的手机支持TransFlash。为了能将销路完全拓展,闪迪于是将TransFlash规格并入SD协会,成为SD家族产品之一,造就了目前使用最广泛的手机存储卡。 ↩︎

  2. microSD 是闪存(flash memory)卡,而不是内存(RAM,Random Access Memory)卡,但「内存卡」的说法更广泛。 ↩︎

  3. 「rootfs 分区前后至少留出 4M 的空间」的说法是在这里看到的,其实我也不知道为什么要留出 4M 空间。如果你知道,请告诉我。 ↩︎