← LeisureLinux 文章索引
LeisureLinux · 微信公众号文章

树莓派 + IPv6 + ntfy:构建零中转私人告警网关

Linux/运维 阅读原文(微信)↗

利用树莓派的公网 IPv6 优势,绕过任何第三方云平台,实现手机与家庭 IoT 设备的高速直连通知。

一、 基础环境:IPv6 与 域名映射

  1. 获取 IPv6:确保树莓派通过ip -6 addr能看到240e/2408/2409开头的全球单播地址。

  2. DDNS 自动化:使用ddns-go或脚本,将你的域名(如pi.example.com)实时解析至该 IPv6。

  3. 防火墙放行:在路由器(或 OpenWrt)的 IPv6 流量规则中,开放树莓派的808080端口。

二、 部署 ntfy 服务(Debian 原生)

不使用 Docker,减少资源开销,直接在 Pi OS 上运行:

[Bash]{ngcontent-ng-c2411640571=""}

# 添加官方源并安装
sudo curl -L -o /etc/apt/keyrings/archive.ntfy.sh.gpg https://ntfy.sh/static/pubkey.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/archive.ntfy.sh.gpg] https://archive.ntfy.sh/debian all main" \
  | sudo tee /etc/apt/sources.list.d/ntfy.list
sudo apt update && sudo apt install ntfy

# 修改关键配置
sudo nano /etc/ntfy/server.yml

配置核心项:

  • base-url:https://pi.example.com(你的 DDNS 域名)

  • listen-http::8080

  • auth-file:"/var/lib/ntfy/user.db"必须开启,否则全网皆可推送)

  • auth-default-access:"deny-all"

管理命令:

[Bash]{ngcontent-ng-c2411640571=""}

sudo ntfy user add --role=admin myuser  # 创建用户
sudo systemctl enable ntfy
sudo systemctl restart ntfy
```text


### 三、 手机端配置与互动 {#三-手机端配置与互动 path-to-node="14"}

1.  **App 设置**:在手机端 ntfy 设置中,将"默认服务器"改为`https://pi.example.com`{index-in-node="32" path-to-node="15,0,0"}。

2.  **身份验证**:在 App 订阅主题时填入`myuser`{index-in-node="19" path-to-node="15,1,0"}的账号密码。

3.  **订阅主题**:订阅例如`home_security`{index-in-node="10" path-to-node="15,2,0"}。


###   {#section path-to-node="17"}

### 四、 自动化告警脚本实例 {#四-自动化告警脚本实例 path-to-node="17"}

#### 1. SSH 登录即时提醒 {#ssh-登录即时提醒 path-to-node="18"}

将以下代码加入`/etc/pam.d/sshd`{index-in-node="8" path-to-node="19"}或`.bashrc`{index-in-node="26" path-to-node="19"},实现物理隔离的登录报警:

[Bash]{ngcontent-ng-c2411640571=""}

简单的 curl 发送

curl -u "myuser:password" \ -H "Title: SSH 登录警告" \ -H "Priority: high" \ -H "Tags: warning" \ -d "用户 $USER 从 $PAM_RHOST 登录了树莓派" \ https://pi.example.com/home_security

#### 2. IoT 设备状态监控(Python 示例) {#iot-设备状态监控python-示例 path-to-node="21"}

监控局域网内 IoT 设备如摄像头存活状态

[Python]{ngcontent-ng-c2411640571=""}

```python
import os
import requests

def check_device(ip):
    response = os.system(f"ping -c 1 {ip} > /dev/null")
    if response != 0:
        requests.post("https://pi.example.com/home_security",
                      data=f"设备 {ip} 掉线!",
                      auth=('myuser', 'password'),
                      headers={"Title": "IoT 离线", "Priority": "4"})

check_device("192.168.1.50")

五、 进阶:HTTPS 证书自动管理

为了安全,建议安装Caddy作为反向代理,它会自动处理 IPv6 的 SSL 证书:

[代码段]{ngcontent-ng-c2411640571=""}

# /etc/caddy/Caddyfile
pi.example.com {
    reverse_proxy localhost:8080
}

本文整理自微信公众号 LeisureLinux 的原创内容(Linux / AI / 安全 硬核技术)。

· 阅读原文(微信公众号)

· 关注公众号 LeisureLinux,第一时间获取技术深度内容。

LeisureLinux 公众号二维码(微信扫一扫关注)