之前写过一篇基于openwrt系统的r2s的All In One,包括中间我手动重启的情况,总共运行了两个30天,也还算稳定,但是openwrt系统,大家都知道是一个路由器系统,当个路由器使用可以说非常好用,但是如果除了路由器功能还有别的需求情况的话,openwrt系统使用起来就有点差点意思,所以我后面将系统改成了armbian。

起因

说到底,还是管不住自己折腾的念头。

其实r2s配合openwrt来说,作为软路由使用确实很不错,功能强大而且也还算稳定。

购买r2s之前看各种测评觉得想入手一个玩玩,入手之后发现,我对软路由其实并没有多少需求,相反,我更需要一台低功耗性能要求不高但是能7*24小时运行能运行我熟悉的Linux系统的设备,用来跑WireGuard从外面回家、DNSMASQ配合规则去广告、透明网关及Docker等,这些事虽然openwrt系统也能干,但是实际操作的时候,各种步骤总是没有纯Linux系统熟悉,部分情况比如说WireGuard内网流量转发等我折腾的效果也没有纯Linux系统下好。

所以,思来想去,我要不干脆把openwrt换成纯Linux系统好了。

于是在某个心烦意乱的工作日下班之后,对r2s又进行了一顿折腾,于是有了这篇文章。

r2s运行armbian系统

在购买r2s之前,我就了解到了armbian官方对r2s有支持,当时买之前也考虑过,如果购买之后openwrt用不来还可以换armbian系统,没想到还真的用上了。

armbian是一个专为ARM设备基于Debian/Ubuntu开发的系统,其实很多软路由单片机等设备都可以使用这个系统,比如说香橙派、友善的r2s/r4s、斐讯N1等,对于熟悉Debian的朋友来说,上手armbian应该也不是什么难事。

armbian系统官网:https://www.armbian.com/

armbian适配r2s版本页面:https://www.armbian.com/nanopi-r2s/

目前(2022年06月)针对r2s的最新版本基于Debian Bullseye开发的内核版本是5.15,看了下,比Debian Bullseye的5.10版本更新一点。

系统安装没啥说的,跟openwrt一样,下载下来之后使用balenaEtcher等工具写入SD卡然后插回r2s开机即可,等几分钟之后等系统启动可以通过SSH连接,默认账号是root,密码是1234,登录之后会要求一系列初始化操作,一步一步操作就好了。

多说一句,初始化过程会提示是否选择zsh作为默认的shell,如果是和我一样使用的SD读写速度不是很好的,不建议选择zsh作为默认的shell,日常使用尤其是登录时响应速度实在是有点慢。

PS:因为某些原因,透明网关相关设置过程我就不说了,你懂的,和别的系统都一样。

利用WireGuard回家访问局域网

将r2s的openwrt系统换成armbian,很大一部分原因就是在openwrt系统上WireGuard我配置的效果并不是让我很满意,我又不想继续花时间去研究这些对我来说意义不大的事情,换了armbian之后终于能按照我想要达成的目标来配置了。

Debian详细配置可以参考这里:Debian系统WireGuard配置记录,我这里只根据实际情况简单记录一下。

我有公网IP,且在光猫映射好了对应的端口,且我只需要从外面访问我住的地方的局域网设备,并不需要从住的局域网访问外网的局域网设备,所以我只需要在我的r2s上利用iptables做好流量转发就行。

安装:

apt install wireguard-tools iptables

我的wg0.conf配置示例:

[Interface]
Address = 10.10.10.1/24
SaveConfig = false
ListenPort = 51280
PrivateKey = WGAKqJaZmj2ciLx0aZci3k9bBmgOrg7KDk45cCblll8=
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -A FORWARD -o wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

[Peer]
PublicKey = cGR29d/viuU+MzaabRHoFsbRaT3pWA0vqXZrBc4OWTA=
AllowedIPs = 10.10.10.2/32

[Peer]
PublicKey = QDnLhFEi72cecRaHIN1SNaMT7EgOIfUMtJZ0vEiGnjM=
AllowedIPs = 10.10.10.3/32

如果跟我一样,需要使用iptables转发内网流量,需要注意其中的eth0这个值,我的实际情况r2s默认的网卡编号就是eth0,如果不是需要修改成实际的。

通过上述设置之后,只要成功通过WireGuard连接到r2s的设备,都可以随意访问我局域网的所有设备,就跟我在住的地方连上了我的光猫一样。

多提一句,如果会在多个地方通过WireGuard“回家”,内网的网段需要提前做好规划避免冲突,比如说,r2s所在的内网网段不要跟在外网的设备所在的局域网网段冲突,不然可能会出现无法访问WireGuard端点设备所在的局域网的情况。

说个我实际的使用场景就是,通过WireGuard回家之后,我可以随时随地访问我的NUC上的黑苹果系统及我在内网跑的PVE宿主机和虚拟机等。

使用armbian-config命令配置USB WiFi

我在之前的文章说过,为了让r2s更接近硬路由,我专门给这个小玩意买了个USB WiFi以让它能作为热点发射WiFi信号以供局域网设备使用它的透明网关功能。

我本以为切换到armbian系统之后需要手动去设置USB WiFi作为热点,在某次执行armbian-config命令时,意外发现armbian竟然自带有这功能,命令行执行这个命令即可进入设置步骤,如图:

r2s armbian系统armbian-config命令Network
r2s armbian系统armbian-config命令Hotspot

如图,以此选择Network→Hotspot回车即可,第一次安装的时候可能会要求输入一些信息,设置完成之后,也可以通过此入口进行更高SSID及密码等操作。

也可通过编辑DNSMASQ的配置文件来进行修改,配置文件目录:

/etc/dnsmasq.conf

多说一句,不是所有的USB无线网卡都支持开启热点,购买之前最好先了解一下是否能当做热点。

DNSMASQ配合anti-AD去广告

之前使用openwrt系统的时候,我是使用AdGuardHome来局域网去广告,用了一段时间发现,其实我并不需要AdGuardHome的大部分功能,毕竟有谁会有事没事老登录后台去查看过滤了多少广告、解析了那些域名,我只想要一个服务配置好规则之后能默默给我去广告就好了。

Dnsmasq是一个开源的轻量级DNS转发和DHCP、TFTP服务器,针对家庭局域网等小型局域网设计,资源占用低,易于配置。

如果跟我一样,上一步设置了USB WiFi,设置过程会自动安装DNSMASQ,如果没有,手动安装也很简单。

安装:

apt install dnsmasq

anti-AD是一个针对中文区的广告过滤项目,其为多个平台提供广告过滤规则,DNSMASQ及AdGuardHome都是其支持的平台之一,我之前使用AdGuardHome添加的规则中anti-AD就是其中之一。

anti-AD项目主页:https://anti-ad.net/

既然anti-AD支持DNSMASQ,那我直接用DNSMASQ就好了,没必要再跑一个AdGuardHome,相当于给r2s减少了一个服务。

DNSMASQ使用anti-AD非常简单,只需要把anti-AD提供的规则文件放置到DNSMASQ配置文件目录下面即可,规则文件相关地址:

官网: https://anti-ad.net/anti-ad-for-dnsmasq.conf

GitHub: https://raw.githubusercontent.com/privacy-protection-tools/anti-AD/master/adblock-for-dnsmasq.conf

相关命令:

cd /etc/dnsmasq.d
wget 'https://anti-ad.net/anti-ad-for-dnsmasq.conf'
systemctl restart dnsmasq

验证,随便挑选一个在anti-ad-for-dnsmasq.conf进行dig就能查看了:

apt install dnsutils
dig zocoxx.com @127.0.0.1
dig 00-gov.cn @127.0.0.1

如果配置成功的话,解析结果应该是为空的。

安装Docker

和别的平台差不多,armbian源自带docker及docker-compose,一行命令即可安装:

apt install docker.io docker-compose

安装docker之后即可利用docker方便跑一些服务,比如我跑了个aria2用来下载。

安装Samba共享文件

是的,我还想用r2s进行简单的文件共享操作,充分压榨r2s的工具属性。

和Hotspot功能一样,armbian-config一样支持快速配置Samba,配置过程如下:

r2s armbian配置Samba-1
r2s armbian配置Samba-2
r2s armbian配置Samba-3

选择Samba回车Install等自动安装完即可。

多说一句,安装过程会有一步修改配置文件及输入用户的操作,操作完成之后,可以通过如下命令设置运行共享的用户,例如我在配置文件中设置的共享用户名为zoco,则设置密码命令:

pdbedit -a zoco

设置密码完成之后,重启Samba服务,然后就能在别的设备进行共享文件了。

如图,这是我在macOS上通过Samba协议访问r2s目录的截图:

macOS通过Samba协议访问共享文件

通过wakeonlan唤醒内网设备

通过我的实测,我的NUC睡眠时功耗只有2W不到,这个功耗非常适合7*24小时当做服务器运行啊,所以我打算不关机,让它7*24小时运行,我需要的时候可以随时从公司的macOS或者在外面用iPad通过WireGuard协议连接到它。

现实很完美是不是,我上面说的场景是NUC开机且不是休眠模式才能正常通过VNC连接,如果NUC处于休眠模式,直接通过VNC协议是无法远程的。

但是好在NUC支持WakeOnLAN,在BIOS设置好之后,只需要发送一个数据包给NUC的网卡就能将NUC从睡眠状态唤醒。

我的方案是每次需要远程到NUC恰好NUC又处于睡眠状态时,通过r2s给NUC发送一个WakeOnLAN数据包将其唤醒,相关命令如下:

apt install wakeonlan
wakeonlan 11:22:33:44:55:66

其中,wakeonlan后面跟着的就是需要唤醒的设备的网卡设备的MAC,如果是macOS,可以通过ifconfig命令查看,如果是Linux,可以通过ip a命令查看,如果是Windows,抱歉,我还真不知道怎么能快速查看到。

这种方案其实有点麻烦,如果遇到NUC睡眠状态,每次都需要通过SSH到r2s之后然后执行对应的命令,好在我不是经常需要远程到NUC,如果需要经常远程到NUC可能还需要找找能快速执行对应指令的方法。

折腾总结

经过上面这么一顿瞎折腾,可以说能比较符合我的需求了。

换成armbian系统还能继续通过USB无线网卡使用r2s的透明网关服务,给局域网无线设备提供一个透明且能去广告的网络环境还是很棒的。

有点遗憾的是r2s的另外LAN口暂时无法使用,不过我目前也没啥需求,暂时不用也没啥关系。

下一步想给r2s换个容量大一点的SD卡,想要达成的目标是配合aria2远程下一些评分Top 250的视频然后通过Samba服务共享给我的各个设备观看。

生命不尽,折腾不止。:-)