树莓派|基于OpenWrt打造旁路由

只能说摸鱼真的太快乐了,在实验室摸鱼尤其如此 : )

写在前面

放张老图,毕竟用Linux的男人就好一口树莓派(笑。

寒假结束是心血来潮入手了一块树莓派4B,打算用来放自己的个人网站和GitLab服务。最近把博客和GitLab都迁移到了服务器上,于是就想着给这块pi刷个声名远扬的OpenWrt,接到路由器上作为实验室路由器的旁路由。原本只是想给实验室局域网上个全局代理,但是刷完系统后OpenWrt强大的内置服务和功能却给我带来了不少惊喜,所以决定写几个长期更新的文章,记录自己在树莓派上折腾的一些东西。

OpenWrt-树莓派:精妙的系统和恰到好处的硬件

The OpenWrt Project is a Linux operating system targeting embedded devices. Instead of trying to create a single, static firmware, OpenWrt provides a fully writable filesystem with package management. This frees you from the application selection and configuration provided by the vendor and allows you to customize the device through the use of packages to suit any application.

《Welcome to the OpenWrt Project》

本质上来看,OpenWrt是一个专为嵌入式硬件打造的基于Linux的开源系统,其中集成了种种强大的内置服务与应用,而这些内置的服务/插件往往来自于第三方开发者

  • 这种“Ensembling”恰恰是最令我惊喜的地方。开源社区的一大特性就是零散分布:一个项目往往只做一件事。比如Shadowsocks专注于代理,Frp专注于NAT,这两个项目本身不会试图兼并对方的功能,事实上它们的维护者的规模也注定了不可能这么做。用户可以按照需求在本地配置逐个配置,但系统一旦出了问题,恢复之前的开发环境将会是一个令人头疼的问题;再加上各个项目的配置方式、逻辑不尽相同,恢复过程将变得更加繁琐(头已经开始疼了)。
  • 但是OpenWrt所实现的,已经远远超出了一个嵌入式系统或者一个路由软件应有的功能;它还实现了嵌入式硬件上常用服务的集合。在迁移系统/服务时,我只需要重新烧写OpenWrt系统,然后一键加载之前的配置文件皆可 —— Life is short, why not use OpenWrt?

OpenWrt是为嵌入式设备准备的,而其中最著名、最易用的莫过于树莓派。树莓派,想必读者已经很熟悉了,这里就不多作介绍,写点别的。笔者在大一下学期购买了第一块树莓派3B+。当时为了ssh连接到树莓派,折腾过WSL1,折腾过虚拟机,最后一直折腾到双系统安装Ubuntu18.04,某种程度上树莓派就是我的Linux启蒙导师。

  • 当时选修了电子学院方元老师和张志俭老师的《智能应用设计》这门课,在树莓派上 做了很多有意思的事情,其中包括一辆树莓派小车。小车有红外、超声波自主避障、遥控、平衡等多种功能,全部借助Python GPIO编程实现,还是挺有意思的。
  • 寒假结束时买了一块树莓派4B,还是顶配。最初折腾了个本地的Hexo博客服务和GitLab服务,利用内网穿透实现公网访问,不过后来把服务都迁移到正经服务器上了,这块树莓派就暂时闲置下来,直到这篇文章的诞生。

控制台

Step 1: 烧录OpenWrt

  • OpenWrt有诸多发行版本和分支,我选择的是专为Raspberry-pi编译的Lean版本的OpenWrt,项目地址在这里。关于版本的选择,项目里介绍的很清楚,这里不作介绍。
  • 在解压得到img文件后,使用dd命令写入sd卡
    1
    dd if=/path/to/img of=/dev/sda bs=2M conv=fsync
    注意这里of选项一定要选择sd卡的目录,否则很有可能会经历你的第一次删库跑路…
  • 烧写完成后启动树莓派,用笔记本连接树莓派的名为OpenWrt的WiFi,然后在浏览器中输入192.168.1.1,不出意外的话会看到以下界面。用户名为root,密码为password,即可进入OpenWrt系统。

登录页

Step 2: 配置OpenWrt

配置步骤来自于OpenWrt-Rpi文档,可直接参考原文档,在此不作搬运。

Step 3: 配置ShadowSocksR Plus+

因为想给实验室的WiFi加上代理服务,所以这里直接使用了OpenWrt内置的ShadowSocksR Plus+服务作代理。

  • 进入服务 - ShadowSocksR Plus+页面,在服务器节点Tab页中填写SS/SSR订阅地址,更新URL后选择合适的节点应用
  • 在访问控制Tab页中,点击Lan IP访问控制,第一项内网 客户端分流代理控制选择“除列表外主机皆允许”,保存&应用
  • 在不走代理的域名中添加PAC信息

写在后面

这篇文章的技术含量并不高,只是基于OpenWrt配置了一下内网代理,加上简单介绍了一下OpenWrt和树莓派。不过以后可能会写点树莓派其他好玩的东西,就先插个flag吧。