不知道是不是全国的大学都一样,在宿舍内用4G网络真的是卡的不得了。这我哪能接受啊?开学没过几天就京东下单了一个TP-Link的路由器,还好学校没啥限制,提供的网线可以直接插WAN口上用。但是没过几天,wifi就开始炸了,而且只要连接的人一多,那根本别想用。起初以为是路由器质量问题,换了一次货(在这里表扬京东,退换货太舒服了),没过几天又出现一样的情况,我实在是对它没辙了:(
正当我准备认命的时候,突然了解到了软路由这个玩意儿。我们平时用的路由器都算是硬路由,里面的硬件和软件都由提供;而软路由本质上就是一台电脑,硬件软件都可以你自己设计,有很强的扩展性和可玩性。而我手上刚好有一个实验室提供的树莓派4B,折腾了好几周,这期间还自己掏腰包买了个树莓派3B,觉着这是一件值得记录的事情,打算写点东西供自己或者他人可以参考。

一、准备OpenWrt固件

1. 自己编译(有点麻烦,不想折腾的可以看第二部分)

在开始编译之前,我们需要准备一个Ubuntu环境,版本建议选择18 LTS。配置环境可以使用VirtualBox虚拟机,也可以用云服务器(推荐)。这里多说两句,为啥不用VMware?因为这个软件装上Ubuntu会莫名其妙黑屏,网上的解决方法我都试过了也不行,而且VirtualBox是开源的,免费。然后云服务器我用的是阿里云的学生机,做10道题可以免费用两个月。因为编译过程会自动下载Packegs并且产生很多文件,配置的Ubuntu系统建议留下至少30GB空间。关于怎么安装Ubuntu我在这里就不在赘述了,网上教程已经很多了。

在安装好Ubuntu后,我们需要下载OpenWrt源码。在这里推荐Lean的源码,更新迅速并且很稳定。在源码仓库的Readme.md中已经有详细的使用教程,我们只需要一步一步走下去就行。(接下来的全部编译步骤建议在全局科学上网下进行,不然容易出现TIMEOUT)

在开始编译之前,需要创建一个非root用户。在Ubuntu的桌面环境下创建新用户非常简单,根据图示操作即可。

创建好用户后,点击上二图注销按钮,切换到你创建的用户,再进行下面的操作。

sudo apt-get update

接下来安装编译过程中需要的各种依赖包
sudo apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget curl swig rsync

安装完建议再执行一次命令,显示如下图所示则安装成功。

然后使用git clone https://github.com/coolsnowwolf/lede命令下载好源代码,然后cd lede 进入目录。

在lede文件夹下,执行./scripts/feeds update -a && ./scripts/feeds install -a

上述操作执行完毕后,输入make menuconfig即可进入配置界面。

在配置界面中,上下方向键可以移动光标,左右方向键可以移动底部栏光标。回车进入所选内容,两次ESC返回上一级。

这次我们选择用树莓派3B来做软路由,所以前三项我们选择如下:

如果是树莓派4B,则将第二项的芯片修改为BCM2711即可。

然后进入Target Images,在这里修改固件分区大小。太小了会导致在编译过程中出现错误,修改为下图大小即可。

回到主菜单,进入Kernel modules -> USB Support,在这里我们添加USB设备驱动支持(大容量存储(即U盘)、USB网卡等等)。建议全部选择(注意要变成星号才是要编译进固件,按S可以快捷选中),但是不要勾选kmod-usb-serial这一项,这个驱动的源码好像有问题,勾选了之后编译会不通过。

现在我们对OpenWrt固件的基本配置已经完成,接下来就可以去选择要安装的各种插件。但是在这之前,建议大家先进行一次单线程编译,看看有没有报错。没有报错编译完成后再重新进入配置界面选择需要的插件,然后再开启多线程编译,速度会快很多。

左右移动底部栏光标到 Save 处,回车进入保存页面,直接保存为.config即可。(我自己折腾的时候还改了名字,编译过程中就一直找不到这个配置文件,因为编译默认读取的是.config这个名字)保存后移动到Exit回车退出。

回到终端,执行命令make -j8 download V=s来下载dll库(国内请尽量全局科学上网)。

然后执行make -j1 V=s进行单线程编译。

这个过程要执行两三个小时,编译完成后,在/lede/bin/targets路径下会有编译好的四个固件。关于这四个固件的区别可以参考这篇文章。

接下来我们再通过终端进入lede的根目录cd lede然后make menuconfig,配置插件。我们可以看到已经内置了许多的插件供我们选择:

如果列表里没有想要选择的插件,可以将插件下载到lede/package中再打开配置界面选择。接下来推荐几个比较实用的一些插件:

#科学上网插件
git clone --depth=1 -b master https://github.com/vernesong/OpenClash
git clone --depth=1 https://github.com/xiaorouji/openwrt-passwall
//我自己用的是passwall#校园网认证插件
git clone --depth=1 https://github.com/BoringCat/luci-app-mentohust
git clone --depth=1 https://github.com/KyleRicardo/MentoHUST-OpenWrt-ipk#广告过滤插件
git clone https://github.com/rufengsuixing/luci-app-adguardhome#应用过滤
git clone https://github.com/destan19/OpenAppFilter

下面推荐常用的几个插件:

  • luci-app-adguardhome 功能强大的全网络广告和跟踪程序拦截DNS服务器
  • luci-app-access-control 上网时间控制
  • luci-app-docker 容器
  • luci-app-frpc 内网穿透客户端
  • luci-app-nps 内网穿透插件
  • luci-app-kodexplorer 可道云
  • luci-app-ddns 动态域名解析
  • luci-app-netdata 网络监控插件
  • luci-app-samba 网络共享文件夹(小NAS)
  • luci-app-unblockmusic 解锁网易云灰色歌曲
  • luci-app-ttyd 网页终端插件
  • luci-app-wol 网络唤醒
  • luci-app-jd-dailybonus 京东签到服务

选择好插件之后,我们在LuCI -> Themes看一下OpenWrt管理界面的主题,自带4个,建议全选慢慢挑。

配置界面的东西实在是太多了,其他的选项大家可以自己慢慢研究,根据自己的需求编译一个属于自己的OpenWrt固件。

接下来退出配置界面,这次我们使用多线程编译make -j$(($(nproc) + 1)) V=s,速度会快很多,但是如果你的网络不是很好。在下载插件包的过程中可能会报错,所以还是强烈建议大家在科学上网环境下进行编译。

这次编译完毕后,固件还是在/lede/bin/targets路径下,至于怎么把该路径下的文件移到我们电脑的文件夹中,云服务器建议使用FileZilla,虚拟机建议使用共享文件夹。具体做法这里不赘述。

至此,OpenWrt的编译过程结束。

2. 使用别人编译好的固件

自己编译固件的过程确实很乏味,操作难度也挺高,对Linux和科学上网不太了解的人进行实操可能会消耗很多时间,所以大家可以下载别人编译好的固件,直接刷入即可。这里推荐SuLingGG编译好的固件。
先说大神编译的固件:打开SuLingGG的OpenWrt-Rpi仓库,找到设备支持情况这一栏,点击你要安装OpenWrt固件的设备那一栏的下载页选项。

这些都是编译好的固件供大家下载,这些固件的区别可以看这篇文章的文件格式区别一栏。一般选择ext4-factory那一个。点击文件名即可下载。

二、将固件刷入SD卡

这部分内容和树莓派刷入其他系统的操作是完全一致的。
将下载好的固件解压,得到IMG格式的文件。然后将SD卡进行格式化,格式化工具用 DiskGenius 或者 SD Card Formatter 都可以(也许系统自带的格式化也能用但是我没试过)。格式化后使用 Win32DiskImager 刷入固件。将烧录好的SD卡插到树莓派上,通电开机。

三、网络配置

在树莓派绿灯频繁闪烁完毕后,用网线将树莓派和电脑连接起来,如果提示有网络接入即系统启动成功。在这之前最好断开其他所有的网络连接防止后台IP冲突。

在浏览器中输入192.168.1.1进入路由器后台,默认用户名是root,密码是password

路由器概况

接下来点击网络 -> 接口 -> 添加新接口。图片会和新安装的有出入是因为我这个是配置好的,大家只要按照图中标识进行操作即可。

新接口名称我们写 wan ,接口协议选择 DHCP客户端

点击提交后,选择防火墙设置,配置为 wan 区域,点击保存(注意不是保存&应用!)

然后我们设置无线网络。点击网络 -> 无线 -> 修改。

注意设备配置界面,如果你不熟悉不建议更改。

最后点击右下角的保存&应用,把之前你接在路由器WAN口上的线接到树莓派上,按照你刚刚设置的wifi名字和密码连接wifi就可以上网冲浪了。

关于OpenWrt的配置就说明到这里,其他的东西在上述配置完毕后可以自行探索,你会发现OpenWrt给你打开了新世界的大门。

四、补充说明

1. 旁路由的设置?

参考这篇文章即可。

2. 树莓派只有一个以太网接口,想使用网线直连上网怎么办?

使用USB - 以太网转换器。可以参考这篇文章。然后进入OpenWrt管理界面,点击网络 -> 接口 -> 修改LAN接口 -> 物理设置。新接入的网卡应该是eth1,不确定的可以在接入转换器后到状态 -> 内核日志最下方查看。

这里物理配置的意思就是把LAN接口应用到对应的接口上。比如说我勾选了无线网络使用LAN接口,无线网络的数据就通过LAN口收发;同理如果是勾选了eth1接口,那么我的USB网卡转换器就相当于接到了LAN口上,通过LAN口收发数据。

3. 要定时关机吗?

可以考虑。看固件的稳定性。


Reference:

  1. 树莓派4B 亲手打造一款Openwrt软路由(带编译固件-超详细) - RaspberryPi硬核系列(三)
  2. 美丽应用OpenWrt分类
  3. Lean’s OpenWrt source
  4. Raspberry Pi & NanoPi R2S/R4S & G-Dock & x86 OpenWrt Compile Project.

树莓派3B/4B从零开始编译安装并刷入OpenWrt,让空闲的树莓派变成路由器相关推荐

  1. 树莓派3B用Ubuntu MATE安装ros

    [组件] 树莓派操作系统:Ubuntu MATE 16.04 LTS ROS 版本:ROS Kinetic Kame 工作机操作系统: Windows 10 [系统安装] 1.下载 Ubuntu MA ...

  2. 玩客云刷入openwrt系统

    玩客云刷入openwrt系统 0.前言 一.刷入引导 二.编译 OpenWRT 三.系统烧录及设置 0.前言   最近因为一些原因,想到了做一个 openwrt,转了一圈海鲜市场,发现就这个玩客云比较 ...

  3. 小米路由器4A千兆版刷入OpenWrt教程

    路由器版本信息 主机型号:Xiaomi Mi Router 3G v2 OpenWrt信息 Architecture:MediaTek MT7621 ver:1 eco:3 x 4 固件版本:open ...

  4. N1盒子刷入openwrt并部署青龙面板

    由于前几天在不清楚F大固件挂载点信息的情况下手贱改动了挂载点,导致无法进入Luci界面.其实之前烧录固件的u盘还在而且能用,插入N1即可进入u盘系统,不过由于版本久远且功能不全,在线更新固件也屡屡失败 ...

  5. 红米AC3000、小米cr8806、8808、8809成功刷入openwrt

    在二手平台购入电信定制的小米路由cr8806,官方固件的管理界面太不好用了,试着在网上看能不能找到第三方固件,功夫不负有心人终于找到了openwrt.下面是我刷入openwrt的过程. 刷机有风险,请 ...

  6. 蚂蚁帮路由器Antbang A3s V2.0刷入OpenWrt/LEDE

    参考资料 路由器基本常识_冰色阳光的博客-CSDN博客_路由器bootloader是什么 https://www.right.com.cn/forum/thread-3191610-1-1.html ...

  7. TPLink-941N-v6路由器刷机教程(刷入openwrt 与不死breed )

    前言 为了刷入openwrt固件,我们可以使用以下这种方法,此方法不需要拆机,接下来我将详细讲解刷机步骤.本教程使用TP-Link941N v6路由器演示,请根据自己的路由器版本查找好对应的固件,本教 ...

  8. 小米路由4A千兆版刷入Openwrt/潘多拉

    准备工作 工具:笔记本,网线一根 软件:Putty, MobaXterm, R3GV2 patches, WebServer 环境:python环境 所有的软件下方打包下载 开启Telent功能 将路 ...

  9. NewWifi2 D1 新路由2刷入Openwrt

    我拿到的是一个好朋友给我的一个路由器,他已经刷好了breed web,所以我在这个基础上刷入openwrt 1.你需要拿根针抵住后面的reset按键 电脑通过网线连到路由器的lan口(不是接网线的口) ...

最新文章

  1. modprobe和insmod区别
  2. 新一代开源Android渠道包生成工具Walle
  3. Mysql 8主从复制配置图解
  4. linux重新做yum,Linux 系统 Centos 7.7 下重装yum
  5. IOS ActivityIndicator 活动指示器使用
  6. java输入框1-100_Java开发笔记(一百三十九)JavaFX的输入框
  7. 概率论与数理统计 习题篇
  8. (九)C#之WinForm程序设计-升级版文本编辑器
  9. 一个双向转换火星文的玩具
  10. 数据中台初探与应用实践,28页ppt详解
  11. linux硬件信息在哪个目录下,Linux 查看系统硬件信息
  12. OGRE+CG学习日记[1]-简单的3D程序
  13. PHP扩展undefined symbol,解决 undefined symbol: php_pdo_register_driver in Unknown on line 0
  14. MacDroid for Mac(安卓手机文件传输助手)
  15. for迭代求折纸超过珠峰高度
  16. 国内首个ChatGPT镜像系统?辅助写代码真方便
  17. 可商用字体在哪里找?2022可商用字体汇总
  18. 三星p1000升级android10,三星P1000可以升级到安卓4.0吗?
  19. 瑞云服务云携手拓攻机器人,智胜客户体验时代
  20. pytorch加载预训练模型遇到的问题:KeyError: ‘bn1.num_batches_tracked‘

热门文章

  1. 电动汽车(EV)充电系统全球认证 - 主要测试标准清单及下载
  2. Windows CE嵌入式系统程序开发
  3. 北邮自考JAVA实践考试
  4. 读书笔记:《经验的疆界》
  5. 模拟IC芯片设计开发的流程
  6. public class 和class 的区别
  7. 关于程序员工作 交接的一些注意事项
  8. flink sql报错:Bang equal ‘!=‘ is not allowed under the current SQL conformance level
  9. CRM销售系统价格 一套CRM销售系统多少钱
  10. 【pytorch】过拟合的应对办法 —— 丢弃法(dropout)