使用便宜的4g模块 配合docker来转发你的短信 libgammu smsforwarder golang

为什么会有这篇文章

刚开始一直在用SmsFordarder在安卓手机上进行短信转发,长期占用安卓手机,老化的电池也不放心,咸鱼发现有便宜可用的支持短信的4g模块,顺带研究一下相关的内容,就自己用golang写了相关服务。

我自己的硬件配置

主板 orange pi5 max 很不错的板子,我在上面跑frigate、jellyfin 能解码,能跑图像识别。
cpu rk3588 x86和arm64都可以
系统 ubuntu server22.04 因为还在跑redroid,需要5.10内核,所有没用24.04系统
4g模块 移远的EC200T-CN 咸鱼10块钱,cat4速率,但是我不需要用它上网,便宜,有短信,有通话接口就行。
usb转4g板子 咸鱼搜 mini pcie转4g模块 20块钱
天线 2根 IPEX一代接口
sim卡信息 中国联通 没其他卡,没测试移动和电信

软件配置

  • docker就行了。
  • 相关代码:
  • 我用golang写的一份读取短信和来电的服务gammu-web
  • 配合golang的通知服务ForwardSMS

准备转发配置文件forward.yaml

# 如果有all这个配置,就是默认所有短信都会转发给这个企业微信机器人,建议发送给管理员,或者直接删除关闭
all:
    rule: all
    type: all
    notify: wechat
    url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxx

# 从上到下依次为 项目名称、规则(使用关键字匹配)
测试:
    rule: 测试DDD
    type: keyword
    notify: wechat
    url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxxxx

# 正则匹配规则
工单号:
    rule: "\\d{8}" # 匹配8位数字
    type: regex
    notify: gotify
    url: https://gotify.example.com
    token: your_app_token

# 转发给ios用它。
bark:
    notify: bark
    type: all
    rule: all
    url: "https://api.day.app/xxxx"

# 转发给安卓用它。
gtify:
    notify: gotify
    type: all
    rule: all
    url: "https://gotify.example.com"
    token: "your_app_token"

# emm邮箱转发
email:
    notify: email
    type: all
    rule: all
    smtp_host: "smtp.qq.com"
    smtp_port: "587"
    username: "[email protected]"
    password: "授权码"
    from: "[email protected]"
    to: "[email protected]"

配置docker-compose.yaml (支持x86和arm64)

version: "3"
services:
  # https://github.com/scjtqs2/ForwardSMS
  forwardsms:
    image:  ghcr.io/scjtqs2/forwardsms/forwardsms:latest
    environment:
      - FORWARD_SECRET=your_shared_secret_here
      - TZ=Asia/Shanghai
      - HTTP_PORT=8080
    volumes:
      # 挂载上面配置的推送文件
      - ./forward.yaml:/data/config/forward.yaml
    restart: always
    expose:
      - 8080

  # https://github.com/scjtqs2/gammu-web
  gammu-web:
    image: ghcr.io/scjtqs2/gammu-web:latest
    environment:
        - FORWARD_ENABLED=1
        # 写死
        - FORWARD_URL=http://forwardsms:8080/api/v1/sms/receive
        # 和forwardsms里面的要一致。
        - FORWARD_SECRET=your_shared_secret_here
        - TZ=Asia/Shanghai
        # 转发通知携带的标识。
        - PHONE_ID=SMS1_186xxxxxxxx
        - ATCONNECTION=at9600
        # ec200t-cn 默认的管理接口就是/dev/ttyUSB1(能同时收发短信,还能读取来电显示数据用来达到转发来电通知)。根据实际情况自行调整。
        - USB_PORT=/dev/ttyUSB1
        - API_PORT=21234
        # web网页访问用到。
        - API_TOKEN=your_shared_token_here
        - GAMMU_DEBUG=false
        - DEBUG=0
        - CALL_FORWARD_ENABLED=true
        - CALL_FORWARD_URL=http://forwardsms:8080/api/v1/call/receive
    volumes:
      - ./data:/data
    # 加了这个,就不用挨个去映射 /dev/ttyUSBx了
    privileged: true
    restart: always
    ports:
      - 21234:21234

浏览全部

truenas scale 25.04 安装 redroid 云安卓

  1. 重新编译镜像
    因为redroid要用到binder_linux内核模块,但是truenas默认的内核并没有这玩意,需要重新编译。
    1. 可以下载我编译好的自编译truenas_scale,然后手动安装/更新
    2. 也可以自己编译
    #进入truenas你的一个目录位置
    cd /mnt/p4510
    #安装开发者工具
    install-dev-tools
    sudo mount -o remount,rw /
    sudo apt install build-essential debootstrap git python3-pip  squashfs-tools unzip libjson-perl rsync libarchive-tools
    wget https://wx.scjtqs.com/downloads/%E8%87%AA%E7%BC%96%E8%AF%91truenas_scale/python3.11-venv.deb
    # 因为truenas的apt源里面的python3-venv无法安装,这里我手动打包了个可用的deb出来
    sudo apt install ./python3.11-venv.deb
    # 拉取编译脚本,这里可以用我改过(添加了蓝牙和binder的内核支持)的脚本来编
    git clone https://github.com/scjtqs2/scale-build.git -b stable/fangtooth
    cd scale-build
    # 拉取依赖
    make checkout
    # 编译需要的deb包
    make packages
    # 创建update升级包
    make update
    # 创建iso安装镜像
    make iso
    
    1. 当然,你也可以用docker环境来编译,不安装开发者套件
    ### create a docker runner
    cd /mnt/p4510
    git clone https://github.com/scjtqs2/scale-build.git -b stable/fangtooth
    docker run --rm -d \
      --name truenas-builder \
      --privileged \
      -v /mnt/p4510/scale-builder:/workspace \
      scjtqs/truenas-build:bookworm
    ## build
    docker exec -it truenas-builder bash
    # 拉取依赖
    make checkout
    # 编译需要的deb包
    make packages
    # 创建update升级包
    make update
    # 创建iso安装镜像
    make iso
    
    浏览全部

truenas scale 25.04 安装k3s

背景

从之前的truenas 22一路过来,之前的很多东西都是用的K8s的方式部署的,之后truenas 迁移到docker以后,也单独弄了个虚拟机来跑之前k3s懒得迁移的业务。 折腾过truenas新出的Incus的容器和虚拟机,最后还是选择了docker的方式直接跑k3s。因为incus的那个容器手动配了特权后,web页面会崩。

通过docker来跑k3s

  1. 创建docker-compose.yaml文件,有其他需要的化自己加ports端口。
version: '3'
services:
  k3s-server:
    image: rancher/k3s:v1.26.5-k3s1
    container_name: k3s-server
    privileged: true
    restart: always
    ports:
      - "6443:6443"       # K3s API Server
      #- "80:80"           # HTTP (Ingress) 不再需要,用truenas app的那个nginx就行了,有需要自己改端口解放出来
      #- "443:443"         # HTTPS (Ingress) 不再需要,用truenas app的那个nginx就行了
    volumes:
      - /mnt/p4510/k3d-library:/var/lib/rancher/k3s  # 持久化数据,自己 修改成你的存储位置
      - /mnt/p4510/etc/k3s:/etc/rancher/k3s          # 配置文件,自己 修改成你的存储位置
      - /mnt/storage:/mnt/storage
    command: >
      server 
      --disable servicelb        # 禁用掉k3s自带的loadbalance
      --disable traefik           # 禁用掉k3s自带的traefik(一种非nginx的Ingress)
      --node-name k3s-server 
      --service-cidr 10.43.0.0/16,fd00:10:43::/112 
      --cluster-cidr 10.42.0.0/16,fd00:10:42::/56
      --kubelet-arg max-pods=900
      --disable metrics-server
      --flannel-ipv6-masq     # 开启了ipv6流量代理,使pod内部环境可以直接访问公网的ipv6地址
    environment:
      K3S_KUBECONFIG_MODE: "644" 

浏览全部

truenas scale 25.04.0 安装 dg1 显卡支持 frigate 配置

本人配置

  1. h12ssl + 7352 +dg1
  2. esxi 8.0 直通truenas
关于如何点亮,这里就不另说了。 之前的dg1驱动,即便是编译好了,安装上了,运行起来也会有很多问题(时不时就死了),正好,现在truenas scale 25.04内核大于6.8了,可以用xe驱动凑活着用了。

开始操作

  1. esxi直通dg1。有两个,一个显卡,一个音频。(音频的可要可不要,也就是可以不加入到虚拟机中)
  2. 配置虚拟机直通,添加dg1到虚拟机,如图所示:
  3. 配置虚拟机参数:
    svga.present=FALSE  #禁用esxi自带的显卡,一定要关,否则dg1驱动不了
    pciPassthru.use64bitMMIO=TRUE
    pciPassthru.64bitMMIOSizeGB=8
    hypervisor.cpuid.v0=FALSE
    
  4. 配置truenas scale (一次性的配置):
    # 修改引导参数,强制启用dg1。我这里的是蓝戟半高款,其他型号自行提换
    midclt call system.advanced.update '{"kernel_extra_options": "xe.force_probe=4908 i915.force_probe=!4908"}'
    
    4 配置truenas scale (每次更新系统都要重新配置):
    # 进到你的一个目录
    cd /mnt/your_path
    # 下载最新的固件
    git clone https://github.com/intel-gpu/intel-gpu-firmware.git
    systemd-sysext unmerge
    # 不同的版本换成不同的目录
    zfs set readonly=off boot-pool/ROOT/25.04.0/usr
    mount -o remount,rw /
    sudo cp firmware/*.bin /lib/firmware/i915/
    sudo update-initramfs -u -k all
    systemd-sysext merge
    # 操作完后重启
    reboot
    

浏览全部

双栈ip环境 梅林 dnsmasq 禁用指定域名的ipv6解析

背景

使用的ax86u,固件用的ks家的官改。梯子工具用的猫咪爬梯(Merlin Clash)。 开了ipv6,但是最近发现docker的ipv6代理有问题,链接经常被reset。于是需要强制它们走ipv4,但又不影响我的pt使用Ipv6。

方法

  1. 因为asus/梅林固件自带dnsmasq,因此直接从dnsmasq入手。
  2. 添加配置:
vi /jffs/configs/dnsmasq.conf.add

添加下面内容

address=/.docker.io/::
address=/.docker.com/::

解决超微 h12ssl SuperMicro 主板风扇反复高低转速问题

缘由

超微bmc里面的默认低ct的阈值有点高。如果你的静音风扇(例如猫扇),转速低了,就会强制触发全速,过会降下来,再依次反复。

操作-通过ipmitool更改风扇转速检测阈值

  1. 准备一台电脑,以我的macbook为例。
  2. 在你准备的电脑上安装ipmitool。brew install ipmitool
  3. 使用ipmi命令来降低转速:
#我bmc的ip地址为192.168.50.132为例。所有风扇都配置一遍。
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FAN1 lower 0 100 125
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FAN2 lower 0 100 125
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FAN3 lower 0 100 125
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FAN4 lower 0 100 125
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FAN5 lower 0 100 125
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FANA lower 0 100 125
ipmitool -H 192.168.50.132 -U ADMIN -P ADMINPASSWORD sensor thresh FANB lower 0 100 125

得到反馈:

Locating sensor record 'FAN1'...
Setting sensor "FAN1" Lower Non-Recoverable threshold to 0.000
Setting sensor "FAN1" Lower Critical threshold to 100.000
Setting sensor "FAN1" Lower Non-Critical threshold to 125.000

修改后,进入你的bmc控制台查看你的风扇“低CT”值,是不是降低了?降低了就是成功了。

通过selenium无头浏览器来定时重启光猫

前言

过年家里没人,光猫死了之后,直接断网。太难受了。电信给的光猫来垃圾,也是在没办法了。随之产生了定时重启它的想法。 网上找了一圈,都是要破解超管账号然后解锁telnet的。我这长期在外,只能远程操作,没办法断网断电折腾,也就没办法拿到超管密码了,用自带的用户账号进去看了下,有重启按钮。😁 简单抓了下api。。好吧还是带表单验证的,算了,不深入折腾。直接上无头浏览器吧。

实现原理

  • 使用golang来控制selenium操作网页,实现重启功能。

源码地址:

https://github.com/scjtqs2/hg8145c-reboot

说明:

做成了docker compose的方式便于运行。用普通账号就可以实现,不用破解路由器。 基本上网页样式差不多的都可以试试。实在不一样,就fork项目自己修改对应的html选择器吧(edge浏览器f12直接复制selector)

浏览全部

tailscale 旁路模式配置组网

环境说明

老家的路由器是ac68u,内存小,cpu性能也不太行,在上面跑一个小猫咪就内存耗尽了,没多余的内存跑tailscale了。因此我将tailscale装到了一个linux虚拟机系统上面(ubuntu 24.04)。
  1. 主路由ac68u,网段 192.168.0.0/24
  2. ubuntu虚拟机(也可以是树莓派等arm的开发版,甚至是n1),ip:192.168.0.128(需要固定,可以在主路由的dhcp分配静态ip)
  3. 对端组网的网段:192.168.50.0/24,192.168.200.0/24

浏览全部

ubuntu 22.04 上配置 postfix + cyrus sasl 实现smtp relay server。用来给其他服务器中转使用

目前很多云服务器都封死了25端口的out流量。无法发送邮件,如果要搭建邮局,就需要一个能发smtp的服务器做中转。

安装必备的包

sudo apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules db-util procmail libsasl2-modules-gssapi-heimdal

配置中转smtp用的端口

vim /etc/services
# 找到 `smtp  25/tcp mail`
# 在下面添加一行
smtp2           41067/tcp       mail

浏览全部