AI prompts
base on 软硬路由公网神器,ipv6/ipv4 端口转发,反向代理,DDNS,WOL,ipv4 stun内网穿透,cron,acme,阿里云盘,ftp,webdav,filebrowser # Lucky(万吉)
## 注意:源码公布到1.4.10版本,后续暂无继续开源计划。
## 麻烦各位大佬发表lucky相关教程的时候不要加上“开源”神器,开源二字我不配,lucky后续也没开源打算。
1.开源并不等于安全,闭源并不等于不安全。闭源软件开发也会受到安全人员的审查。无论是开源还是闭源软件,都有可能会受到各种安全人员的审查和研究。安全人员可以使用各种技术手段来检测软件的安全性和漏洞。
2. 个人观点lucky这种应用类软件更多只是体力活,毫无技术含量,开源的优势在于透明度和社区参与,更多劳动力参与,但也可能导致功能过多、复杂度增加的问题。闭源软件的优势在于我想怎么写就怎么写,即使还未能从lucky中获利,lucky对我也有更深的特殊含义。
3. 我对lucky的规划还有一大部分未实现,不想被人当免费劳动力使唤,不解释太多,就这样。
## 如果您是第一次使用Lucky,请务必先访问 https://lucky666.cn ,并仔细阅读相关的文档,以获得必要的信息和答案。在这些文档中,您可以了解到Lucky的基本功能和特性,掌握Lucky的使用方法,以及解决常见的问题和疑惑。
<!-- TOC -->
- [Lucky(万吉)](#)
- [特性](#特性)
- [一键安装](#一键安装)
- [OpenwrtIPK包安装](#OpenwrtIPK包安装)
- [使用](#使用)
- [Docker中使用](#docker中使用)
- [后台界面](#后台界面)
- [开发编译](#开发编译)
- [更新日志](#更新日志)
- [使用注意与常见问题](#使用注意与常见问题)
<!-- /TOC -->
## 特性
Lucky最初是作为一个小工具,由开发者为自己的个人使用而开发,用于替代socat,在小米路由AX6000官方系统上实现公网IPv6转内网IPv4的功能。Lucky的设计始终致力于让更多的Linux嵌入式设备运行,以实现或集成个人用户常用功能,降低用户的硬件和软件操作学习成本,同时引导使用者注意网络安全。随着版本更新和网友反馈,Lucky不断迭代改进,拥有更多功能和更好的性能,成为用户值得信赖的工具。
Lucky 的核心程序完全采用 Golang 实现,具有高效、稳定、跨平台等优点。其后台前端则采用 Vue3.2 技术进行开发,具有良好的用户体验和响应速度。此外,Lucky 的管理后台采用前后端分离的架构,第三方开发者也可以自由使用OpenToken轻松调用Lucky的各种功能接口。
## 功能模块
目前已经实现/集成的主要功能模块有
- 端口转发
- 动态域名(DDNS)
- Web服务
- Stun内网穿透
- 网络唤醒
- 计划任务
- ACME自动证书
- 网络存储
### 端口转发
1. 主要用于实现公网 IPv6 转内网 IPv4 的 TCP/UDP 端口转发。
2. 支持界面化的管理转发规则,用户可以通过 web 后台轻松地进行规则的添加、删除、修改等操作。
3. 单条转发规则支持设置多个转发端口,这样可以实现多个内网服务端口的转发。
4. 提供了一键开关和定时开关功能,用户可以根据自己的需求设置转发规则的开启和关闭时间,还可以使用计划任务模块进行定时开关。
5. 单条规则支持黑白名单安全模式切换,用户可以根据需要选择使用白名单模式或黑名单模式。
6. 白名单模式可以让没有安全验证的内网服务端口稍微安全一点暴露到公网,提高服务可用性。
7. 实时记录最新的访问日志,方便用户了解转发情况。
8. 规则列表日志一目了然,用户可以方便地追踪转发异常,及时进行排查和处理。
### 动态域名(DDNS)
1. 支持接入多个不同的 DNS 服务商。
2. 支持全功能自定义回调(Callback),包括设置 BasicAuth,方便接入任意 DNS 服务商。
3. Webhook 支持自定义 headers。
4. 内置常用免费 DNS 服务商设置模板(每步、No-IP、Dynv6、Dynu),通过自定义回调进行快速接入,仅需修改相应用户密码或 token 即可一键填充。
5. 支持 阿里云,百度云,华为云,京东云,腾讯云,火山引擎,帝恩爱斯-DNS.LA,Cloudflare,deSEC,DNSPod.CN,DNSPod.COM,Dynadot,Dynv6,Freemyip ,GoDaddy,Name.com,NameSilo,Porkbun,Vercel等服务商。
### Web服务
1. 支持反向代理、重定向和 URL 跳转。
2. 支持 HTTP 基本认证。
3. 支持 IP 黑白名单模式。
4. 支持 UserAgent 黑白名单。
5. 规则日志清晰易懂,便于追踪异常。
6. 支持一键开关规则和定时开关规则。
### Stun内网穿透
1. 实现内网穿透,无需公网IPv4地址。
2. 适合于国内运营商级NAT1宽带网络.
### 网络唤醒
1. 支持远程控制唤醒和关机操作
2. 支持接入第三方物联网平台(点灯科技 巴法云),可通过各大平台的语音助手控制设备唤醒和关机.
### 计划任务
1. 不依赖 Linux 系统的 Cron,支持 Windows 系统。
2. 操作简便,可视化编辑。
3. 可操作控制 Lucky 框架内的其他模块开关。
### ACME自动证书
1. 支持 ACME 自动证书的申请和续签。
2. 支持 阿里云,百度云,华为云,京东云,腾讯云,火山引擎,帝恩爱斯-DNS.LA,Cloudflare,deSEC,DNSPod.CN,DNSPod.COM,Dynadot,Dynv6,Freemyip ,GoDaddy,Name.com,NameSilo,Porkbun,Vercel等服务商.
### 网络存储
1. 网络存储模块是一个应用范围广泛的模块,它提供了将本地存储、WebDAV和阿里云盘挂载到Lucky内部的各个文件类服务功能。
2. 通过网络存储模块,你可以将添加的存储挂载到Web服务的文件服务、WebDAV、FTP和FileBrowser模块,实现更加便捷的文件管理和访问。
## 一键安装
- [一键安装详看这里](https://github.com/gdy666/lucky-files)
## OpenwrtIPK包安装
- [Openwrt IPK包](https://github.com/gdy666/luci-app-lucky)
## 使用
- 默认后台管理地址 http://<运行设备IP>:16601
默认登录账号: 666
默认登录密码: 666
- 常规使用请用 -cd <配置文件夹路径> 指定配置文件夹的方式运行
```bash
#仅指定配置文件夹路径(如果配置文件夹不存在会自动创建),建议使用绝对路径
lucky -cd luckyconf
```
## Docker中使用
- 不挂载主机目录, 删除容器同时会删除配置
```bash
# host模式, 同时支持IPv4/IPv6, Liunx系统推荐
docker run -d --name lucky --restart=always --net=host gdy666/lucky
# 桥接模式, 只支持IPv4, Mac/Windows推荐,windows 不推荐使用docker版本
docker run -d --name lucky --restart=always -p 16601:16601 gdy666/lucky
```
- 在浏览器中打开`http://主机IP:16601`,修改你的配置,成功
- [可选] 挂载主机目录, 删除容器后配置不会丢失。可替换 `/root/luckyconf` 为主机目录, 配置文件夹为lucky
```bash
docker run -d --name lucky --restart=always --net=host -v /root/luckyconf:/goodluck gdy666/lucky
```
## 宝塔Docker安装
1. 安装宝塔面板 (9.2.0版本及以上),前往 [宝塔面板](https://www.bt.cn/new/download.html) 官网,选择正式版的脚本下载安装
2. 安装后登录宝塔面板,在菜单栏中点击 Docker ,首次进入会提示安装 Docker 服务,点击立即安装,按提示完成安装
3. 安装完成后在应用商店中找到 lucky ,点击安装,配置基本选项 即可完成安装
## 后台界面
![规则设置](./previews/relayruleset.png)
![规则列表](./previews/relayrules.png)
![](./previews/whitelistset.png)
![](./previews/whitelist.png)
#### 动态域名服务
![](./previews/ddnslist.png)
![](./previews/iphistroy.png)
![](./previews/webhookhistroy.png)
![](./previews/domainsync.png)
#### Http反向代理
![](./previews/reverseproxy.png)
#### 网络唤醒
![](./previews/wol001.png)
![](./previews/wol002.png)
#开发编译
```bash
go build -v -tags "adminweb nomsgpack" -ldflags="-s -w"
```
# 更新日志
2024-12-01 v2.14.0
1. 网络唤醒
修复了一个 bug,该 bug 导致在服务端手动添加设备记录时,客户端首次使用时连接失败。
2. IP地址库
新增对纯真新版地址库(czdb 格式)的支持。请自行通过纯真官网获取。
3. 点灯物联
优化核心代码,修复小爱同学语音控制回复异常的问题。
4. DDNS
4.1 腾讯云接口不再限制最小 TTL 为 600。
4.2 修复了 Dynadot 更新主域名失败的问题。
5. SSL
ACME 证书 同一组域名可同时使用 Let's Encrypt、ZeroSSL 和 FreeSSL 等多个机构颁发的证书,Lucky 将自动调用有效期最长的证书。
6. 计划任务 点灯组件绑定数量限制放宽到10个
7. 增加隐私防护策略,防止fofa根据固定图标hash值搜索出lucky后台
8. 增加安全入口设置检查和默认账号密码检查机制,不通过检查无法使用每个功能模块,可在设置页面禁用检查。登陆连续错误最大次数减少到30次 从2.14.0版本开始,在默认配置中,外网访问开关处于关闭状态。然而,在 lucky_base.lkcf 配置初始化后的十分钟内,系统允许外网访问。如果在这十分钟内执行了配置保存操作,则外网访问开关的设置将优先生效。如果错过了这个时间,您需要通过删除 lucky_base.lkcf 配置文件并重启 Lucky 进程的方式,使 lucky_base.lkcf 配置再次初始化。 如果未设置安全入口或未修改默认账号密码,将无法使用所有功能模块。如果您了解相关风险并确实不想进行设置,请在设置面板中启用禁用安全入口设置检查和禁用默认账号密码检查开关(此两个选项会闪烁提示)。
9. 其他优化
2024-11-22 v2.13.8
1. Web服务
1.1 修复邮件发送服务对 465 端口的支持
1.2 优化邮件发送服务调试的前端界面
1.3 为了防止新手随意修改设置,子规则网络设置、自动 404 拉黑以及基本认证连续错误自动拉黑选项仅在定制模式下显示。
2. ACME
2.1 修复 FreeSSL 新版接口无法申请证书的问题
3. 计划任务
3.1 增加备份配置并发送到指定邮箱
3.2 放宽计划任务对点灯组件数量的限制至 8 个,同时支持第三方物联网平台对接 3 个设备。
4. 其他优化
2024-11-17 v2.13.7
1. DDNS
1.1 修复了在双栈任务下获取 IP 地址格式错误的问题。
2. 计划任务
2.1 计划任务现支持接入点灯物联(支持语音控制和组件控制)及巴法云,当前支持三个计划任务对接物联网平台。
2.2 修复了计划任务修改执行周期后未生效的问题。
2.3 计划任务新增支持操作 Lucky 管理后台外网访问开关类型。
2.4 通过计划任务实现点灯科技开关组件与 Lucky 管理后台外网访问开关的双向绑定。
3. Web 服务
3.1新增邮件发送功能,详细信息请查阅官网文档。 https://6.666666.host:66/docs/modules/web#%E9%82%AE%E4%BB%B6%E5%8F%91%E9%80%81
4. 其它优化
2024-11-03 v2.13.5
1. 修复了 DDNS 在个别情况下 IP 地址变动后未能及时更新的问题。
2. 修复了在特定架构下可能导致 UDP 端口转发崩溃的 bug。
3. 网络唤醒功能增强,点灯平台新增组件绑定支持。绑定组件后,可在点灯 APP 中查询并控制开关机状态。
4. 其他优化
[更多日志请查看](https://lucky666.cn/docs/category/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97)
。
", Assign "at most 3 tags" to the expected json: {"id":"1456","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"