树莓派4B安装OpenWrt旁路由并设置相关软件(保姆式教程)
闲置一个树莓派4B,正好之前的N1退休了,于是在给树莓派4B装上了OpenWrt,作为旁路由替代N1的工作。
具体流程包括:
- OpenWRT系统安装
1.1 下载定制版系统
1.2 刷写镜像 - 旁路由设置
- 系统基础设置
3.1 更新与安装必要软件包
3.2 更换语言为中文 - 分区扩容
- 应用软件的设置
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版本。
点击“自定义”功能,然后点击右下角的“齿轮”,就会出现如图中第三步所示的内容。将wlan_name
和wlan_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即可。
如果不使用IPv6,要在“接口>lan>DHCP服务器>IPv6设置”中,将“RA服务”和“DHCPv6服务”都修改为禁用。同时,在
“接口>DHCP/DNS>过滤器”中,勾选“过滤 IPv6 AAAA 记录”。
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/introot
umount /tmp/extroot
依次执行完成后,使用reboot
命令重启系统。上述操作就可以将系统全部迁移到刚才没有被使用的空间了。
5. 应用软件的设置
5.1 新增软件源
非常不推荐kiddin9的更新源,一堆bug,比如cannot find dependency kmod-nft-fullcone for firewall4
这种。
更新软件源信息
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规则”中,新建一个,设置如下:
IPv6设置
在网络>>DHCP/DNS>>过滤器
中,选择过滤IPv6 AAAA记录
,旁路由将只会返回IPv4地址,从而避免使用IPv6连接的问题,但依旧可以直接连接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