Files
op-packages/minigate/README.md
T

24 KiB
Raw Blame History

minigate - OpenWrt 轻量网关管理

一个类似 Lucky 的轻量级 OpenWrt 应用,提供四大核心功能:DDNS、SSL 证书、反向代理、登录防护。

当前版本:v2026.9.18-2。项目名称、仓库名及 OpenWrt 内部包名均为 minigate。

OpenWrt 用户请从 Releases 下载 minigate_2026.9.18-2_all.ipk。不要把 GitHub 自动生成的 Source code (zip) / Source code (tar.gz) 当安装包上传到 LuCI。

项目定位

minigate 面向需要自托管轻量网关能力的 OpenWrt / ImmortalWrt 用户,目标是在 LuCI 中集中完成域名解析、证书签发、反向代理和登录防护配置,减少在路由器上手动维护多组脚本、Nginx 配置和防火墙规则的成本。

项目重点关注以下场景:

  • 家庭或小型办公网络中的自托管服务入口管理
  • IPv4 / IPv6 双栈 DDNS 与反向代理配置
  • Cloudflare DNS-01 自动签发和续期证书
  • 直接 IP 访问、未知 Host、暴力登录尝试等常见暴露面防护
  • OpenWrt / ImmortalWrt opkg、apk、源码安装和 SDK 编译兼容

维护状态

  • 维护者:@tpxcer
  • 当前维护分支:main
  • 发布方式:GitHub Releases 提供源码包和 OpenWrt/ImmortalWrt 兼容安装包
  • 版本规则:按北京时间(Asia/Shanghai)发布日期使用 年.月.日;同日首版无后缀,后续版本依次追加 -1、-2,例如 2026.9.14、2026.9.14-1。标签加 v 前缀。
  • 安全策略:见 SECURITY.md
  • 贡献说明:见 CONTRIBUTING.md
  • 许可证:MIT License

功能特性

🌐 DDNS (动态域名解析)

  • Cloudflare DNS API 支持
  • IPv4 / IPv6 / 双栈 模式,同时更新 A 和 AAAA 记录
  • 自动检测 WAN IP 变化并更新 DNS 记录
  • 同名同类型记录重复时,保留匹配当前 IP 的记录并清理其余旧记录,避免旧 IP 继续参与解析
  • 支持从网络接口或外部 URL 获取 IP
  • 可配置检查间隔和强制更新间隔
  • 一键手动触发更新
  • 最近一天 IP 变化明细,显示 IPv4/IPv6 地址、开始时间、结束时间和持续时长

🔒 SSL/TLS 证书 (ACME)

  • Let's Encrypt 自动证书签发
  • 使用 DNS-01 挑战方式(Cloudflare)
  • 支持 ECC / RSA 多种密钥类型
  • 自动续期(通过 cron 每天检查)
  • Staging 模式用于测试

🔄 反向代理

  • 基于 Nginx 的轻量反向代理
  • IPv6 监听支持(listen [::]:port 双栈)
  • HTTP/2、WebSocket 支持
  • 自动 SSL 证书关联
  • 已启用 HTTPS 的任意监听端口可自动识别明文 HTTP,并以 308 跳转到同域名、同端口的 HTTPS
  • 安全 Headers(HSTS 等)
  • 多站点管理
  • 直接 IP 访问拒绝:只允许域名访问,扫描器直接断开
  • 未知 Host 拒绝:同一监听端口下,未配置的域名/前缀不会落到第一个反代站点

🛡 登录防护 (Login Guard)

  • 监控 SSH(dropbear) 和 LuCI 网页 登录失败
  • 在「失败窗口」内累积达到阈值(默认 3 次/10 分钟)→ 自动用 nftables 封禁源 IP
  • 可配置封禁时长(1 小时 / 6 小时 / 12 小时(默认) / 24 小时 / 1 周 / 30 天)
  • LAN 私有段自动豁免(192.168.x / 10.x / 127.x / 172.16-31.x),可加额外白名单
  • 滑动时间窗口:超过窗口未再失败则计数自动清零
  • 持久化存储 /etc/minigate/login-guard/bans.txt,重启/固件升级后已生效封禁自动恢复
  • LuCI 页面实时显示封禁列表、剩余时间、归属地(结合归属地查询 API)
  • 失败计数列表默认显示 5 条,支持切换 5 / 20 / 30 条,并复用访客追踪归属地查询;显示最近访问时间并按最新时间排序
  • 支持网页一键解封、手动封禁、清空全部
  • 后台 watchdog 每 5 分钟自检 nft set,防 fw4 reload 后规则丢失

👁 访客追踪

  • 总览页面实时显示访客 IP、归属地、在线状态
  • 5 分钟内有访问记为「在线」(绿点),否则「离线」(灰点)
  • IP 归属地后端查询(ip9.com.cn → ip-api.com → pconline 多源回退)

软件更新

  • 登录 LuCI 后打开 服务 → minigate → 总览,自动检查 GitHub 最新正式版;不会自动下载或安装
  • 10 分钟内复用成功检查结果;「检查更新」可随时手动重新检查
  • 点击「一键更新」先显示本次 Release 更新内容,确认后才开始安装
  • 安装前校验 SHA-256 并备份程序和配置,安装或服务验证失败时尝试回滚
  • 总览标题区提供「卸载」入口;二次确认默认保留配置、证书、封禁记录和日志,也可主动选择彻底清理

安装方法

方法 1:IPK 安装(推荐,OpenWrt / ImmortalWrt opkg 版本)

从 Releases 下载:

minigate_2026.9.18-2_all.ipk

通过 LuCI 界面安装:

  1. 打开 LuCI → 系统 → 软件包
  2. 点击 上传软件包
  3. 选择 minigate_2026.9.18-2_all.ipk,点击安装

通过命令行安装:

cd /tmp
wget -O minigate_2026.9.18-2_all.ipk https://github.com/tpxcer/minigate/releases/download/v2026.9.18-2/minigate_2026.9.18-2_all.ipk
opkg update
opkg install /tmp/minigate_2026.9.18-2_all.ipk
rm -f /tmp/luci-indexcache /tmp/luci-modulecache 2>/dev/null
/etc/init.d/uhttpd restart
/etc/init.d/minigate restart

如果 LuCI 上传时报 Malformed package file,请确认下载的是 Release 里的 .ipk 资产,并确认该 .ipk 是 OpenWrt 原生 tar.gz 外层格式。ImmortalWrt 24.10.5 的新版 opkg 对格式更严格,Debian 风格 ar 外层 .ipk 会被判定为 malformed。

维护者打包

Release 用的 .ipk 请用仓库脚本生成,避免生成 Debian 风格 ar 外层包:

./scripts/build-ipk.sh

脚本会输出:

dist/minigate_2026.9.18-2_all.ipk

该文件外层是 OpenWrt/ImmortalWrt 24.10 兼容的 tar.gz,内部成员顺序为 debian-binary、control.tar.gz、data.tar.gz。

方法 2:SSH 一键安装(推荐,opkg / apk)

适用于使用 apk 或 opkg 的 OpenWrt / ImmortalWrt。请先确认 LuCI、Nginx SSL 等下列依赖可用,且软件源与当前固件和架构匹配;不要为了安装混用其他固件的软件源。

已经通过 SSH 登录软路由后,执行:

curl -fsSL https://raw.githubusercontent.com/tpxcer/minigate/main/scripts/install.sh | sh

这条短命令会自动获取 GitHub 最新正式版。远程脚本内部仍会创建随机临时目录,在写入系统前检查 OpenWrt 环境、下载前后核对 Release、校验源码包 SHA-256、检查压缩包路径和版本信息,然后调用正式安装器并刷新 LuCI。

如果系统只有 wget,可以执行:

wget -qO- https://raw.githubusercontent.com/tpxcer/minigate/main/scripts/install.sh | sh

方法 3:固定版本命令安装

需要指定并核对具体版本时,执行:

d="$(mktemp -d /tmp/minigate.XXXXXX)" && cd "$d" && wget -q https://github.com/tpxcer/minigate/releases/download/v2026.9.18-2/minigate-v2026.9.18-2-src.tar.gz && wget -q https://github.com/tpxcer/minigate/releases/download/v2026.9.18-2/SHA256SUMS && grep 'minigate-v2026.9.18-2-src.tar.gz$' SHA256SUMS | sha256sum -c - && tar xzf minigate-v2026.9.18-2-src.tar.gz && sh install.sh && /etc/init.d/uhttpd restart && /etc/init.d/minigate restart

其中 minigate.XXXXXX 是临时目录模板,系统会自动把六个 X 替换为随机字符,避免与已有目录重名。该命令会校验源码包的 SHA-256、保留现有 minigate 配置并重启 LuCI 与 minigate 服务。

源码安装直接写入程序文件,不向 opkg/apk 注册软件包;希望软件包列表中显示 minigate,请使用 IPK 或匹配 SDK 编译的 APK。旧名包用户先阅读下方「旧包名迁移」。

分步安装:

# 1. SSH 到路由器
ssh root@192.168.1.1

# 2. 在路由器上直接下载 Release 源码包
cd /tmp
wget -O minigate-src.tar.gz https://github.com/tpxcer/minigate/releases/download/v2026.9.18-2/minigate-v2026.9.18-2-src.tar.gz
wget -O minigate-SHA256SUMS https://github.com/tpxcer/minigate/releases/download/v2026.9.18-2/SHA256SUMS
awk '$2 == "minigate-v2026.9.18-2-src.tar.gz" {print $1 "  minigate-src.tar.gz"}' minigate-SHA256SUMS | sha256sum -c - || exit 1

# 3. 解压到独立目录并安装
mkdir -p /tmp/minigate-v2026.9.18-2
tar xzf minigate-src.tar.gz -C /tmp/minigate-v2026.9.18-2
cd /tmp/minigate-v2026.9.18-2
sh install.sh

# 4. 启动服务
/etc/init.d/minigate restart

# 5. 访问 LuCI → 服务 → minigate

方法 4:OpenWrt SDK 编译(适用所有版本,含 APK)

如果需要正规的 .apk 安装包,需使用 OpenWrt SDK 编译:

# 将源码放入 SDK 的 package 目录
cp -r minigate ~/openwrt/package/

# 编译
cd ~/openwrt
make package/minigate/compile V=s

# 生成的 ipk 或 apk 在 bin/packages/ 目录下

APK 的内部版本格式要求将同日序号 -N 写为 -rN,SDK 会自动转换;例如发布版 2026.9.14-1 对应 APK 版本 2026.9.14-r1。网页、Release 标签和 IPK 仍使用 2026.9.14-1,包名均为 minigate。


升级方法

LuCI 一键更新

进入 服务 → minigate → 总览 → 软件更新:

  1. 打开总览时自动检查,也可以点击「检查更新」立即重新检查
  2. 有新版本时点击「一键更新」,弹出该版本的更新内容
  3. 阅读后点击「确认更新」才开始;取消或关闭弹窗不会安装
  4. 页面显示下载、SHA-256 校验、备份、安装和服务验证进度,成功后刷新

更新器只接受 tpxcer/minigate 的固定 Release 资产,不接受自定义下载地址。自动检查只在打开 minigate 总览时触发,不会修改全局 LuCI 登录流程。确认后若最新版本已经变化,会停止并要求重新查看更新内容。更新前会备份程序和 /etc/config/minigate;安装或服务验证失败时尝试恢复原版本,失败详情见 /var/log/minigate-update.log。

v1.3.11 已有一键更新,但需先升级本版才具备自动检查和说明弹窗。本版保留旧名源码附件用于兼容它;旧版不能识别 2026.9.14-1 这样的后缀版本,应先升级 v2026.9.14 或使用本文命令手动安装。更早版本需手动安装。

源码升级(通用)

SSH 登录后执行上方「方法 2」的一条命令,保留原有配置并校验下载内容。网页一键更新也采用源码覆盖方式,不会同步修改 opkg/apk 数据库中的包名或版本;包管理器安装的用户建议继续使用对应软件包升级。

IPK 升级

opkg install --force-reinstall /tmp/minigate_2026.9.18-2_all.ipk
rm -f /tmp/luci-indexcache /tmp/luci-modulecache 2>/dev/null
/etc/init.d/minigate restart

配置文件 /etc/config/minigate 会自动保留。

旧包名迁移

如果 opkg list-installed 或 apk info 中仍有 luci-app-minigate,它是旧版内部包名,不等于新包 minigate。先备份 /etc/config/minigate 和 /etc/minigate/,并提前下载新安装包和旧版本回退包,再移除旧名包并安装新包。请在 LAN 或 SSH 连接下操作,迁移会短暂中断由 minigate 提供的反向代理。

新 IPK 声明旧包的兼容/替换关系,但不同固件的自动替换行为仍需实机验证;不要使用 --force-overwrite 混装,不要在新文件写入后再卸载旧名包,以免旧包把同路径的新文件一并删除。源码安装的用户若没有旧包数据库记录,无需迁移。


卸载方法

方式 1:LuCI 一键卸载(推荐)

进入 服务 → minigate → 总览,点击标题右侧的「卸载」:

  1. 阅读中断提示并确认卸载范围
  2. 默认不勾选数据清理,保留 /etc/config/minigate、证书、封禁记录和日志
  3. 只有确认不再使用时,才勾选「同时删除配置、证书、封禁记录和日志」
  4. 点击「确认卸载」后,页面会返回 LuCI 服务列表

卸载会立即停止 minigate 的 DDNS、证书续期、反向代理和登录防护。请从 LAN 或 SSH 登录 LuCI 后操作,避免通过 minigate 自身的公网反向代理入口执行。

方式 2:命令行保留配置卸载

适合以后还可能重装 minigate 的情况。此方式会删除 LuCI 页面、脚本和服务文件,但保留 /etc/config/minigate 以及 /etc/minigate/ 下的证书、封禁记录等数据。

/bin/sh /usr/lib/minigate/uninstall.sh 0

脚本会自动识别源码安装、opkg 和 apk,清理程序、LuCI 页面、cron、运行进程及临时状态,并刷新 LuCI。

如果你是早期版本,尚未包含 uninstall.sh,可以使用包管理器卸载:

/etc/init.d/minigate stop 2>/dev/null
/etc/init.d/minigate disable 2>/dev/null
opkg remove minigate 2>/dev/null || apk del minigate 2>/dev/null
/etc/init.d/uhttpd restart

源码安装且没有包管理器记录的旧版本,建议先覆盖安装最新版,再使用 LuCI 或上面的统一卸载脚本,不要手工复制不完整的删除清单。

方式 3:命令行彻底卸载

确认不再使用 minigate 时再执行。此方式会删除配置、证书记录、登录防护封禁记录和日志。

/bin/sh /usr/lib/minigate/uninstall.sh 1

使用指南

第一步:基础配置

  1. 进入 LuCI → 服务 → minigate
  2. 在「总览」页面开启 minigate
  3. 如需 IPv6 反代监听,开启「反向代理监听 IPv6」

第二步:配置 DDNS

  1. 切换到 DDNS 标签页
  2. 启用 DDNS,填入 Cloudflare Zone ID 和 API Token
  3. 设置域名,选择协议版本(IPv4 / IPv6 / 双栈)
  4. 保存并应用

第三步:签发 SSL 证书

  1. 切换到 SSL 证书 标签页,启用 ACME
  2. 先用 Staging 模式测试
  3. 点击「立即签发 / 续期」
  4. 成功后关闭 Staging 重新签发正式证书

第四步:配置反向代理

  1. 切换到 反向代理 标签页
  2. 添加规则,填写域名、目标地址和端口
  3. 启用 SSL(自动关联 ACME 证书)
  4. 如需输入 http://域名:监听端口 后自动进入 HTTPS,开启「HTTP 自动跳转」
  5. 保存并应用;minigate 会自动跟随每条 HTTPS 规则的监听端口,无需额外指定固定跳转端口

Cloudflare API Token 创建方法

  1. 登录 Cloudflare Dashboard
  2. 头像 → My Profile → API Tokens → Create Token
  3. 使用 Edit zone DNS 模板
  4. Zone Resources 选择你的域名
  5. 创建并复制 Token

安全特性

域名访问限制

安装后,反向代理自动拒绝直接使用 IP 地址访问的请求(返回 444 断开连接)。同时,每个监听端口都会生成 default_server 兜底规则,未配置的 Host / 子域名前缀不会落到同端口第一个反代站点。只有通过正确域名访问才能到达后端服务,这可以有效防止网络扫描器探测和域名串站。

访客追踪

总览页面实时显示所有通过反向代理访问的 IP 地址、归属地和在线状态,帮助你发现异常访问。


文件结构

minigate/
├── CONTRIBUTING.md                    # 贡献说明
├── LICENSE                            # MIT 许可证
├── Makefile                           # OpenWrt 编译配置
├── README.md
├── SECURITY.md                        # 安全报告策略
├── install.sh                         # 一键安装脚本(兼容 opkg/apk)
├── luasrc/
│   ├── controller/minigate.lua        # LuCI 路由控制器
│   ├── model/cbi/minigate/
│   │   ├── general.lua                # 总览(含访客追踪)
│   │   ├── ddns.lua                   # DDNS(IPv4/IPv6)
│   │   ├── acme.lua                   # ACME 证书
│   │   ├── proxy.lua                  # 反向代理
│   │   └── login_guard.lua            # 登录防护
│   └── view/minigate/log.htm          # 日志页面
└── root/
    ├── etc/config/minigate            # UCI 配置(含 login_guard 段)
    ├── etc/init.d/minigate            # 服务脚本(启停含 login_guard)
    └── usr/lib/minigate/
        ├── ddns.sh                    # DDNS(双栈)
        ├── acme.sh                    # 证书管理
        ├── proxy.sh                   # 反代(协议分流+IPv6+访问日志)
        ├── login_guard.sh             # 登录防护 watcher + CLI
        └── update.sh                  # GitHub Release 安全更新器

依赖

  • luci-base - LuCI Web 界面
  • nginx-ssl - Nginx(带 SSL 支持)
  • nginx-mod-stream - 在同一入口端口识别 HTTP 与 TLS
  • openssl-util - 证书工具
  • wget - 下载安装包和源码包
  • curl - HTTP 客户端
  • jsonfilter - JSON 解析
  • coreutils-stat - 登录防护读取计数文件更新时间
  • nftables - 登录防护用(OpenWrt 22.03+ / ImmortalWrt 默认已装)

更新日志

v2026.9.18-2

  • 修复 DDNS 历史写入与 LuCI 查询使用不同 UCI 节名称,导致“最近一天 IP 变化明细”无法找到记录的问题
  • 历史文件改用域名作为稳定标识;接口成功但暂无记录时,页面现在显示正常空状态,不再误报读取失败

v2026.9.18-1

  • 修复已有可用 OpenSSL CLI、但包管理器没有 openssl-util 安装记录时,一键更新仍尝试联网安装依赖并触发回滚的问题
  • 源码安装现在先执行 openssl version 验证能力;已可用则跳过包安装,缺失时仍正常安装 openssl-util

v2026.9.18

  • 动态 DNS 页面新增最近 24 小时 IP 变化明细,显示 IPv4/IPv6、开始时间、结束时间和持续时长
  • 历史只在 IP 实际变化时写入,稳定轮询不触碰历史文件,并保留跨越 24 小时边界的持续区间
  • 桌面端使用紧凑表格,手机端优先纵向展示 IP 和持续时间,适配深浅色主题
  • 修复源码安装未安装 openssl-util,导致 ACME 签发和续期缺少 OpenSSL CLI 的问题

v2026.9.14-4

  • 总览标题区新增「卸载」按钮,适配桌面、手机和深浅色主题
  • 卸载前必须二次确认,默认保留配置、证书、封禁记录和日志
  • 可主动选择彻底清理;统一兼容源码安装、opkg 和 apk 包安装

v2026.9.14-3

  • 新增 curl -fsSL https://raw.githubusercontent.com/tpxcer/minigate/main/scripts/install.sh | sh 短命令安装
  • 自动获取 latest Release,并在写入系统前校验 SHA-256、压缩包路径和版本信息
  • 下载前后核对 SHA256SUMS,避免发布切换期间混用不同版本文件
  • 保留固定版本长命令,方便指定版本和手工复核

v2026.9.14-2

  • 修复一键更新启动 Nginx、登录防护和 LuCI 服务后更新锁被长驻进程继承,导致后续「检查更新」只显示旧状态的问题
  • 更新流程在所有正常返回路径显式释放锁,启动长驻服务时同时关闭更新锁文件描述符

v2026.9.14-1

  • 修复子域名反向代理规则的 WebSocket 开关未生效问题
  • 子域规则现在会正确生成 Upgrade / Connection 头,支持 Open-Box 等 WebSocket 动态页面通过外网穿透显示连接和日志

v2026.9.14

  • 项目、GitHub 仓库和 OpenWrt 内部包名统一为 minigate
  • 改用北京时间发布日期版号,同一天后续版本依次追加 -1、-2
  • 打开总览自动检查更新,点击一键更新先显示本次内容并要求确认
  • 确认绑定具体版本,避免安装未看过说明的后续版本;修复成功状态重复刷新
  • 保留 v1.3.11 识别的旧名源码包副本,方便迁移到首个日期版

v1.3.11

  • HTTP 自动跳转改为跟随任意 HTTPS 监听端口,同一端口同时接受 HTTP 和 TLS;非 443 端口会保留端口号
  • 协议分流通过 PROXY protocol 保留真实访客 IP,未知 Host 仍直接拒绝
  • 总览新增「检查更新 / 一键更新」,固定 GitHub Release 来源并执行 SHA-256 校验、备份、服务验证和失败回滚

v1.3.10

  • 新增独立 HTTP 自动跳转入口,为已配置 HTTPS 的代理域名返回 308 跳转
  • 未配置 Host 继续返回 444,且禁止 HTTP 跳转端口与反向代理监听端口冲突
  • 公网部署时可将 TCP 80 映射到内部跳转端口(默认 2001),无需暴露 LuCI 的 80 端口

v1.3.9

  • 修复 FanchmWrt 等 LuCI 主题使用自身深色开关时,minigate 仍显示白色卡片和表格的问题
  • 页面背景、文字、边框和控件改为跟随 LuCI 主题变量,同时保留系统深色模式兼容

v1.3.8

  • 调整 LuCI 深色模式配色,降低高饱和强调色和卡片边框的突兀感
  • 统一总览与登录防护页面的深色背景、文字和状态颜色

v1.3.7

  • DDNS 同步会保留一条匹配当前 IP 的 A / AAAA 记录,并删除其余同名同类型重复记录,避免旧 IP 继续参与解析
  • Cloudflare 记录查询失败时不再误判为记录不存在,避免异常新建重复 DNS 记录

v1.3.6

  • 修复 ACME 重复签发/续期失败时,即使本地已有有效证书仍把 SSL/TLS 状态误标为 error 的问题
  • ACME 现在会在失败但已有证书未过期时保留 ok 状态,并记录最近错误,避免总览页误报证书失效
  • 修复 LuCI 手动签发证书、手动同步 DDNS 时命令参数未做安全引用的问题
  • 对总览页、证书页、登录防护页中的域名、证书、访问记录、归属地等动态文本做 HTML 转义

v1.3.5

  • 修复同一监听端口下未知 Host / 任意子域名前缀会落到第一个反代站点的问题;现在会生成 default_server 兜底规则并直接断开
  • HTTPS 反代端口自动生成 minigate 默认证书用于兜底拒绝站点,避免未知 SNI 复用真实站点
  • 修复通过 minigate 反向代理访问 LuCI 时,登录防护页面保存设置导致当前反代连接被断开的问题
  • 登录防护页面保存设置时改为轻量重载 minigate,不再完整重启反代 nginx
  • 登录防护「失败计数中」新增最近访问时间,并按最新访问时间排在最前
  • 修复 OpenWrt/ImmortalWrt 编译菜单中 luci-app-minigate 出现两条重复选项的问题
  • Release 自动构建流程改为中文更新说明,并自动刷新安装包附件

v1.3.4

  • 🎨 修复 LuCI 白天模式下总览和登录防护页面仍显示深色卡片/表格的问题
  • 🎨 保留黑夜模式原有深色显示效果,页面会跟随系统/浏览器配色切换

v1.3.3

  • 🐛 重新生成 OpenWrt opkg 更兼容的 .ipk ar 归档格式,修复部分系统仍提示 Malformed package file

v1.3.2

  • ✨ 登录防护「失败计数中」默认显示 5 条,支持 5 / 20 / 30 条下拉切换
  • ✨ 失败计数归属地查询复用总览「访问记录」的查询方式
  • 🐛 修复失败计数文件异常时 lg_status 刷新卡住的问题

v1.3.1

  • 🐛 修复手工安装脚本在 OpenWrt /bin/sh 下目录创建失败的问题
  • 🐛 重新生成标准 .ipk 安装包,避免 LuCI 提示 Malformed package file

v1.3.0

  • ⚡ 归属地查询增加 24 小时本地缓存
  • ⚡ 缩短外部归属地接口超时时间,减少页面等待

v1.2.0

  • ✨ 新增 登录防护 (Login Guard) —— SSH/LuCI 失败登录达到阈值自动封禁源 IP
  • ✨ LuCI 网页:实时封禁列表 + 归属地 + 一键解封/封禁/清空
  • ✨ 持久化封禁,重启/固件升级后自动恢复
  • ✨ Watchdog 自检 nftables 资源,防 fw4 reload 后失效
  • 🔧 install.sh 自动清理旧的独立 login-guard 部署(如有)+ 迁移 bans.txt

v1.1.0

  • ✨ DDNS 支持 IPv6 / 双栈模式(A + AAAA 记录)
  • ✨ 反向代理支持 IPv6 监听
  • ✨ 总览页面新增访客追踪(IP、归属地、在线状态)
  • ✨ 归属地后端查询(解决浏览器跨域问题)
  • ✨ 直接 IP 访问拒绝(防扫描器)
  • ✨ 同时兼容 opkg(IPK)和 apk(源码安装)
  • ✨ install.sh 自动适配 opkg/apk 环境
  • 🐛 目标地址支持 IPv6 格式

v1.0.0

  • 🎉 初始版本:Cloudflare DDNS、Let's Encrypt ACME、Nginx 反向代理

许可证

MIT License