在树莓派上安装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. For developers, OpenWrt is the framework to build an application without having to build a complete firmware around it; for users this means the ability for full customization, to use the device in ways never envisioned.

OpenWrt 与 LEDE 项目还有一段相爱相杀的历史。

  • 2016 年 5 月,由于原 OpenWrt 开发者社区已经长时间没有关键性更新以及对新设备的支持,而关于这些的讨论也迟迟未有结果,导致一群 OpenWrt 核心贡献者感到不满,另外成立了 LEDE 项目。该项目源码基本继承自 OpenWrt,但采取了更有效的开发讨论规定和决议流程。
  • 2017 年 6 月,LEDE 社区和 OpwnWrt 社区均同意将原 OpenWrt 项目合并至 LEDE 项目。新项目使用 Openwrt 的名称,但沿用 LEDE 社区的版规和流程规定。
  • 2018 年 1 月,所有源代码合并完成。
  • 2018 年 7 月 31 日,发布合并之后的第一个稳定版本 OpenWrt 18.06。

OpenWrt 的优势主要有:

  • 可扩展性 不仅支持多种设备,还提供了许多仅在高端设备中可用的功能;
  • 安全性 OpenWrt 的标准安装是安全的——禁用 Wi-Fi、没有弱密码或后门,另外官方会及时修复漏洞;
  • 性能和稳定性 标准模块化,经过充分的测试和错误修复后发布。
  • 强大的社区支持
  • 研究 许多团队使用 OpenWrt 作为他们研究网络性能的平台,成功实验的改进将首先在 OpenWrt 中提供;
  • 开源免费

安装 OpenWrt

根据自己的硬件在 官网支持设备列表 中选择合适的镜像下载,目前树莓派受支持的型号有 A、B、B+、2B、3B、3B+ 和 Zero W。

下载完成后将镜像刷到 SD 卡中,将树莓派通过以太网接口连接到电脑或路由器(默认情况下 Wi-Fi 是关闭的),接通电源。树莓派直连电脑时 IP 地址为 192.168.1.1。

有两种方式可以访问树莓派:

  • 通过浏览器访问 OpenWrt 自带的 luci Web 管理界面;
  • 通过 SSH 登录树莓派,root 用户,默认为空密码;

注意 登录 luci 的账号密码和 SSH 的账号密码其实是同一套。

基本设置

更新软件列表

opkg update

安装 luci 中文界面

opkg install luci-i18n-base-zh-cn

在 luci 中:

  • 设置主机密码(root 用户密码);
  • 添加 SSH 访问公钥;
  • 设置时区,修改时间;

安装网络设备驱动

USB 有线网卡(RTL8152)

这是一款 TPLINK 的 USB 转 RJ45 有线网卡,使用芯片 RTL8152。安装驱动:

opkg install kmod-usb-net-rtl8152

USB 无线网卡(RT5370)

我的无线网卡型号为 Tenda W311MI,使用 RT5370 芯片,OpenWrt 默认没有安装该无线网卡的驱动。

安装 lsusb 命令:

opkg update
opkg install usbutils

安装驱动组件

opkg install kmod-rt2800-lib
opkg install kmod-rt2800-usb
opkg install kmod-rt2x00-lib
opkg install kmod-rt2x00-usb

重新配置 Wi-Fi,会在 luci 的网络菜单中出现“无线”选项

wifi config

如果没有生效,尝试重启 OpenWrt。

Tenda W311MI 能够同时工作在 AP 模式 和 Client 模式,可以用作无线中继。

Android USB 网络共享(RNDIS)

安卓手机的 USB 网络共享功能使用 RNDIS 协议(Remote Network Driver Interface Specification,远程网络驱动程序接口规范)。该协议为微软公司专有协议,OpenWrt 默认情况下不支持该协议。

安装驱动

opkg update
opkg install kmod-usb-net-rndis usb-modeswitch

离线安装时需要下载的包有(包括上述包的依赖包):

kmod-mii
kmod-usb-net-cdc-ether
kmod-usb-net-rndis
kmod-usb-net
libusb-1.0
usb-modeswitch

Shadowsocks 透明代理

这里我们使用 Shadowsocks + ChinaDNS + DNS-Forwarder 的方案。

  • Shadowsocks 实现透明代理、socks5 代理和端口转发等功能;
  • ChinaDNS 解析国内域名时自动查询本地 DNS 服务器,解析国外域名时查询国外DNS服务器,以防止 DNS 投毒,同时它维护的 IP 列表可以实现 Shadowsocks 代理的分流;
  • DNS-Forwarder 使用 TCP 协议转发 DNS 请求,DNS 默认使用 UDP 协议,但 ISP 的 UDP 常常出现不稳定的情况,因此使用 DNS-Forwarder 提高 DNS 转发的稳定性。如果配合了 SS,TCP 查询会自动走 SS 线路,也同时解决了线路优化的问题。

安装

源安装

这里安装我们使用了第三方源 Openwrt-dist

添加公钥

wget http://openwrt-dist.sourceforge.net/openwrt-dist.pub
opkg-key add openwrt-dist.pub

查看 openwrt 路由器 CPU 架构,树莓派 2B 是 arm_cortex-a7_neon-vfpv4

$ opkg print-architecture
arch all 1
arch noarch 1
arch arm_cortex-a7_neon-vfpv4 10

将以下内容添加到 /etc/opkg/customfeeds.conf 文件中。

src/gz openwrt_dist http://openwrt-dist.sourceforge.net/packages/base/{architecture}
src/gz openwrt_dist_luci http://openwrt-dist.sourceforge.net/packages/luci

安装

opkg update
opkg install shadowsocks-libev
opkg install luci-app-shadowsocks
opkg install dns-forwarder
opkg install luci-app-dns-forwarder
opkg install ChinaDNS
opkg install luci-app-chinadns

一键安装脚本

一键安装脚本会额外安装 ShadowVPN。

wget http://openwrt-dist.sourceforge.net/auto_install.sh
chmod +x auto_install.sh
./auto_install.sh

配置

为了方便,我们在 LUCI 界面进行配置,首先刷新页面。

配置 Shadowsocks

进入[服务]-[影梭]菜单:

  1. 在[服务器管理]菜单,添加 Shadowsocks 服务器信息;
  2. 在[访问控制]菜单,“外网区域-被忽略IP列表” 选择 “ChinaDNS 路由表”;
  3. 在[基本设置]菜单,“全局设置-自启动延时” 选择 “5 秒”,透明代理和 SOCKS5 代理的服务器设置为刚刚添加的服务器;

配置 DNS 转发

进入[服务]-[DNS 转发]菜单,勾选 “启用”,设置 “监听端口” 为 5300,“上游 DNS” 为 8.8.8.8

配置 ChinaDNS

进入[服务]-[ChinaDNS]菜单:

  1. 勾选 “启用”,勾选 “启用双向过滤”;
  2. 设置 “本地端口” 为 5353;
  3. 设置上游服务器地址为 114.114.114.114,127.0.0.1:5300

127.0.0.1:5300 即 DNS 转发的监听地址。这样配置后,ChinaDNS 国内域名查询走 114.114.114.114,国外域名查询会经由 DNS 转发走 ss 到 8.8.8.8

配置 DHCP/DNS

进入[网络]-[DHCP/DNS]菜单:

  1. 在[基本设置]菜单,设置 “本地服务器” 为 127.0.0.1#5353,即 ChinaDNS 的服务监听地址;
  2. 在[HOSTS 和解析文件]菜单,勾选 “忽略解析文件”;

Over,保存并重启。

其他设置

定时重启 Wi-Fi

使用过程中发现无线网卡偶尔会出现网络缓慢的情况,重启 Wi-Fi 后就会恢复正常。因此设置一个定时任务,每天凌晨重启 Wi-Fi。

进入[系统]-[计划任务]菜单,添加内容:

0 4 * * * wifi down && sleep 3 && wifi

如果之前定时任务为空,需要手动重启一下 cron 服务:进入[系统]-[启动项],重启 cron。

参考链接

目录