闲置一个树莓派4B,正好之前的N1退休了,于是在给树莓派4B装上了OpenWrt,作为旁路由替代N1的工作。
具体流程包括:

  1. OpenWRT系统安装
    1.1 下载定制版系统
    1.2 刷写镜像
  2. 旁路由设置
  3. 系统基础设置
    3.1 更新与安装必要软件包
    3.2 更换语言为中文
  4. 分区扩容
  5. 应用软件的设置
    5.1 新增软件源
    5.2 dnsmasq和软件配置

1. OpenWRT系统安装

1.1 下载定制版系统

OpenWRT默认版本是没有开启WiFi的,首次连接需要网线。但是官网提供的固件自定义功能,可以直接开启WiFi功能。
点击https://firmware-selector.openwrt.org,输入Raspberry Pi 4B/400/CM4 (64bit),一定要是64位的,不然软件会不兼容,后续性能也会受影响。版本选择最新的稳定版,不要选择snapshot版本。
1.png
step2.jpg

点击“自定义”功能,然后点击右下角的“齿轮”,就会出现如图中第三步所示的内容。将wlan_namewlan_password这两行前面的#号去掉。后面的root_password也相同操作,这是路由器的管理密码,需要自己输入密码,并且删去前面的#号。

点击“请求构建”,后台会构建自定义系统,等工作完成,点击下载factory版本。

1.2 刷写镜像

使用树莓派官方提供的Raspberry Pi Imager将系统写入。教程很多,此处略过。

2. OpenWRT系统安装

使用树莓派的WiFi连接,在OpenWRT的后台中,“网络 > 接口”中选择Lan口进行修改。

  • 传输协议需要修改为静态地址而不是DHCP
  • IP地址填任意一个主路由的内网IP,只要不是冲突的就可以了。比如主路由是192.168.1.1,没有其他设备使用192.168.1.100,那就填写192.168.1.100
  • IPv4子网掩码不需要修改,使用默认的255.255.255.0
  • IPv4网关为主路由IP地址,即上述的192.168.1.1
  • IPv4广播地址不用修改
  • DNS修改为主路由IP地址,即上述的192.168.1.1

完成后,点击“保存并应用”,最好重启一下,然后插上网线,连接到主路由。其他设备使用的时候,将网关和DNS修改为192.168.1.100即可。

3. 系统基础设置

3.1 更新与安装必要软件包

使用SSH进入OpenWRT进行更新而不是网页,网页有时候可能会因为网络波动而报错。
执行以下命令,更新系统并安装必要软件:

opkg update
opkg install cfdisk fdisk block-mount

3.2 更换语言为中文

OpenWRT默认是英文,换成中文需要安装中文包,执行一下命令,然后重启系统“

opkg install luci-i18n-base-zh-cn # 安装中文包
reboot # 重启系统

4. 分区扩容

默认的分区只有100MB左右的空间,无论SD卡多大,都会被浪费。而且100MB的空间,软件一多就不够用了。
SSH中执行:

fdisk -l

将看到类似如下的内容:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *      65536   131071    65536   64M 83 Linux
/dev/mmcblk0p2       196608  1425407  1228800  100M 83 Linux

以上输出还有很多内容,找到SD卡的名字(盘符),比如上述的就是mmcblk0,执行分区和扩容操作:

cfdisk /dev/mmcblk0

找到空间最大的那个分区,一般是最后一个,选中这个分区然后依次执行如下操作:
Free space > New > Primary > Write > 手动输入 yes > Exit (退出)

再次执行fdisk -l程序,将看到新的分区:

Device         Boot   Start      End  Sectors  Size Id Type
/dev/mmcblk0p1 *      65536   131071    65536   64M 83 Linux
/dev/mmcblk0p2       196608  1425407  1228800  100M 83 Linux
/dev/mmcblk0p3      1425408 61067263 59641856 29.3G 83 Linux

对新分区进行格式化:

mkfs.ext4 /dev/mmcblk0p3

在系统的“系统 > 挂载点”里面,先点击“生成配置”,随后在下方的“挂载点”部分,选中刚才的新分区,然后点击新增。
在弹出的页面中,启用此挂载点,UUID就选择刚才的新分区,挂载点选择/,会弹出一堆命令,复制下来。
点击保存并应用。

对复制的命令的第四行进行替换,/dev/sda1要换成/dev/mmcblk0p3,完整命令如下:

mkdir -p /tmp/introot
mkdir -p /tmp/extroot
mount --bind / /tmp/introot
mount /dev/mmcblk0p3 /tmp/extroot
tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf -
umount /tmp/introotumount /tmp/extroot

依次执行完成后,使用reboot命令重启系统。上述操作就可以将系统全部迁移到刚才没有被使用的空间了。

5. 应用软件的设置

5.1 新增软件源

非常不推荐kiddin9的更新源,一堆bug,比如cannot find dependency kmod-nft-fullcone for firewall4这种。
OpenWRT自带的软件源只有基础功能,所以需要使用第三方源,比如https://github.com/kiddin9/openwrt-packages
打开系统 > 软件包,点击“配置opkg”,将opkg配置/etc/opkg.conf中的option check_signature注释掉,如下:

# option check_signature

然后在/etc/opkg/customfeeds.conf中,添加如下第三方源:

src/gz openwrt_kiddin9 https://dl.openwrt.ai/latest/packages/aarch64_cortex-a72/kiddin9

随后更新软件源信息

opkg update

5.2 dnsmasq和软件配置

默认的dnsmasq缺少很多功能,比如ipset相关,导致很多功能无法正常使用。会出现类似“系统未安装iptables或ipset或Dnsmasq没有开启ipset支持”的报错,所以需要卸载掉,并且安装全功能的版本。

opkg remove dnsmasq && opkg install dnsmasq-full

完成后会出现一个dhcp冲突,一般不需要处理。

随后就可以安装需要的第三方软件了,如下命令。luci是指由Lua脚本开发的配置界面(Configuration Interface),所以简称luci。

opkg install luci-app-xxxxx

如果是插件问题,比如“基础依赖 kmod-nft-socket/kmod-nft-tproxy 未安装”,那就直接安装:

opkg install kmod-nft-socket
opkg install kmod-nft-tproxy

部分软件可能会出现IPv4可以代理,但是IPv6不行。最简单的解决方式是开启软件本身的IPv6代理,实在不行,才是自己设置一个IPv6专用的Lan口。

22.03版本的OpenWRT使用nftables替代了iptables,原先用来设置nat的命令iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE在安装完iptables兼容软件之后opkg install iptables-legacy iptables-mod-nat-extra ipset iptables-nft也无法很好的工作。可以在“防火墙 > NAT规则”中,新建一个,设置如下:

nat.png

IPv6设置

dnsmasq默认IPv6优先,有些域名不想使用IPv6,只需要在/etc/dnsmasq.conf末尾添加以下格式的内容:

server=/example.com/#
address=/example.com/::

然后使用/etc/init.d/dnsmasq restart命令重启,之后将只解析这个域名的IPv4地址。

参考如下:
https://www.right.com.cn/forum/thread-8254070-1-1.html
https://www.right.com.cn/forum/thread-4181997-1-1.html
https://doc.embedfire.com/openwrt/user_manal/zh/latest/User_Manual/openwrt/storage.html
https://doc.embedfire.com/openwrt/user_manal/zh/latest/User_Manual/openwrt/opkg.html

标签: openwrt, 树莓派

添加新评论