基于CM4 Sensing双WAN冗余路由

2023-05-12 作者:

把手头能玩的板子全玩了一遍,完全停不下来。基于virt-manager和virsh cli的libvirt方案虽然没有PVE的纯web使用便利,但毕竟ARMv8有完全可用的libvirt支持已经很方便了,还要啥自行车哦。

既然Pi 4B据测已经能够很好的承担虚拟化路由职责,那么基于CM4并集成了4G LTE连接能力的CM4 Sensing就完全有能力实现双路外网的负载均衡+故障切换,对吧?

那即使技术实现上的选择已经很清晰,我们还是列一下目前已知的可能途径:

  • 基于一般Linux发行版使用iptables + connmark + policy-based routing直接手打路由。我曾用一台Debian 11 vm做过实验并且跑通了最基本的双wan负载均衡,想来感兴趣这种原始手工方式的玩家想必不是很多,所以也没有过多记录。且继续往下,在Linux上做这些策略的持久化、多ISP定时监控、故障切换,都有大量的脚本工作;而这方面已有大量成熟方案,我的目的仅仅是通过实验理解原理,目的达到,见好就收。感兴趣的可以通过关键词检索相应文章学习,另外B站的“金枪鱼之夜”的课堂录像(上下两集),可以帮你很好的由浅入深搞懂iptables。
  • 直接按Pi 4B编译/下载OpenWrt固件。如我们之前的mwan3负载均衡测试,功能实现上不应存在潜在问题,但这里显然要开始考虑4G/5G模块的驱动编译,wan口支持wwan的相应库的选择,最终编译结果固件的长期可靠性测试,硬件如果升级(比如4G模块,比如CM4载板)必然重新编译……一圈玩下来可以说是实现产品的精力了。
  • 第三个选择就要轻松的多。完全无需重新编译,把我们已经玩6的armvirt镜像直接扔Sensing里,给vm多加一个虚拟网卡eth2,打完收工。

没理解是吧,没关系,先把上一篇《基于Raspberry Pi 4B单臂路由》复习一下,接下来我们看图说话。

完整阅读本篇»

简单RestAPI获取硬件状态

2023-05-11 作者:

简单来说,我需要一个能从HA上直接浏览家里主路由的CPU温度的首屏,因为RK3399发热比较猛却只有被动散热。有人可能说,加个小风扇难度很大么?呃,具备Netgear R7000(博通方案)在夏天轻松面对75℃服役5年的经验,我觉得国货不妨一战。

所以这个小项目,其实提供了对运行在物理机上几乎任意Linux的cpu温度、磁盘余量、上电时间等参数的rest api获取。写的比较糙快猛,主要满足自己需求,所以莫要预期过高哈。

提供何种接口

随意运行一个http client,比如  curl http://[hostname]:9090/stats/[data_type]

data_type初期支持三种, du, temps, boot_time 分别代表磁盘用量,多个温度,和上电时间。然后就可以返回数据了。

完整阅读本篇»

基于 Asus Tinker Board 2S 单臂路由

2023-05-07 作者:

书接上回,这次实验对象轮到了压箱底旧货,基于RK3399的华硕Tinker Board 2S

虽然原厂OS拉胯,不得不说硬件用料还是大厂风范

话说这CPU运行libvirt比较艰难,直接新建vm确定100%报错cpu初始化失败。

查阅了一些资料,发现这种大小核的cpu,libvirt支持上比较有个性,vm要么选择小核,要么选择大核,万不可“既要又要”,否则就报错摆烂。也好,A72双核 vs. A53四核,看看老话“双拳难敌四手”到底靠谱不靠。

带上vlan,蛮好一台4口路由

那么先给OpenWrt配置A72双核,注意是RK3399的后2核,莫要搞错。

完整阅读本篇»

基于 Raspberry Pi 4B 单臂路由

2023-04-30 作者:

Here we’re gonna talk about a hand-made router (NAT gateway) using a Raspberry Pi 4B with at least 3 implementations. Sorry the wifi router is not included since it’s kinda easy to find the tutorials about the hostapd stuff, and the signal from onboard wifi is not quite usable anyway.

这里聊一下基于树莓派4B的有线单臂路由实现,至少三种技术实现;wifi路由就不谈了,基于hostapd的教程遍地都是,信号强度也是个问题,可用性仅限于贴脸。

如果只使用iptables的话,实现一个基于pi的路由其实只需要一句话。加上让内核开启转发,两句话打完收工。

Method #1: Several simple commands could simply turn the Pi OS to be a layer 3 device with SNAT (or MASQUERADE).

开个玩笑,起码还得先给LAN口设个固定地址,比如给eth0设置 192.168.17.1/24 ,那么上边<lan subnet>就应当是 192.168.17.0/24 。

如果还需要dhcp服务器(非必须)的话,去看一下dnsmasq,熟练工的话,基于一般的Pi OS手打路由只要10分钟(含参考文档)。

PS:要问wan口谁来承担?wifi可以,给eth0加vlan也可以,看想怎么玩。


接下来就是自行编译OpenWrt的玩法,如果不想编,直接去官网下载预编译的镜像也完全ok。该镜像内置了基于Pi 4B的所有硬件驱动,也包括802.11nac的wifi支持,刷机后直接使用没有任何问题。

Method #2: Feel free to build the OpenWrt and run it on the bare metal Pi 4B, or a prebuilt image can be downloaded from OpenWrt official website then you don’t have to build that on your own.

默认设定是br-lan连接eth0,无wan口。因其为单臂路由(没有两张物理网卡),我把br-lan口连接改为 eth0.120 ,wan口设定为 eth0.12 ,当然交换机需要是802.1q VLAN switch,保存设置后正常上网就可以了。

PS:更改lan口vlan id设置的过程,最好走wifi,这样就不会在设置过程中断线。当然还有个选择就是把vlan id 1留给一个接口(无论wan还是lan),随意就好。

对单臂路由在内网进行iperf3带宽测试,MTU 1500就不改了,差不多可以跑满(下图右下)。由此可见,Pi 4B的全双工千兆网靠得住,作为单臂路由没问题,同时跑满带宽的资源消耗也不高。

完整阅读本篇»

PVE + HomeAssistant + ESPHome

2022-09-24 作者:

Today let’s try out this ESP32-C3-12F dev board that costs only $5 (domestic shipping included) but has 3 power supply mode (AC 220V, DC 7~12V and microUSB, which is super convenient!) and a relay to turn my ordinary led light strip to be a remote controlled.

记得上次玩Arduino已经是2014年的事情了,那会儿用的还是ATMega系列的MCU,装专用IDE,写的C lang。

近10年后,感觉家用IoT玩的都是ESP和Pico了。至于开发语言,常青树C lang自然还有的,但大多视频教程则是外行更容易上手的Micro Python、Lua乃至只要配个yaml config的ESP Home —— 可见贵圈也很卷。

今天搞的是这块ESP32-C3-12F,带wifi、蓝牙BLE和一路继电器,以上都属于一般配置。比较巴适的是,这货带三模供电,AC 220V、DC 7~12V,以及MicroUSB,这就很方便了,省一个手机充电头。

废话少叙,先看实验结果吧。

服务器自然是Proxmox VE Home Server上的vm,数据内网本地化存储(2C 2G 32G即可),公网使用走ddns没毛病。

【注】HAOS(Home Assistant Operating System)的部署有N多选择。支持X86物理机、至少三种VM(kvm、vbox、vmware)、三种主流操作系统(Linux、Win、MacOS),两种容器(docker、lxc)、以及包括树莓派在内的至少三种SBC…… 这友好程度,你要说自己小白不会安装,都对不起开发者。只是这里要注意,选择安装方式一定要带上Supervisor,否则无法支持ESPHome扩展,详情参阅官网文档

HAOS装好后,打开web服务,安装ESPHome的插件,打开后就能开始设计ESP固件了。

完整阅读本篇»

nginx控制iptables芝麻开门

2022-02-10 作者:

During maintenance of a production server, we use to encounter a problem like this – an internet-access-blocked port, say 3306 (mysql), is about to be open for a little while due to debugging needs, which is not uncommon, right? So how to make this easily operated, mostly secure, and automatically disabled after working – I guess this’s gonna help somehow.

A Linux server with whatever the distribution including iptables (e.g. CentOS, Rocky for now as example), Nginx, fcgiwrap, a simple shell script and a commonly used web browser, let’s say chrome, will be major ingredients on the recipe.

常做运维,总会遇到某些线上服务器,为了便于调试,在符合安全要求的基础上,需要相对便利的对公网短时定向开放某些端口。

昨天想了一招,用nginx操作shell脚本,对特定公网IP开口子,叫一声“芝麻开门”,便捷又安全。举例端口3306(mysql),系统是Rocky Linux 8(原CentOS 8)。

Doors of Durin

Doors of Durin

先查一下现有的防火墙规则,需要的话可以保存一下。换句话说,搞芝麻开门之前,先确定门是隐藏的;也即已经有相应(且持久化)的iptables rule确保到被保护端口的连接是DROP/REJECT状态。

然后就是fcgiwrap的安装,此处就不写nginx安装过程了,默认安装即可。

安装后增加两个systemd服务文件,并测试fcgiwrap服务生效。

【注】那俩服务文件,在Redhat之外的发行版上,fcgiwrap安装包可能自带,请针对所用版本自行检查。

接下来为一个新的nginx server准备个根目录,存放网页和之后控制iptables的脚本。

完整阅读本篇»