简介
NanoPi R5S(简称”R5S”)是友善电子团队设计出品的一款双2.5G+千兆三网口的开发板, 它采用瑞芯微RK3568B2作为主控处理器, 配备2GB/4GB LPDDR4x内存,和8GB eMMC闪存,并支持TF卡启动和运行FriendlyWrt等系统。
R5S接口丰富,布局紧凑,主板尺寸只有90x62mm,可选配安装一体化CNC氧化铝外壳。它带有1个HDMI输出接口,可运行Android, Buildroot和Ubuntu桌面等系统,也可以用作极客喜欢的命令行模式;并且可解码播放4K60p H.265/H.264等格式视频。
R5S还带有1个M.2 NVME固态硬盘接口,和2个USB 3.0接口,并支持USB C口PD快充电源供。

提前参照官方说明刷入 FriendlyWRT 固件,默认使用 emmc 的空间(不知为啥我这显示 16G 的存储空间,实际应该是 32G 才对)该固件基于 openwrt 修改调整编译,后面相关的配置操作可以参考 openwrt 的内容。
目标
- 将该设备配置为网关盒子,除路由功能外增加 DNS 解析和 Nginx 代理服务器,新增的配置通过容器实现
- Nginx 使用 nginxWebUI 组件,原计划用 NPM 容器。在 arm 架构下 NPM 容器在解压阶段使用超过了 9G 空间,导致空间不足无法使用。
- DNS 解析通过 pihole 组件实现

配置 pihole 代替默认的 DNS
在 WRT 上禁用 ipv6 的 DHCP
代码块 |
---|
uci -q delete dhcp.lan.dhcpv6
uci -q delete dhcp.lan.ra
uci -q delete network.lan.ipv6
uci commit
/etc/init.d/odhcpd stop
/etc/init.d/odhcpd disable
/etc/init.d/network restart |
配置 macvlan 接口
修改 /etc/config/network 配置文件。其中 lan 接口是系统的默认配置,macvlan 相关的是新增配置
代码块 |
---|
|
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '192.168.2.1'
option netmask '255.255.255.0'
option ip6assign '60'
config interface 'macvlan'
option proto 'static'
option defaultroute '0'
option netmask '255.255.255.255'
option device 'lan.20'
option ipaddr '192.168.2.2'
config device
option type 'macvlan'
option ifname 'br-lan'
option mode 'bridge'
option name 'lan.20'
option acceptlocal '1'
config route
option interface 'macvlan'
option target '192.168.2.3'
option netmask '255.255.255.255'
|

调整防火墙的配置
配置文件是 vi /etc/config/firewall 。增加了 list network 'macvlan' 内容
代码块 |
---|
|
config zone
option name 'lan'
list network 'lan'
list network 'macvlan'
option input 'ACCEPT'
option output 'ACCEPT'
option forward 'ACCEPT' |
重启网络和防火墙
代码块 |
---|
|
/etc/init.d/network restart
/etc/init.d/firewall restart |
pihole.yml
代码块 |
---|
|
services:
pihole:
container_name: pihole
image: pihole
hostname: pihole
environment:
TZ: 'Asia/Shanghai'
WEBPASSWORD: 'Www.lfang123.com'
volumes:
- '/data/pihole/etc-pihole/:/etc/pihole/'
- '/data/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/'
- '/data/pihole/var-log/:/var/log'
cap_add:
- NET_ADMIN
restart: unless-stopped
networks:
internal:
lan:
ipv4_address: 192.168.2.3
networks:
internal:
lan:
name: lan
driver: macvlan
driver_opts:
parent: lan.20
ipam:
config:
- subnet: 192.168.2.0/24 |
代码块 |
---|
|
mkdir -p /data/pihole/etc-pihole/
mkdir -p /data/pihole/etc-dnsmasq.d/
mkdir -p /data/pihole/var-log/
mkdir -p /data/pihole/var-log/lighttpd
chown 33:33 /data/pihole/var-log/lighttpd
docker pull dockerpull.com/pihole/pihole #通过代理方式下载容器
docker compose -f pihole.yml up |
调整配置文件
完成初始启动后,进入 /data/pihole/etc-pihole/ 调整配置文件
代码块 |
---|
cd /data/pihole/etc-pihole
sed -i -e 's/REV_SERVER.*//; s/REV_SERVER_CIDR.*//; s/REV_SERVER_TARGET.*//; s/REV_SERVER_DOMAIN.*//; s/PIHOLE_INTERFACE.*//' setupVars.conf
echo 'REV_SERVER=true
REV_SERVER_CIDR=192.168.2.0/24
REV_SERVER_TARGET=127.0.0.11
REV_SERVER_DOMAIN=lan
PIHOLE_INTERFACE=eth0' >> setupVars.conf
docker compose -f pihole.yml restart |
测试和验证
代码块 |
---|
ping 192.168.2.3
nslookup pihole.lan 192.168.2.3
nslookup openwrt.org 192.168.2.3 |

配置 DNS 和 DHCP 设置
调整内网的 DHCP 设置中的 DNS 项,对于的配置文件 vi /etc/config/dhcp 。在该文件中增加 dhcp_option ,对应的 DNS 服务器是 192.168.2.3
代码块 |
---|
config dhcp 'lan'
option interface 'lan'
option start '100'
option limit '150'
option leasetime '12h'
option dhcpv4 'server'
option ra_slaac '1'
list ra_flags 'managed-config'
list ra_flags 'other-config'
list dhcp_option '6,192.168.2.3' |

解决内网 IP 无法上网故障
原因:macvlan 配置了 192.168.2.2 的 IP 地址,pihole 的容器默认路由使用 192.168.2.1 地址,该地址在容器环境中无法通讯,需要调整默认路由为 192.168.2.2
代码块 |
---|
docker exec -it pihole /bin/bash
ip route
ip route change default via 192.168.2.2 dev eth0 |
nginxWEBui 实现代理访问
openwrt 默认配置 uhttp 实现 web 访问,当然也可以重新编译整合 Nginx 组件。一方面每次升级都需要重新编译一次,另一方面标准的 Nginx 没有图形管理界面,在操作执行上不太方便。通过 nginxWEBui 组件实现 GUI 方式的管理操作新增反向代理的一些操作可以直接通过 web 页面实现。
如果是 X86 的环境推荐使用 NPM 组件,更成熟更方便,但是 NPM 在 arm 架构下空间占用巨大,推测应该是基于标准的 Linux 系统构建的,在 OpenWRT 这样的简化环境中需要加载更多的层和对应的环境资源。
draw.io Diagram |
---|
border | true |
---|
| |
---|
diagramName | R5S-WRT |
---|
simpleViewer | false |
---|
width | |
---|
links | auto |
---|
tbstyle | top |
---|
lbox | true |
---|
diagramWidth | 527 |
---|
revision | 1 |
---|
|

调整 OpenWRT 的 web 页面
最终实现的效果是通过外网的 IP 地址解析到 Nginx 服务实现按不同的域名访问对应的后端网站,因此需要调整 OpenWRT 内网启用的80端口(其实也可以不用调整,为了方便检查和避免误会这里将80端口调整为8001)。配置文件是 vim /etc/config/uhttpd

调整后需要重启 uhttpd 服务
映射外网端口
如果实现外网(这里的外网是相对于 OpenWRT 的 WAN 口来说)按域名访问,先要确保 80 端口能被正常解析。OpenWRT 的端口映射非常简单。完成映射后确保输入外网的 IP + 对应的端口能够正常访问。如果无法正常访问可以通过内网的 PC 访问确定 web 服务是否正常。

配置 NginxWebUI
- 下载对应的镜像文件
- 配置相关的目录用于保存信息
- 启动该镜像
代码块 |
---|
|
docker pull registry.cn-hangzhou.aliyuncs.com/cym19871102/nginxwebui:latest
docker run -itd -v /data/nginxui:/home/nginxWebUI -e BOOT_OPTIONS="--server.port=8080" --net=host --restart=always nginxwebui |
如果是内外直接访问 http://192.168.2.1:8080 即可打开 Nginx 的 web 管理界面。输入注册用户名和密码登录后打开 web 管理界面。
- 查看【运行状态】
- 点击【反向代理】添加对应的域名和后端的服务器地址
- 进入【启用配置】先【检验文件】确保配置文件内容格式正确
- 选择【替换文件】然后在【启动 Nginx】



验证域名访问效果

docker-compose 配置
将容器环境整合到扩展卡(SD卡)中,同时配置 docker-compose 运行环境,确保通过 docker-compose 加载容器配置文件。
信息 |
---|
R5S 的 CPU 显示是 ARMv8 ,在下载对应的 docker-compose 文件时选择 aarch64 架构的可执行文件 |
- 挂载 SD 卡,确保 openwrt 可访问识别
- 调整 docker 的配置文件,迁移已有的容器镜像内容
- 下载并安装 docker-compose
- 验证 docker-compose 和 挂载的 SD 内容
挂载 SD 卡
可以将 SD 卡 插入 R5S 的卡槽,然后通过磁盘指令完成磁盘的分区和格式化。详细的分区格式操作可以参考 Photon 虚拟机调整硬盘容量。
项目 | 描述 |
---|
容量 | 32G |
分区格式 | btrfs |
挂载目标 | /data1 |
设备名称 | /dev/mmcblk0 |


调整容器镜像文件存放位置
容器的配置文件是 /etc/docker/daemon.json ,这里面有记录容器镜像的存储路径,可以直接修改配置文件也可以通过 GUI 的界面完成调整。详细的 openwrt 容器配置文件内容可以参考官网的说明
1、通过 rsync 备份原有的数据
代码块 |
---|
opkg install rsync
mkdir /data1/docker
service dockerd stop
rsync -avz /opt/docker /data1/docker
mv /opt/docker /opt/docker.old
service dockerd start |
Image Added
