引言
树莓派做路由器已经是在3代的时候就开始了,只不过树莓派3代的网口速率还不到千兆标准,再加上A53的性能也不是很赞。但是,性能还是碾压一般家用路由器的;现在4代升级了千兆网口,加上双A72大核性能拉满,与入门级x86软路由相比,关键功耗体积财力投入都要小很多 : ),全方面看上还是有一战之力的,实测不接大型用电设备满载不会超过12W,其次就是需要外接一个usb千兆网卡,实测网速可以几乎跑满千兆的情况下CPU占用率不到35%,因为是外接usb网卡所以很吃CPU的资源。
其次,我相信很多玩软路由的老铁们,肯定还很关心一个参数 AES指令集→不支持,我在后续的实测中发现树莓派做软路由最吃硬件性能的就属AES加解密,跑跑主流的V贰锐,酸酸乳,百兆的服务器也可以轻轻松松应对,如果平时经常大流量跑建议还是上个小风扇,保证高性能的同时CPU核心不会降频拉跨,真的可以说RaspberryPi YES!。


折腾建议:
- 树莓派最好是2G及以下版本(太大性能浪费);
- 都1202年了千兆USB网卡是标配,型号市面常见的RTL(螃蟹网卡)都可;
- 一张内存不那么大的SD卡足以(1-2G足够了,关键你能买到就行);
- 有块闲着不用的树莓派,如果有想折腾软路由Pi但是还没入手那就考虑友善的NanoPi R4S性能和树莓派4不相上下,重点: 有原生双网口,不用外接USB网卡 性能也更好;
- 树莓派4已经作为我的主路由静静呆在角落里运行快一年了,可靠性没得说;
- 其次有软路由的需求又不想折腾x86的;
- 其实做旁路由更为合适(这里留个坑,下一期补);
- 最后以上没有恰饭内容,可放心食用:)

软路由Pi的逼格之处
- 功耗低,体积小相对于x86动辄20W起步树莓派平时就7W左右,怼个充电宝都可以跑起来;
- 科学上网(帕斯握,酸酸乳Plus),广告过滤(AdGuardHome),行为管理,DNS优化,网络加速,内网穿透Frp~~~,KMS微软全家桶激活服务器等等;
- 宽带多播(单线多拨,多线多拨)和链路聚合,有多个宽带账户的可以将带宽进行多拨合并使用,家里带宽已经超500M了(白嫖移动那啥~ ~ ~)手动狗头,还有解决各种限速,以我多年和学校信息管理中心斗智斗勇的经验来看,即使在公司里,限速~ 嗨呀~不存在的~~~
- 可挂载硬盘做个轻量型NAS;
- 其他的话装个Docker尽管折腾;
- 还有好多就不一一列举了.

上面可能壁画太多,正片开始
准备OpenWrt固件
一. 自行编译(逐渐开始对新手不友好 :( 想白嫖 👉 可跳过看第二部分)
开始编译属于自己固件之前需要准备Ubuntu 18 LTS x64系统或者Ubuntu 20 LTS都可以,可以在VMware中装Ubuntu,也可使用微软子系统,我们就用微软的子系统简单粗暴
(已经有虚拟机系统环境的空降到第2部);
1.系统准备(微软子系统)
首先在开始菜单搜索找到打开 控制面板 👉 程序 👉 启用或关闭Windows功能 👉 适用于Linux...

- 等待系统处理完成 然后重启电脑

- 重启以后在开始菜单搜索找到微软商店(MicrosoftStore)打开,搜索Ubuntu

- 然后任选其一下载安装系统 (演示中我们选Ubuntu 20.04 LTS,注意:系统将会装在你的C盘中,如果空间已不足10G请自行清理,实在不行就用Vmware装虚拟机吧)

- 选择目标系统后点击 安装(系统会自动开始下载并安装),安装好以后点击 启动,后期使用可在开始菜单查找,下图为第一次启动稍等一会儿系统初始化即可

- 创建一个新用户,为了方便我就用 openwrt 然后回车确认(切记:用户名不能为root)

- 然后开始设置该用户名的密码 (一定要记住!) 不会显示输入的密码输入完成回车确认即可

- 不出意外就能设置成功并自动登录系统

2.openwrt源码下载与环境准备
在openwrt源码上我比较推荐Lean大神的源码,源码社区很活跃,更新迅速,稳定;我们打开lean大openwrt的代码仓库地址:https://github.com/coolsnowwolf/lede 按照如下命令依次在Ubuntu中逐步执行即可;

- 下面一步一步执行(把命令复制粘贴过去即可)
#执行系统更新
#如果提示输入密码 则键入刚才创建用户的密码即可
sudo apt-get update
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 python3-setuptools
👇
- 第二次在执行上面代码提示以下信息即所有依赖安装成功

- 代码下载(以下步骤 不要用 root 用户执行!)

3.openwrt系统配置
若没有出现error字样的报错即可输入make menuconfig开始配置路由系统
#配置菜单 (执行以下代码后会进入配置菜单)
make menuconfig

键盘操作提示
- 按空格为设置该项/选中 当目标选项为( ※ )即为选中状态;
- 回车为进入子菜单/选择;
- 方向键 ↓ 和 ↑ 为上下选择;
- 方向键 ← 和 → 下方菜单选项;
- 双击两下ESC为退回上一层;
- 在根菜单下双击为推出配置菜单;
开始配置系统
勾选树莓派 三个重要参数 ↓ (上下键选择 回车进入 空格选择目标)**
- Target System ---> Broadcom BCM27xx
- Subtarget ---> BCM2711 boards (64 bit)
- Target Profile ---> Raspberry Pi 4B (64bit)

文件系统大小修改
(根据SD卡大小设置就行,kernel大小一般256足够了)

添加USB设备驱动支持
- 例如USB网卡,USB集线器,USB无线网络等,USB支持目录选项建议全选,方便,不会导致编译失败

插件app页面
原版已经继承了很多实用的app

常用的插件 👇
- luci-app-adbyby-plus 广告过滤插件 (暂不支持Arm x64)
- luci-app-docker 容器
- luci-app-frpc 内网穿透客户端
- luci-app-nps 内网穿透插件
- luci-app-kodexplorer 可道云
- luci-app-n2n\_v2 点对点内网穿透
- luci-app-ddns 动态域名解析
- luci-app-mwan3helper 分流助手(多运营商网络)
- luci-app-netdata 网络监控插件
- luci-app-samba SMB网络共享
- luci-app-syncdial 多拨插件
- luci-app-unblockmusic
- luci-app-ttyd 网页终端插件
- luci-app-usb-printer 打印机插件
- luci-app-vlmcsd KMS激活微软全家通
- luci-app-wol 网络唤醒
- luci-app-ssr-plus 科学上网插件
神秘代码
附开启科学上网插件
#在lede目录下执行 也可打开feeds.conf.default文件将helloworld前面的#删除即可
echo 'src-git helloworld https://github.com/fw876/helloworld'>>./feeds.conf.default
#执行包更新
./scripts/feeds update -a && ./scripts/feeds install -a
#再次打开配置菜单LUCI-> Application中勾选即可
make menuconfig
- 其他插件可以下载到 lede/package 文件夹下再打开make menuconfig配置菜单即可找到
web主题
建议全选 还有很多漂亮的主题自行查阅下载

其他设置就不做举例了,到这一步也就可以配置出一个功能基本齐全的路由系统了,如果觉得这样很麻烦可使用我写的一个简单脚本 一键环境下载安装,源码拉取,常用app集成,自动编译(单线程、多线程编译),后期使用一键更新openwrt源码和插件app(只需配置好系统),很省心,脚本已经放在github 需要的自取 地址: https://github.com/bigbugcc/Openwrt 后期还会做一期非常详细的openwrt使用教程,以及已经在开发的openwrt云编译系统{ 在网页端配置选项,一键编译,邮箱发送固件 } 后期会考虑开源。
4.openwrt编译
首次编译最好使用《单线程编译》,以免报错;小技巧:首次编译时先不要选任何插件,只选择重要的参数,然后直接编译,第二次在选择其他的组件、插件然后多线程编译 速度会快不少也不会因为多线程编译报错。(首次编译大概会耗时2-3小时,具体耗时还得看U的性能)
#下载dll库(国内请尽量全局科学上网)
make -j8 download V=s
#编译固件(单线程编译)
make -j1 V=s
#编译固件(多线程 火力全开)
make -j$(($(nproc) + 1)) V=s
dll库下载

- dll库下载完成

开始编译


报错
环境变量报错

- 编译环境变量错误切换系统环境变量即可(目前这个错误只会出现在WSL上,虚拟机不会)
#切换系统环境变量 再执行编译命令
source /etc/environment
#编译命令
make -j1 V=s
编译成功

编译好的有四个固件

- 重新配置(如果因为配置错误导致无法编译可清除配置后再试)
#清除所有配置
rm -rf ./tmp && rm -rf .config
编译好的固件输出的路径 :/lede/bin/targets
使用复制命令将固件复制到桌面,也可以直接打开子系统的文件目录(可能会有权限问题)
#查看磁盘挂载情况
df -h
#可以复制到任何一个目录(例如:D盘为 /mnt/d/ )
cp -ri lede/bin/targets/bcm27xx/bcm2711/ /mnt/d/
导出固件
以下采用命令复制出来,也可在windows下文件管理器直接打开子系统Ubuntu的目录复制

复制到windows的固件

固件格式说明
- ext4 和 squashfs 是指文件系统格式,ext4格式较为新;
- factory 新刷固件到sd卡用这个(sd卡刷固件时请选择带factory的固件);
- sysupgrade 用于升级固件;
到这固件编译就结束了,接下来就是将固件刷入SD卡再插入树莓派启动就可以启动openwrt了,固件刷入就不再唠叨了( >偷.懒<)请参考该文章的第二部分👇 (已附工具下载地址),刷入固件时就选刚刚复制出来的四个固件中带factory字样的固件中的一个。

二. 啥?你想白嫖 ! (编译好固件可跳过)
从零开始编译Openwrt固件可能真的有点困难所以我给萌新们准备了Plan B,也有想直接白嫖的,编译固件当中也有不少坑,所以我推荐一个网上大佬编译好的可以直接拿来用;
打开链接 : https://github.com/bigbugcc/OpenWrts 找到以下列表,该固件是用Lean大开源的Openwrt云编译的固件,安全性大家可以放心毕竟开源了。

列表中我们推荐使用Lean大的固件稳定可靠,包括自己编译使用的固件也是Lean大神的,路由器开机一直使用半年多也就出现一次故障,重启以后就解决了。下面的固件列表中选择Lean树莓派4B固件。

以下是最新编译好的
https://github.com/bigbugcc/OpenWrts/releases

在以上的固件列表中选择一个带factory字样的固件即可,系统刷入同样可以参考这篇文章的第二部分

三. 系统设置/优化
在给SD卡输入系统后,先将usb网卡接好在给树莓派通电,随后耐心等待树莓派启动,在此期间树莓派的绿灯会快速闪烁,最后将网线接入树莓派板载网口(LAN),另一端接入电脑,打开网络适配器如果已经有IPv4地址192.168.1.1说明系统已经成功启动。

接下来就是在浏览器登录路由器后台
- 地址:192.168.1.1
- 用户名:root
- 密码:password

登录后首页概况

WAN口设置
系统还未添加WAN口,路由器后台打开 网络 👉 接口 👉 添加接口

选择USB网卡,一般情况就是 eth1

网口防火墙设置

设置完成

无线设置
打开 网络 👉无线 👉修改

设置无线WIFI名

设置WIFI密码(频宽不要动会导致WIFI无法使用)

插件页

其他项就不做一一展示了,一时半会儿还真介绍不完,请看后面的Openwrt文章会做非常详细的教学,以上步骤做完就能亲手打造一款软路由。创作不易,希望帮助到各位大帅x的同时能给个三连支持一下!有问题请留言,我尽量会第一时间回复解决问题。
附一张已在家服役快一年的树莓派4主路由图 ( 使用情况:无线设备由红米AX6和小米R3G做AP模式负责 ,三台电脑+七个手机+几个平板+两台电视 ),带宽为500Mbps(单线多拨200m+300m)网络中重度使用主要刷视频看直播还有打游戏,稳如老狗。
家用主路由
