seamys/luci-app-netlock
GitHub: seamys/luci-app-netlock
一个 OpenWrt LuCI 插件,通过检测锚点设备是否在线来自动控制网络的互联网访问开关。
Stars: 0 | Forks: 0
# luci-app-netlock
[](https://github.com/seamys/luci-app-netlock/actions/workflows/test.yml)
[](https://github.com/seamys/luci-app-netlock/releases/latest)
[](https://opensource.org/licenses/MIT)
[](https://openwrt.org)
[](https://github.com/openwrt/luci)
[](https://www.shellcheck.net/)
[](https://nftables.org)
兼容 OpenClash TProxy — 拦截钩子位于 nftables raw/prerouting 优先级 -300 处,在 TProxy 重定向之前执行。
## 功能
- 🔒 **基于存在的网络控制** — 三级 MAC 检测:AP 关联 → neighbor table → ping
- 🛡️ **nftables 原生拦截** — 独立的 `inet netlock` 表,不干扰 fw4
- ⏱️ **优雅的宽限期** — 可配置的拦截延迟,避免因手机休眠导致的误判
- 🖥️ **LuCI Web 界面** — 实时仪表板 + 设置页面位于 `服务 → NetLock`
- 🔄 **procd 集成** — 开机自启,崩溃自动重启,并在 `uci commit` 时热重载
- 📱 **多锚点支持** — 支持多个 `target_mac` 条目;检测到任意一个即开放网络
- 🌐 **i18n 就绪** — 英文为基础并附带简体中文翻译
## 快速安装
```
ROUTER=root@192.168.1.1
scp src/bin/netlock $ROUTER:/usr/sbin/
scp src/rpcd/netlock $ROUTER:/usr/libexec/rpcd/
scp src/init/netlock $ROUTER:/etc/init.d/
scp src/config/netlock $ROUTER:/etc/config/
ssh $ROUTER 'mkdir -p /www/luci-static/resources/view/netlock'
scp src/view/*.js $ROUTER:/www/luci-static/resources/view/netlock/
scp src/share/menu.d/luci-app-netlock.json $ROUTER:/usr/share/luci/menu.d/
scp src/share/acl.d/luci-app-netlock.json $ROUTER:/usr/share/rpcd/acl.d/
ssh $ROUTER 'chmod +x /usr/sbin/netlock /usr/libexec/rpcd/netlock /etc/init.d/netlock && \
/etc/init.d/netlock enable && /etc/init.d/rpcd reload && \
rm -rf /tmp/luci-*cache* && /etc/init.d/netlock start'
```
然后通过 LuCI → 服务 → NetLock → 设置 进行配置,或者使用 CLI:
```
uci add_list netlock.global.target_mac='aa:bb:cc:dd:ee:ff'
uci commit netlock
/etc/init.d/netlock reload
```
## 项目结构
```
├── Makefile # OpenWrt SDK build definition
├── AGENTS.md # Agent instructions & conventions
├── README.md # This file
├── src/
│ ├── bin/netlock # Main daemon (presence detection + nft blocking)
│ ├── rpcd/netlock # rpcd backend (ubus: status, clients)
│ ├── init/netlock # procd init script
│ ├── config/netlock # UCI default config
│ ├── uci-defaults/50-luci-netlock # First-boot setup
│ ├── view/
│ │ ├── overview.js # LuCI dashboard (real-time status)
│ │ └── settings.js # LuCI settings form
│ ├── share/
│ │ ├── menu.d/ # LuCI menu registration
│ │ └── acl.d/ # rpcd ACL definitions
│ └── i18n/
│ ├── templates/netlock.pot # Translation template
│ └── zh_Hans/netlock.po # Chinese Simplified
├── tests/
│ ├── framework.sh # Test assertion helpers
│ ├── mocks.sh # Mock UCI/nft/iwinfo for testing
│ ├── test_presence.sh # Presence detection tests
│ ├── test_firewall.sh # Firewall rule tests
│ ├── test_config.sh # Config loading tests
│ └── run_all.sh # Test runner
└── docs/
├── 01-Installation.md
├── 02-Configuration.md
├── 03-Usage.md
└── 04-Troubleshooting.md
```
## 测试
```
bash tests/run_all.sh # Run all tests
bash tests/test_presence.sh # Run single suite
```
## 文档
请查看 [docs/](docs/README.md) 获取详细的安装、配置、使用和故障排除指南。
## 许可证
MIT
为 OpenWrt 而构建 · 由 nftables 驱动 · 用 ☕ 制作
标签:Cutter, LuCI, nftables, OpenWrt, Shell, 网络控制, 设备存在检测