MoreRSS

site iconHeYSH | 贺叶霜修改

博客名:林中阴影。分享一些智能设备的使用体验。
请复制 RSS 到你的阅读器,或快速订阅到 :

Inoreader Feedly Follow Feedbin Local Reader

HeYSH | 贺叶霜的 RSS 预览

与IPv6地址战斗

2025-06-04 21:13:09

捣腾家里服务器的另一些副产品。

配置ULA前缀

当你需要设置IPv6网关时,常常需要一个不随着运营商前缀变化的内网地址,这时候设置ULA很好用。

OpenWrt设置ULA前缀

OpenWrt设置ULA前缀

这样,在需要临时修改网关时,可以直接

sudo ip -6 route del default && sudo ip -6 route add default via fd22:9:30::88:88 metric 100

其中,fd22:9:30::88:88是网关地址。

自定义后缀

相比于60d1:24e0:fe4a:5c66这样的后缀,还是::88更帅一些。回字自定义后缀有4种写法,我们Linux真是太厉害辣。

如果是原生Debian,用ifupdown的话:

# /etc/network/interfaces
iface <你的ensXX> inet6 auto
 post-up /sbin/ip token set ::88 dev $IFACE

如果是Ubuntu(或者Ubuntu味道的Armbian),一般使用networkmanager:

sudo nmcli connection modify "Wired connection 1" ipv6.addr-gen-mode eui64
sudo nmcli connection modify "Wired connection 1" ipv6.token "::88"

如果是(直接安装的)OpenMediaVault,它使用netplan:

# touch /etc/netplan/30-fix-token.yaml
network:
 ethernets:
 ens18:
 ipv6-address-token: "::123:123"
# sudo netplan apply

应该还会有人用systemd-networkd配置网络,自己读manpage去吧,祝你成功。

更快地推送IPv6地址

之前的DDNS更新脚本,或者ddns-go,都是使用cron来轮询的。而ip monitor命令不需要轮询,在IP地址变更的第一时间就会发送消息。配合靠谱的推送服务,可以比别人提前……呃……大概五分钟。

所以没什么用处,建议直接ddns-go。

#cat /etc/systemd/system/dns-updater.service
[Unit]
Description=Dynamic DNS updater
DefaultDependencies=no
Wants=local-fs.target
After=local-fs.target
Wants=network-pre.target
Before=network-pre.target

[Service]
Type=exec
ExecStart=/opt/ddns-updater

[Install]
WantedBy=sysinit.target
#cat /opt/ddns-updater
#!/bin/sh -e

ip -o -6 monitor address |
 while read index iface proto addr dummy scope temporary dummy; do
 case "$iface:$proto:$scope:$temporary" in
 ens18:inet6:global:dynamic)
 addr="${addr%/*}"
 case "$addr" in
 f*) continue ;; # 跳过以 f 开头的地址
 esac
 if [ "$addr" != "$current" ]; then
 NEW_IP="$addr"
 # 我这里发送到了企业微信机器人,也可以用bark、nfty.sh之类
 curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxx' \
 -H 'Content-Type: application/json' \
 -d "{
 \"msgtype\": \"text\",
 \"text\": {
 \"content\": \"IPv6地址已更新:$NEW_IP\"
 }
 }"
 echo "已通知企业微信,新地址:$NEW_IP"
 current="$addr"
 fi;;
 esac
 done

半年前的NAS升级

2025-04-12 11:37:49

2024年10月,我决定把之前的垃圾一号锐角云和垃圾二号蜗牛星际退役,整点性能更高的东西,从海鲜市场捡了一套HP Elitedesk 800G4 SFF。

当时的价格是这样:

型号 价格 渠道
准系统 800G4 330 闲鱼
CPU I5-8500 289 淘宝
内存 金龙惠宇16G*2 200 PDD
SSD 1T 400 JD
万兆网卡 MNPA19-XTR*2 71 淘宝
交换机 SE106Pro 129 淘宝
网线 光纤AOC线*2 19 淘宝
SATA线 单弯头的比较好 19 淘宝
合计 1457

不算万兆互联和SSD的部分大概是800块。听说我下单之后这套准系统就开始涨价了,B站带货真可怕啊。

这台NAS(或者家用服务器)在这半年的服役中效果良好,得益于白金电源,加上万兆网卡和3.5硬盘×2、2.5×1,平均耗电大概只有40W左右。因为是品牌机,据说不支持9代CPU,但互联网上的技术支持比一般的山寨主板要好的多,甚至有完整的维护手册。硬盘螺钉之类的小配件JS会单卖,不过如果有3D打印机的话,也可以自己打:

PLA打印的半高挡板,暂时还没有融化

软件方面,使用大家都喜欢的Proxmox VE,一共开了4个虚拟机,没有LXC容器:

  • HAOS给“智能”家居用,直通了ZBDongle-P。
  • gateway用来和互联网联系。用cloudflaredcaddy代理内网服务,wireguardnatmap来访问内网。
  • OpenMediaVault直通SATA控制器。24年8月买的二手HC530暂时还能用。
  • docker-host用来放一些小服务,因为docker会在iptables里搞东搞西,可能会把gateway里的服务弄坏。

按照惯例(?),放一张服务的图

远程控制

另外,因为是企业级系统,800G4支持Intel vPro,配合8500以上级别的CPU可以开启AMT,实现类似IPMI、IP-KVM的“带外”远程控制功能。不过还有一个问题:在开启GPU直通之后,HDMI的输出不再来自主机,远程控制没有图像信号。

为了解决这个问题,可以使用AMT的Serial-Over-LAN功能,使用串口和主机通信。反正没有人会在PVE主机上安装GUI程序对吧。

首先,在BIOS里开启AMT和SOL,记得设置静态IP地址,不需要和PVE系统地址一致;密码要设的长一些,应该包含大小写字母和数字。

控制上建议使用meshcmd,在ARM、x86上都可以运行。./meshcmd meshcommander会开启一个服务器,算是远程访问的远程访问。

BIOS、GRUB和PVE都需要通过串口控制,因为是企业级,HP的BIOS直接支持串口访问;GRUB和Linux开启串口访问需要

  • 找到TTY端口,我这里是TTY4
root@pve-hp:~# dmesg|grep tty
...
[ 0.419539] 0000:00:16.3: ttyS4 at I/O 0x3088 (irq = 19, base_baud = 115200) is a 16550A
...
  • /etc/default/grub里添加串口设置
# cat /etc/default/grub
...
GRUB_CMDLINE_LINUX_DEFAULT="quiet console=tty4 console=ttyS4,115200n8" #在原始参数后追加
GRUB_TERMINAL="console serial" #GRUB自身也采用串口输出
GRUB_SERIAL_COMMAND="serial --unit=4 --speed=115200"
...
  • 之后,运行update-grubsystemctl enable [email protected],就能通过meshcommander访问主机了。

突然想到,对于普通电脑,只要搞两根USB转RS-232串口线交叉连结,就可以实现 IP-KVM 80%的效果——就是有点过于low-tech。

另外的一些小问题

NETDEV WATCHDOG: enp0s31f6 (e1000e): transmit queue 0 timed out

# /etc/network/interfaces
iface eno1 inet manual
 post-up ethtool -K eno1 tso off gso off

建议使用GRUB,不建议用sysctl方式设置,万一搞坏了系统,在GRUB界面改回去就能取消直通。

“智能” 家居笔记:一→两年后的回顾

2025-02-14 15:30:35

2023年初,我完成了以Home Assistant为基础的智能家居建设,见这里这里2024年 2025年,两年过去了,HA系统从22.12升级到25.1,居然还能够正常运行,大概算得上连续发生的奇迹

主要教训:稳定压倒一切

在荷尔蒙逐渐消退的三十三岁,对新玩意的追求已经逐渐被确定性所覆盖。而很遗憾,现在我家的配置尚不能称为稳定。特别是绿米ZigBee开关,大概每隔几天就会有某一个断开连接,需要重新配对,不知道是不是由于距离太远的原因。好消息是,这几个开关在没有信号时会由无线开关退回到开关模式,不会出现关不上灯的尴尬情况。

据传闻,直接使用小米多模网关连接米家,Zigbee网络是使用星形而不是网状连接,所以我近期(2024年)换成了Zigbee2MQTT模式,正在进一步观察。 又观察了一年,发现使用ZB Dongle-E和一条短USB线,在稳定性上比小米网关要好的多,除了在重启时会让灯泡闪烁之外。不过,ZigBee2MQTT自带的编组效果甚至不如HA自带的群组功能,不知道所谓的“减少网络压力”体现在哪儿。

另外,闲鱼上采购的绿米系列有一个插座坏掉了;另外的廉价ZigBee洋垃圾大都是能用的,但会有一些识别上的问题,不建议在容易挨骂的关键位置上使用。

这玩意有用吗?

有,情绪价值。

开玩笑的。通过软件来弥补硬件的功能,甚至重新定义硬件,是前些年“软件吞噬世界”狂言的部分原因,纯硬件上无法实现的事情,通过外接的无线开关和传感器就可以部分弥补。

比如说,在卧室的门框上贴上一个全屋熄灯按钮,在对付不睡觉小朋友的时候很有帮助。自己凑合的零冷水方案也算管用,虽然效果不如直接安装电热水器。另外,壁挂炉加上屋里的几个温度计,配合简单的PID算法,能够让整个屋子变得十分舒服。

我猜其他房子的温差应该会更大一些。这里的P=60,I=0.005,D=3600。Just in case.

纯粹提供情绪价值的也有,比如说AI-on-the-edge-device,ESP32也能跑AI,科技真是神奇啊——实际没什么用就是了。

另外,电动窗帘也挺棒的,我突然想起来。

智能灯还是智能开关?

正如之前说的,我在装修时选择了双重智能的方案。回头来看,只要ZigBee足够稳定,这种方法也有好处,比如可以留一些空的开关位置,在住一段时间之后,为这些开关增加一些功能——比如按键开窗帘、双击开空调,之类。

直接用米家怎么样?

使用Zigbee2MQTT之后,米家不再能够控制开关和灯泡了,只能勉强打开吸顶灯降低骂街音量。我个人对米家没有任何成见,不过, 虽然身处果壳之中,我仍然想当无限宇宙之王。 或者,无线网络之王?

旧手机做RDP客户端的一些尝试

2024-08-28 22:06:45

这样的话旧手机就可以作为瘦客户机用了,而且自带4G模块。

不要问为什么,工作造就人呀。

  • 首先,为了连接显示器,旧手机的USB口需要支持DP-alt模式,至少USB2.0是没戏了。我用的是一加7T,并且血亏200大洋修好了虚焊。

  • 然后,如果显示器没有type-c一线通,还需要搞一个扩展坞。 dock

    • 这种(盛惠25元)有各种贴牌,在充电时USB口是用不了的。建议另找一套蓝牙鼠标。
  • 把系统升级到Lineage OS 21,或者其他Android 14版本。每次更新,日志都说升级了桌面模式,每次都是一样的难用。

    • 如果是高贵的三星用户,就请当我没说过这句话。
    • 另外,别用Oxygen OS,桌面模式布局一团乱麻;也别用Pixel Experience,直接把手机干成Qualcomm CrashDump MODE,我还以为200块白修了。
  • 插显示器的时候,不要用SecondScreen APP,那个是给旧版本Android用的,挖孔屏使用的时候,显示器上会有黑边。

  • 只需要在开发者选项里勾选“强制执行桌面模式”就可以了,其他的选项对我来说没有必要。(在Android 15上,选项叫做“在辅助显示屏上启用可自由调整的窗口”) 开发者模式选项

  • 之后,连上显示器以后的Android桌面长这样。 桌面

  • 关于RDP客户端,建议不要用微软出品的APP。据我测试,只有Remote Desktop ManageraRDP Free支持鼠标中键。后面那个是开源的。

  • 按理说Moonlight也可以,不过还是RDP协议对4G友好点。

来自2025.5.27的更新:在升级到Android 15之后,外接鼠标无法在辅助显示屏上使用了。解决方法来自Gemini:将手机切换成横屏模式;或者进入手机的 “设置” > “连接的设备” > “外部显示屏”,将显示方向从 “标准” 更改为90度,然后再改回 “标准”。

一些矿渣的耗电量

2023-08-10 20:35:54

最近在小黄鱼上淘到一个支持电量统计的插排(这个),卖家还贴心地刷好了ESPHome固件。

数据就不标了,有兴趣的可以自行使用Engauge Digitizer

于是我用Excel算好了:

功率/W 年功耗/kWh
插座 3.8 33.288
我家云 5.4 47.304
锐角云 4.7 41.172
蜗牛星际 40.8 357.408
  • 首先是这个插排,本身待机就有3.8W,离谱。
  • 锐角云开启之后总电量为8.9W,本身耗电4.7W。锐角云的配置是N3450、8GB内存,上面插了一块256G的SATA SSD,运行PVE、Home Assistant和另外2个虚拟机,直插12V电源适配器把待机功耗控制在极低的水平。
  • 9.6W的部分是我家云的贡献。孱弱的RK3328核心,捉襟见肘的2G内存,即使再加上一块500G的2.5寸机械硬盘,耗电量也仅为5.4W,作为小型文件服务器可以直接忘掉电费问题。
  • 蜗牛星际就可以算上电老虎了。1块老旧SSD,两块老旧2.5寸和一块8T海淘盘带来了高达40.8W的耗电,如果24小时开机的话每年会带来高达一百多块的账单。

顺便一提,我家今年的耗电量长这样。这才仅仅是8月而已……

OK,当我今天没有更新过。

穷人的IP-KVM远程访问

2023-05-20 16:06:47

说起DIY的IP-KVM,当然是PiKVM以及一系列衍生项目,可是对于那些把钱投入庞氏骗局的穷人来说,RPI4已经远不能称为inexpensive。近几天,我从垃圾堆里翻出了同样昂贵的Phicomm N1和一张30块的视频采集卡,发现正好也能用。

有较强的自我管理意识.png

有较强的自我管理意识.png

把远程控制取名叫作IP-KVM,这对于SEO来说过于不友好了。每当搜索Google的时候,总会看到有人试图在N1上跑虚拟化(aka KVM),可能是对2G内存有些什么不切实际的幻想。最后,在GitHub上找到了在N1上安装PiKVM的脚本:toss-a/pikvm-armbian。不过这里的说明也稍微有些简略,我会努力稍微详细一点点,尽量。

那么,需要准备下面这些东西:

  1. N1一台;

    我的N1是从垃圾堆里捡回来的,如果是新购的话,应该会有一些更新、更好的选择。注意,这些选择需要能够OTG。

  2. USB公对公数据线一条;

    因为N1的USB口有OTG功能,直接连接被控电脑就可以模拟鼠标和键盘。

  3. 视频采集卡一张,配HDMI线一条;

    因为N1没有USB3.0接口,MS2109芯片就足够了,可以跑1080p@30Hz。 大概长这样:

  4. U盘一块;
  5. Linux知识一些;
  6. 可能会需要:
    1. USB键盘一个;
    2. USB延长线一条;
    3. 理想的上网环境。

      根据相关法律法规和政策(下略)

不需要准备Arduino、BadUSB、USB Rubber Ducky,或者其他的单片机,虽然我的垃圾堆里也有不少。

安装系统:Armbian(Ubuntu口味的)

这部分已经有很多人写过了,大概步骤是降级—BalenaEcther镜像写入U盘—Armbian写入EMMC。可以参考GitHub说明其他人的博客或者B站。要注意,在盒子的原始系统尚未关机时不要插入U盘,Android系统会破坏U盘文件的权限。

Armbian镜像我使用的是Armbian_23.05.0_amlogic_s905d_jammy_6.1.27_server_2023.05.13.img.gz,其中,S905d是N1所用的芯片,Jammy是Ubuntu的版本号,6.1.27代表使用的是最新版本的Linux内核。如果安装PiKVM,Debian系列(bullseye)的软件包有些太老了。

修改dtb文件

好,到这里时,我会假设:N1已经刷成了Ubuntu风味的Armbian系统;连接好网络,有线无线都可以;能够输入命令——不管是直接插键盘显示器,或是通过SSH,还是直接从电路板上引出导线。

在上述的Armbian引导文件中,默认的USB模式是Host,为了模拟鼠标、键盘等设备,需要将dr_modehost更改为peripheral1。那么,我们需要重新编译dtb文件:

# 将dtb编译为dts文件
dtc -I dtb -O dts -o test.dts /boot/dtb/amlogic/meson-gxl-s905d-phicomm-n1.dtb
# 用你喜欢的编辑器打开这个文件
vim test.dts

test.dts中搜索dr_mode,寻找首个dr_mode = "host";,改为dr_mode = "peripheral";。 这里的上下文大概是这样: 注意红字位置 后面的dr_mode不必修改。不要问我为什么,这部分超出了我的能力。之后重新把dts编译回去,移动到/boot/dtb/amlogic/,并且修改启动项:

dtc -I dts -O dtb -o n1-test.dtb test.dts
sudo mv n1-test.dtb /boot/dtb/amlogic/
sudo vim /boot/uEnv.txt

FDT一行改为FDT=/dtb/amlogic/n1-test.dtb最近觉得carbon.now.sh还挺棒哒

然后重启系统。

安装脚本

此时,假设你能够透明地访问github和其他网站,curl google.com返回302或者200。如果不行的话,可以尝试在N1上安装zfl9/ss-tproxy,让N1同时承担旁路网关的功能。

git clone https://github.com/toss-a/pikvm-armbian.git
cd pikvm-armbian
./install.sh

在提示"Do you want to apply custom patches? [y/n] "时,选择N。

接下来,重启系统,再次运行install.sh,然后关机。

连线和启动

N1靠近HDMI接口的USB口已经改为OTG从机模式,把双公头USB线插在这里,另一头插到被控计算机上。这时候,如果视频采集卡插不上的话,拿出提前准备好的延长线。下面的照片来自这里,照相技术牛逼疯了。

牛逼疯了!

重新插入电源,用随便的浏览器访问N1的IP地址,并忽略证书错误提示。初始用户名和密码都是admin,别忘了修改登录密码,用sudo kvmd-htpasswd set admin

另外,感谢pikvm项目,有钱的话就去支持他们的硬件吧!


  1. Ref:README,这个写的其实挺清楚的,比我的好。 ↩︎