树莓派 4B 做软路由🔥

5,996 阅读8分钟

引言

在这个信息化产业遍地开花的时代, 随着家庭宽带速率的不断提升, 现有路由器厂商的解决方案逐渐不再能满足有进阶需求的用户, 软路由解决方案应运而生, 通过软路由我们可以实现很多 定制需求, 下面我们来简单了解下 硬路由软路由透明代理 的基本概念:

硬路由: 目前我们家里普遍使用的路由器, 有厂家提供整体的解决方案, 包括处理器、电源供应、嵌入式软件, 提供设定的路由器功能, 比如常用路由器品牌有 TP-Link华为H3C 等等, 而这些我们平常所接触的路由器就属于 路由

软路由: 由一台 小主机 + Linux 系统 + 专用的 路由程序 (比如 OpenWrt)组成, 软路由 其实就是台式机或服务器配合软件形成路由解决方案, 主要靠应用软件的设置, 从而达成路由器的功能, 说白了软路由就是 PC 的硬件加上 路由系统实现路由器 的功能, 相比硬路由可玩性、扩展性就高了很多

透明代理: 设备只要连接上了家里网络(WIFI), 就可以自动的实现代理, 进行自由而又快乐的冲浪 🏄🏻, 无需任何设置喔😯

刚好手头有个落灰的树莓派, 今天我们的目标就是使用 树莓派 做一个 旁路由, 实现 透明代理

一、编译「OpenWrt」固件

OpenWrt 是一个高度模块化、高度自动化的嵌入式的 Linux 发行版, 它拥有强大的网络组件和扩展性, 常常被用于工控设备、智能家居、路由器等设备中, 同时它还提供了上百个已编译好的软件

OpenWrt 虽然支持很多软件, 但是呢它可能并不完全适合国内环境, 因为国内环境中可能会用到的部分软件、功能, 它是不支持的, 所以呢国内很多大佬就会基于 OpenWrt 加入了很多中国特色的软件、功能并进行开源, 而其中比较火的就数 Lean 了, 下面我们就基于 Lean 来编译我们所需要的 OpenWrt 固件

我的理解: OpenWrt 固件是啥? 简单来说它是一个镜像、一个 Linux 系统, 里面包含我们定制的功能模块, 可帮我们实现定制化路由功能

1.1 Ubuntu 环境搭建

Lean 中推荐编译环境为 Debian 11Ubuntu LTS, 对于环境搭建方式, 可以选择 虚拟机 或购买 云主机 甚至可以通过 GitHub Actions 来实现, 当然这里我们 另辟蹊径, 通过 Docker 来搭建编译环境, 如果需要了解 Docker 相关使用可查阅 《Docker 使用指南》 本文所使用到的命令, 基本都讲解到了

补充: 经过测试 Mac M1 下, 使用该方式在 第二步 安装依赖包时会 报错, 目前暂时没找到解决办法

  1. 运行 Ubuntu 镜像
docker run -d -t ubuntu
  1. 进入 Docker 容器
docker ps # 查看当然运行的容器
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
31c7819018b6   ubuntu    "/bin/bash"   8 seconds ago   Up 5 seconds             crazy_mestorf
docker exec -it 31c7819018b6 bash ## 进入容器
  1. 安装 sudo 命令, 后面安装依赖需要用到 sudo
apt-get update
apt-get install sudo
  1. 创建一个普通用户

OpenWrt 被设计为由非 root 用户编译, 所以这里我们需要在构建主机中创建一个普通用户, 下面以创建 moyuanjun 用户为例

adduser moyuanjun         # 创建用户
usermod -G sudo moyuanjun # 为用户设置 sudo 权限
su moyuanjun              # 切换用户
cd                        # 进入当前用户 home 目录

1.2 安装编译依赖

  1. 更新依赖包
sudo apt update -y
sudo apt full-upgrade -y
  1. 安装所需要的依赖
sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \
bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \
git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \
libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \
mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \
libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \
vim wget xmlto xxd zlib1g-dev

这一步, 在安装依赖过程中会要求配置时区, 相关配置选择如下:

image

image

image

1.3 下载源代码, 更新 「feeds」 并选择配置

  1. 下载源代码
git clone https://github.com/coolsnowwolf/lede
cd lede
  1. 更新并安装 feeds
./scripts/feeds update -a
./scripts/feeds install -a
  1. 选择配置
make menuconfig

这一步, 执行命令后会弹出 配置列表, 配置流程如下:

  • 选择配置: 只需要配置下图中圈出的那几个, 具体选择如下

Snipaste_2023-05-25_22-45-02

  • 配置文件名设置: 这里保持默认即可(直接回车)

Snipaste_2023-05-25_22-45-33

  • 配置写入确认: 弹出确认弹窗, 退出即可(直接回车)

image

  • 退出: 完成配置后会退回到配置选择页, 这里选择 退出 即可

Snipaste_2023-05-25_22-47-46

1.4 编译固件

补充说明: 下面命令 -j 后面表示 线程数, 官方建议第一次编译推荐用 单线程(目的是在发生错误时, 能够更好的捕获错误), 但是如果你按照流程走下来, 这里基本已经稳了, 可以设置为多线程, 我这里直接选择使用 8 个线程

  1. 下载 dl
make download -j8
  1. 编译固件
make V=s -j8

1.5 拷贝

  1. 编译结果: 上文编译后生成的 固件, 会被保存在当前目录 bin/targets/bcm27xx/bcm2711
cd bin/targets/bcm27xx/bcm2711 && ls -n

image

  1. 查看路径: 使用 pwd 获取编译后镜像存储的目录

image

  1. 拷贝: 重开一个终端, 通过 docker cp 命令将 编译结果(固件) 拷贝到本地物理机上
# 拷贝 31c7819018b6 容器 /home/moyuanjun/lede/bin/targets/bcm27xx/bcm2711 目录到, 本地当前目录下
docker cp 31c7819018b6:/home/moyuanjun/lede/bin/targets/bcm27xx/bcm2711 .

image

1.6 自由食用

这里我已将编译后的固件全部上传到 GitHub Releases 上了, 如果有需要可自取

image

二、烧录系统

上文我们完成 OpenWrt 固件的编译, 下面开始烧录 OpenWrt

2.1 格式化

如果有需要, 我们可以使用 官方工具 先对 SD 卡进行格式化

image.png

2.2 烧录系统

如图, 这里我们可以使用 官方工具 进行烧录, 系统呢? 我们就选择 openwrt-bcm27xx-bcm2711-rpi-4-squashfs-factory.img.gz

image.png

等待一段时间……, 直到烧录结束

image

补充: 在实践过程中, 在重新烧录完 相同固件 后, 发现之前的配置信息会被保留, 经过折腾找到的解决办法就是, 先格式化一遍 SD 卡 --> 安装其他版本固件 --> 再次格式 --> 然后安装正确的固件

三、登录系统

SD 卡插入树莓派, 并启动, 接下来我们就需要访问 OpenWrt 管理后台

3.1 连接「OpenWrt」网络

首先第一步呢, 需要先连接上 OpenWrt 的网络, 这里我们有 两种 方式:

  1. 方法一: 启动树莓派后, 会有一个默认的名为 OpenWrtWIFI, 直接进行连接(没有密码)

image

  1. 方法二: 通过 网线树莓派 和我们的 电脑 进行 连接 即可, 如下图只要两边灯都亮了就说明连接成功

image

3.2 OpenWrt

连接上网络后, 我们就可以访问 OpenWrt 管理系统了, 默认 OpenWrt 管理系统地址为 192.168.1.1, 账号密码则为 root/password

首次登录

四、网络设置

上面我们虽然连接上了 OpenWrt 网络, 但是 OpenWrt 并没有连上我们家的网络, 所以现在我们是无法访问网络, 接下来我们需要一步步进行配置, 将 OpenWrt 连接上家里的网络

  1. 进入 OpenWrt 管理后台 接口配置

进入接口管理页面

  1. 修改默认 LAN 配置

修改 Lan

  1. 修改 LAN 内容如下, 其中 192.168.0.1 是我家里 路由器 的地址, 因为我家里移动网络的地址和 OpenWrt 默认地址冲突了都是 192.168.1.1, 所以我这里还将 OpenWrt 地址调整为 192.168.0.222, 最后的最后记得设置下 DNS 地址, 否则可能连不上网络

image

  1. 保存 & 应用: 这里会一直处于应用更改中, 这里不用搭理(猜测是因为 OpenWrt 被修改的原因)

保存、应用配置

  1. 树莓派 和家里 路由器 进行连接, 用 网线树莓派 的 接到路由器的 LAN 口即可

image

  1. 连接 OpenWrt 的默认 WIFI, 这时候不出意外应该是能够正常访问网络了

  2. 重新访问 OpenWrt 管理后台, 这里我们需要使用新的 IP 进行访问

image

五、安全设置

为了安全起见, 我们需要先修改下 OpenWrt 管理后台的登录密码, 同时还需要修改下默认 WIFI 的名称以及密码

5.1 登录密码设置

  1. 进入管理页面: 系统 --> 管理权

image

  1. 设置密码

image

  1. 保存 & 应用

image

5.2 为「WIFI」 设置密码

  1. 进入管理页

image

  1. 找到对应 WIFI 点击修改

image

  1. 修改 WIFI 名称

image

  1. 设置密码

image

  1. 保存 & 应用

image

六、这里漏了一部分

这里少了魔法部分, 因无法过审所以....

完整内容可查阅 《树莓派 4B 软路由实现》

七、参考

Group 3143