引言
在这个信息化产业遍地开花的时代, 随着家庭宽带速率的不断提升, 现有路由器厂商的解决方案逐渐不再能满足有进阶需求的用户, 软路由解决方案应运而生, 通过软路由我们可以实现很多 定制需求
, 下面我们来简单了解下 硬路由
、软路由
、透明代理
的基本概念:
硬路由: 目前我们家里普遍使用的路由器, 有厂家提供整体的解决方案, 包括处理器、电源供应、嵌入式软件, 提供设定的路由器功能, 比如常用路由器品牌有 TP-Link
、华为
、H3C
等等, 而这些我们平常所接触的路由器就属于 硬
路由
软路由: 由一台 小主机
+ Linux
系统 + 专用的 路由程序
(比如 OpenWrt
)组成, 软路由
其实就是台式机或服务器配合软件形成路由解决方案, 主要靠应用软件的设置, 从而达成路由器的功能, 说白了软路由就是 PC
的硬件加上 路由系统
来 实现路由器
的功能, 相比硬路由可玩性、扩展性就高了很多
透明代理: 设备只要连接上了家里网络(WIFI
), 就可以自动的实现代理, 进行自由而又快乐的冲浪 🏄🏻, 无需任何设置喔😯
刚好手头有个落灰的树莓派, 今天我们的目标就是使用
树莓派
做一个旁路由
, 实现 透明代理
一、编译「OpenWrt」固件
OpenWrt 是一个高度模块化、高度自动化的嵌入式的 Linux
发行版, 它拥有强大的网络组件和扩展性, 常常被用于工控设备、智能家居、路由器等设备中, 同时它还提供了上百个已编译好的软件
OpenWrt 虽然支持很多软件, 但是呢它可能并不完全适合国内环境, 因为国内环境中可能会用到的部分软件、功能, 它是不支持的, 所以呢国内很多大佬就会基于 OpenWrt 加入了很多中国特色的软件、功能并进行开源, 而其中比较火的就数 Lean 了, 下面我们就基于 Lean 来编译我们所需要的 OpenWrt
固件
我的理解:
OpenWrt
固件是啥? 简单来说它是一个镜像、一个Linux
系统, 里面包含我们定制的功能模块, 可帮我们实现定制化路由功能
1.1 Ubuntu 环境搭建
Lean 中推荐编译环境为 Debian 11
或 Ubuntu LTS
, 对于环境搭建方式, 可以选择 虚拟机
或购买 云主机
甚至可以通过 GitHub Actions
来实现, 当然这里我们 另辟蹊径
, 通过 Docker
来搭建编译环境, 如果需要了解 Docker
相关使用可查阅 《Docker 使用指南》 本文所使用到的命令, 基本都讲解到了
补充: 经过测试
Mac M1
下, 使用该方式在第二步
安装依赖包时会报错
, 目前暂时没找到解决办法
- 运行
Ubuntu
镜像
docker run -d -t ubuntu
- 进入
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 ## 进入容器
- 安装
sudo
命令, 后面安装依赖需要用到sudo
apt-get update
apt-get install sudo
- 创建一个普通用户
OpenWrt
被设计为由非root
用户编译, 所以这里我们需要在构建主机中创建一个普通用户, 下面以创建moyuanjun
用户为例
adduser moyuanjun # 创建用户
usermod -G sudo moyuanjun # 为用户设置 sudo 权限
su moyuanjun # 切换用户
cd # 进入当前用户 home 目录
1.2 安装编译依赖
- 更新依赖包
sudo apt update -y
sudo apt full-upgrade -y
- 安装所需要的依赖
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
这一步, 在安装依赖过程中会要求配置时区, 相关配置选择如下:
1.3 下载源代码, 更新 「feeds」 并选择配置
- 下载源代码
git clone https://github.com/coolsnowwolf/lede
cd lede
- 更新并安装
feeds
./scripts/feeds update -a
./scripts/feeds install -a
- 选择配置
make menuconfig
这一步, 执行命令后会弹出 配置列表
, 配置流程如下:
- 选择配置: 只需要配置下图中圈出的那几个, 具体选择如下
- 配置文件名设置: 这里保持默认即可(直接回车)
- 配置写入确认: 弹出确认弹窗, 退出即可(直接回车)
- 退出: 完成配置后会退回到配置选择页, 这里选择
退出
即可
1.4 编译固件
补充说明: 下面命令
-j
后面表示线程数
, 官方建议第一次编译推荐用单线程
(目的是在发生错误时, 能够更好的捕获错误), 但是如果你按照流程走下来, 这里基本已经稳了, 可以设置为多线程, 我这里直接选择使用8
个线程
- 下载
dl
库
make download -j8
- 编译固件
make V=s -j8
1.5 拷贝
- 编译结果: 上文编译后生成的
固件
, 会被保存在当前目录bin/targets/bcm27xx/bcm2711
下
cd bin/targets/bcm27xx/bcm2711 && ls -n
- 查看路径: 使用
pwd
获取编译后镜像存储的目录
- 拷贝: 重开一个终端, 通过
docker cp
命令将编译结果(固件)
拷贝到本地物理机上
# 拷贝 31c7819018b6 容器 /home/moyuanjun/lede/bin/targets/bcm27xx/bcm2711 目录到, 本地当前目录下
docker cp 31c7819018b6:/home/moyuanjun/lede/bin/targets/bcm27xx/bcm2711 .
1.6 自由食用
这里我已将编译后的固件全部上传到 GitHub Releases 上了, 如果有需要可自取
二、烧录系统
上文我们完成 OpenWrt
固件的编译, 下面开始烧录 OpenWrt
2.1 格式化
如果有需要, 我们可以使用 官方工具 先对 SD
卡进行格式化
2.2 烧录系统
如图, 这里我们可以使用 官方工具 进行烧录, 系统呢? 我们就选择 openwrt-bcm27xx-bcm2711-rpi-4-squashfs-factory.img.gz
等待一段时间……, 直到烧录结束
补充: 在实践过程中, 在重新烧录完
相同固件
后, 发现之前的配置信息会被保留, 经过折腾找到的解决办法就是, 先格式化一遍SD
卡 --> 安装其他版本固件 --> 再次格式 --> 然后安装正确的固件
三、登录系统
将 SD
卡插入树莓派, 并启动, 接下来我们就需要访问 OpenWrt
管理后台
3.1 连接「OpenWrt」网络
首先第一步呢, 需要先连接上 OpenWrt
的网络, 这里我们有 两种
方式:
- 方法一: 启动树莓派后, 会有一个默认的名为
OpenWrt
的WIFI
, 直接进行连接(没有密码)
- 方法二: 通过
网线
将树莓派
和我们的电脑
进行连接
即可, 如下图只要两边灯都亮了就说明连接成功
3.2 OpenWrt
连接上网络后, 我们就可以访问 OpenWrt
管理系统了, 默认 OpenWrt
管理系统地址为 192.168.1.1
, 账号密码则为 root/password
四、网络设置
上面我们虽然连接上了
OpenWrt
网络, 但是OpenWrt
并没有连上我们家的网络, 所以现在我们是无法访问网络, 接下来我们需要一步步进行配置, 将OpenWrt
连接上家里的网络
- 进入
OpenWrt
管理后台接口配置
页
- 修改默认
LAN
配置
- 修改
LAN
内容如下, 其中192.168.0.1
是我家里路由器
的地址, 因为我家里移动网络的地址和OpenWrt
默认地址冲突了都是192.168.1.1
, 所以我这里还将OpenWrt
地址调整为192.168.0.222
, 最后的最后记得设置下DNS
地址, 否则可能连不上网络
- 保存 & 应用: 这里会一直处于应用更改中, 这里不用搭理(猜测是因为
OpenWrt
被修改的原因)
- 将
树莓派
和家里路由器
进行连接, 用网线
将树莓派
的 接到路由器的LAN
口即可
-
连接
OpenWrt
的默认WIFI
, 这时候不出意外应该是能够正常访问网络了 -
重新访问
OpenWrt
管理后台, 这里我们需要使用新的IP
进行访问
五、安全设置
为了安全起见, 我们需要先修改下 OpenWrt
管理后台的登录密码, 同时还需要修改下默认 WIFI
的名称以及密码
5.1 登录密码设置
- 进入管理页面: 系统 --> 管理权
- 设置密码
- 保存 & 应用
5.2 为「WIFI」 设置密码
- 进入管理页
- 找到对应
WIFI
点击修改
- 修改
WIFI
名称
- 设置密码
- 保存 & 应用
六、这里漏了一部分
这里少了魔法部分, 因无法过审所以....
完整内容可查阅 《树莓派 4B 软路由实现》
七、参考
大家好, 我是墨渊君, 如果您喜欢我的文章可以:
- 关注公众号: 「昆仑虚F2E」获取最新文章。
- GitHub: github.com/MoYuanJun
- 个人网站(昆仑虚, 虽然现在没啥东西): www.kunlunxu.cc