一个类似 Lucky 的轻量级 OpenWrt 应用,提供四大核心功能:DDNS、SSL 证书、反向代理、登录防护。
当前版本:v1.3.5
OpenWrt 用户请从 Releases 下载
luci-app-minigate_1.3.5-1_all.ipk。不要把 GitHub 自动生成的Source code (zip)/Source code (tar.gz)当安装包上传到 LuCI。
- Cloudflare DNS API 支持
- IPv4 / IPv6 / 双栈 模式,同时更新 A 和 AAAA 记录
- 自动检测 WAN IP 变化并更新 DNS 记录
- 支持从网络接口或外部 URL 获取 IP
- 可配置检查间隔和强制更新间隔
- 一键手动触发更新
- Let's Encrypt 自动证书签发
- 使用 DNS-01 挑战方式(Cloudflare)
- 支持 ECC / RSA 多种密钥类型
- 自动续期(通过 cron 每天检查)
- Staging 模式用于测试
- 基于 Nginx 的轻量反向代理
- IPv6 监听支持(listen [::]:port 双栈)
- HTTP/2、WebSocket 支持
- 自动 SSL 证书关联
- 安全 Headers(HSTS 等)
- 多站点管理
- 直接 IP 访问拒绝:只允许域名访问,扫描器直接断开
- 未知 Host 拒绝:同一监听端口下,未配置的域名/前缀不会落到第一个反代站点
- 监控 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 多源回退)
从 Releases 下载:
luci-app-minigate_1.3.5-1_all.ipk
通过 LuCI 界面安装:
- 打开 LuCI → 系统 → 软件包
- 点击 上传软件包
- 选择
luci-app-minigate_1.3.5-1_all.ipk,点击安装
通过命令行安装:
cd /tmp
wget -O luci-app-minigate_1.3.5-1_all.ipk https://github.com/tpxcer/luci-app-minigate/releases/download/v1.3.5/luci-app-minigate_1.3.5-1_all.ipk
opkg update
opkg install /tmp/luci-app-minigate_1.3.5-1_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/luci-app-minigate_1.3.5-1_all.ipk
该文件外层是 OpenWrt/ImmortalWrt 24.10 兼容的 tar.gz,内部成员顺序为 debian-binary、control.tar.gz、data.tar.gz。
适用于 OpenWrt 25.xx(apk)、OpenWrt 24.xx 及以下(opkg) 以及 ImmortalWrt。
# 1. 下载源码包到电脑,然后上传到路由器
scp luci-app-minigate-v1.3.5-src.tar.gz root@192.168.1.1:/tmp/
# 2. SSH 到路由器
ssh root@192.168.1.1
# 3. 解压并安装
cd /tmp
tar xzf luci-app-minigate-v1.3.5-src.tar.gz
cd luci-app-minigate-v1.3.5
sh install.sh
# 4. 启动服务
/etc/init.d/minigate restart
# 5. 访问 LuCI → 服务 → MiniGate如果需要正规的 .apk 安装包,需使用 OpenWrt SDK 编译:
# 将源码放入 SDK 的 package 目录
cp -r luci-app-minigate ~/openwrt/package/
# 编译
cd ~/openwrt
make package/luci-app-minigate/compile V=s
# 生成的 ipk 或 apk 在 bin/packages/ 目录下scp luci-app-minigate-v1.3.5-src.tar.gz root@192.168.1.1:/tmp/
ssh root@192.168.1.1
cd /tmp && tar xzf luci-app-minigate-v1.3.5-src.tar.gz
cd luci-app-minigate-v1.3.5
sh install.sh
/etc/init.d/minigate restartopkg install --force-reinstall /tmp/luci-app-minigate_1.3.5-1_all.ipk
rm -f /tmp/luci-indexcache /tmp/luci-modulecache 2>/dev/null
/etc/init.d/minigate restart配置文件 /etc/config/minigate 会自动保留。
适合以后还可能重装 MiniGate 的情况。此方式会删除 LuCI 页面、脚本和服务文件,但保留 /etc/config/minigate 以及 /etc/minigate/ 下的证书、封禁记录等数据。
/etc/init.d/minigate stop 2>/dev/null
/etc/init.d/minigate disable 2>/dev/null
# opkg 系统
opkg remove luci-app-minigate --force-depends 2>/dev/null
# apk 系统(OpenWrt 25.xx / ImmortalWrt 25.xx)
apk del luci-app-minigate 2>/dev/null
/etc/init.d/uhttpd restart如果你是早期源码安装,包管理器没有记录这个软件包,可以按下面这些明确路径逐项清理程序文件:
/etc/init.d/minigate stop 2>/dev/null
/etc/init.d/minigate disable 2>/dev/null
rm -f /etc/init.d/minigate
rm -f /usr/lib/lua/luci/controller/minigate.lua
rm -f /usr/lib/lua/luci/model/cbi/minigate/general.lua
rm -f /usr/lib/lua/luci/model/cbi/minigate/ddns.lua
rm -f /usr/lib/lua/luci/model/cbi/minigate/acme.lua
rm -f /usr/lib/lua/luci/model/cbi/minigate/proxy.lua
rm -f /usr/lib/lua/luci/model/cbi/minigate/login_guard.lua
rm -f /usr/lib/lua/luci/view/minigate/log.htm
rm -f /usr/lib/minigate/ddns.sh
rm -f /usr/lib/minigate/acme.sh
rm -f /usr/lib/minigate/proxy.sh
rm -f /usr/lib/minigate/geofence.sh
rm -f /usr/lib/minigate/login_guard.sh
rm -f /usr/lib/opkg/info/luci-app-minigate.control
rm -f /usr/lib/opkg/info/luci-app-minigate.list
rm -f /usr/lib/opkg/info/luci-app-minigate.postinst
rm -f /usr/lib/opkg/info/luci-app-minigate.prerm
rm -f /tmp/luci-indexcache /tmp/luci-modulecache 2>/dev/null
/etc/init.d/uhttpd restart确认不再使用 MiniGate 时再执行。此方式会删除配置、证书记录、登录防护封禁记录和日志。
/etc/init.d/minigate stop 2>/dev/null
/etc/init.d/minigate disable 2>/dev/null
opkg remove luci-app-minigate --force-depends 2>/dev/null
apk del luci-app-minigate 2>/dev/null
rm -f /etc/config/minigate
rm -f /etc/minigate/login-guard/bans.txt
rm -f /var/log/minigate-ddns.log
rm -f /var/log/minigate-acme.log
rm -f /var/log/minigate-proxy.log
rm -f /var/log/minigate-login-guard.log
rm -f /var/log/minigate-access.log
sed -i '/minigate/d' /etc/crontabs/root 2>/dev/null
/etc/init.d/cron restart 2>/dev/null
rm -f /tmp/luci-indexcache /tmp/luci-modulecache 2>/dev/null
/etc/init.d/uhttpd restart说明:如果目录里还有文件,
rmdir不会删除目录;这是刻意保守处理,避免误删证书或其他数据。需要彻底删除空目录时,可确认内容后再执行:rmdir /etc/minigate/login-guard /etc/minigate 2>/dev/null。
- 进入 LuCI → 服务 → MiniGate
- 在「总览」页面开启 MiniGate
- 如需 IPv6 反代监听,开启「反向代理监听 IPv6」
- 切换到 DDNS 标签页
- 启用 DDNS,填入 Cloudflare Zone ID 和 API Token
- 设置域名,选择协议版本(IPv4 / IPv6 / 双栈)
- 保存并应用
- 切换到 SSL 证书 标签页,启用 ACME
- 先用 Staging 模式测试
- 点击「立即签发 / 续期」
- 成功后关闭 Staging 重新签发正式证书
- 切换到 反向代理 标签页
- 添加规则,填写域名、目标地址和端口
- 启用 SSL(自动关联 ACME 证书)
- 保存并应用
- 登录 Cloudflare Dashboard
- 头像 → My Profile → API Tokens → Create Token
- 使用 Edit zone DNS 模板
- Zone Resources 选择你的域名
- 创建并复制 Token
安装后,反向代理自动拒绝直接使用 IP 地址访问的请求(返回 444 断开连接)。同时,每个监听端口都会生成 default_server 兜底规则,未配置的 Host / 子域名前缀不会落到同端口第一个反代站点。只有通过正确域名访问才能到达后端服务,这可以有效防止网络扫描器探测和域名串站。
总览页面实时显示所有通过反向代理访问的 IP 地址、归属地和在线状态,帮助你发现异常访问。
luci-app-minigate/
├── Makefile # OpenWrt 编译配置
├── README.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+访问日志+IP拒绝)
└── login_guard.sh # 登录防护 watcher + CLI
luci-base- LuCI Web 界面nginx-ssl- Nginx(带 SSL 支持)openssl-util- 证书工具wget- 下载安装包和源码包curl- HTTP 客户端jsonfilter- JSON 解析coreutils-stat- 登录防护读取计数文件更新时间nftables- 登录防护用(OpenWrt 22.03+ / ImmortalWrt 默认已装)
- 修复同一监听端口下未知 Host / 任意子域名前缀会落到第一个反代站点的问题;现在会生成
default_server兜底规则并直接断开 - HTTPS 反代端口自动生成 MiniGate 默认证书用于兜底拒绝站点,避免未知 SNI 复用真实站点
- 修复通过 MiniGate 反向代理访问 LuCI 时,登录防护页面保存设置导致当前反代连接被断开的问题
- 登录防护页面保存设置时改为轻量重载 MiniGate,不再完整重启反代 nginx
- 登录防护「失败计数中」新增最近访问时间,并按最新访问时间排在最前
- 修复 OpenWrt/ImmortalWrt 编译菜单中
luci-app-minigate出现两条重复选项的问题 - Release 自动构建流程改为中文更新说明,并自动刷新安装包附件
- 🎨 修复 LuCI 白天模式下总览和登录防护页面仍显示深色卡片/表格的问题
- 🎨 保留黑夜模式原有深色显示效果,页面会跟随系统/浏览器配色切换
- 🐛 重新生成 OpenWrt opkg 更兼容的
.ipkar 归档格式,修复部分系统仍提示Malformed package file
- ✨ 登录防护「失败计数中」默认显示 5 条,支持 5 / 20 / 30 条下拉切换
- ✨ 失败计数归属地查询复用总览「访问记录」的查询方式
- 🐛 修复失败计数文件异常时
lg_status刷新卡住的问题
- 🐛 修复手工安装脚本在 OpenWrt
/bin/sh下目录创建失败的问题 - 🐛 重新生成标准
.ipk安装包,避免 LuCI 提示Malformed package file
- ⚡ 归属地查询增加 24 小时本地缓存
- ⚡ 缩短外部归属地接口超时时间,减少页面等待
- ✨ 新增 登录防护 (Login Guard) —— SSH/LuCI 失败登录达到阈值自动封禁源 IP
- ✨ LuCI 网页:实时封禁列表 + 归属地 + 一键解封/封禁/清空
- ✨ 持久化封禁,重启/固件升级后自动恢复
- ✨ Watchdog 自检 nftables 资源,防 fw4 reload 后失效
- 🔧 install.sh 自动清理旧的独立 login-guard 部署(如有)+ 迁移 bans.txt
- ✨ DDNS 支持 IPv6 / 双栈模式(A + AAAA 记录)
- ✨ 反向代理支持 IPv6 监听
- ✨ 总览页面新增访客追踪(IP、归属地、在线状态)
- ✨ 归属地后端查询(解决浏览器跨域问题)
- ✨ 直接 IP 访问拒绝(防扫描器)
- ✨ 同时兼容 opkg(IPK)和 apk(源码安装)
- ✨ install.sh 自动适配 opkg/apk 环境
- 🐛 目标地址支持 IPv6 格式
- 🎉 初始版本:Cloudflare DDNS、Let's Encrypt ACME、Nginx 反向代理
MIT License