lucky,集端口转发,动态域名(DDNS),Web服务,Stun内网穿透,网络唤醒,计划任务,ACME自动证,,网络存储 一体的工具

简介

Lucky 最初是作为一个小工具,由开发者为自己的个人使用而开发,用于替代 socat,在小米路由 AX6000 官方系统上实现公网 IPv6 转内网 IPv4 的功能。Lucky 的设计始终致力于让更多的 Linux 嵌入式设备运行,以实现或集成个人用户常用功能,降低用户的硬件和软件操作学习成本,同时引导使用者注意网络安全。随着版本更新和网友反馈,Lucky 不断迭代改进,拥有更多功能和更好的性能,成为用户值得信赖的工具。

Lucky 的核心程序完全采用 Golang 实现,具有高效、稳定、跨平台等优点。其后台前端则采用 Vue3.2 技术进行开发,具有良好的用户体验和响应速度。此外,Lucky 的管理后台采用前后端分离的架构,第三方开发者也可以自由使用 OpenToken 轻松调用 Lucky 的各种功能接口。

官网:https://lucky666.cn/docs/intro/

功能模块

目前已经实现/集成的主要功能模块有

  • 端口转发
  • 动态域名(DDNS)
  • Web 服务
  • Stun 内网穿透
  • 网络唤醒
  • 计划任务
  • ACME 自动证书
  • 网络存储

安装

bash

1
URL="http://release.66666.host"; curl -o /tmp/install.sh "$URL/install.sh" && sh /tmp/install.sh "$URL"

docker

1
2
3
4
5
6
7
docker run -d \
  --name lucky \
  --network host \
  --restart always \
  -v 容器外持久化路径:/app/conf \
  -v /var/run/docker.sock:/var/run/docker.sock \
  gdy666/lucky:v2

docker compose

1
2
3
4
5
6
7
8
9
    services:
      lucky:
        image: gdy666/lucky:v2
        container_name: lucky
        volumes:
          - 容器外持久化路径:/app/conf
          - /var/run/docker.sock:/var/run/docker.sock
        network_mode: host
        restart: always

默认登录信息:

1
2
3
默认登陆地址 : http://\{IP地址\}:16601
默认账号:666
默认密码:666

域名服务

规则

重定向:https://{host}:{port}

内网穿透

stun

  • 如果光猫是桥接模式,在路由器开启 dmz,指向 lucky 所在的 IP
  • 如果光猫是自动获取 IP,在光猫设置 dmz,指向 lucky 所在的 IP

lucky 开启 stun:

在 Lucky 左侧菜单找到“内网穿透”,再次找到“stun 内网穿透”(lucky 老版本直接是“stun 内网穿透”),在进行 Nat 类型检测,多测几个,如果是“NAT1(Full Cone,全锥形)”表示可以。

添加穿透规则:

1
2
3
4
5
6
7
8
规则名称:可空
操作类型:简易模式
穿透类型:IPv4-TCP
穿透通道本地端口:0 表示随机端口
防火墙自动放心:开
目标地址:需要穿透的机器IP地址
目标端口:需要穿透的机器服务的端口
Webhook:可开可关(固定地址访问用)

固定地址访问:cloudflare 配置 worker 实现重定向:

新建 worker:添加为如下代码,需要修改为自己的域名和端口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 配置参数
const CONFIG = {
    // 需要重定向的域名
    sourceDomain: 's.a.com',
    // 重定向后的域名
    targetDomain: 's.a.com',
    // 目标端口号
    targetPort: '23525'
  };

  addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request));
  });

  async function handleRequest(request) {
    const url = new URL(request.url);
    const hostname = url.hostname;

    // 只要 hostname 中包含 sourceDomain,就将 sourceDomain 替换为 targetDomain,并指定 port
    if (hostname.includes(CONFIG.sourceDomain)) {
      const newHost = hostname.replace(CONFIG.sourceDomain, CONFIG.targetDomain);
      const targetUrl = `https://${newHost}:${CONFIG.targetPort}${url.pathname}${url.search}`;

      // 返回 302 临时重定向,如果有需要,可以改成 307 重定向
      return Response.redirect(targetUrl, 302);
    }
    // 如果不是目标域名,则返回 404
    return new Response('Not Found', { status: 404 });
  }
  • 创建编辑 worker 脚本的 API token
  • 进入 Cloudflare worker,找到 Account ID,记录下来

回到 lucky,将 webhook 开启,参数参考以下:

  • 接口地址
1
https://api.cloudflare.com/client/v4/accounts/账户ID/workers/scripts/redirect

请求方法

1
PUT

请求头

1
2
Authorization: Bearer <workers的API密钥>
Content-Type: application/javascript

请求体

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 配置参数
const CONFIG = {
    // 需要重定向的域名
    sourceDomain: 'a.com',
    // 重定向后的域名
    targetDomain: 's.a.com',
    // 目标端口号
    targetPort: '#{port}'
  };
  
  addEventListener('fetch', event => {
    event.respondWith(handleRequest(event.request));
  });
  
  async function handleRequest(request) {
    const url = new URL(request.url);
    const hostname = url.hostname;
  
    // 只要 hostname 中包含 sourceDomain,就将 sourceDomain 替换为 targetDomain,并指定 port
    if (hostname.includes(CONFIG.sourceDomain)) {
      const newHost = hostname.replace(CONFIG.sourceDomain, CONFIG.targetDomain);
      const targetUrl = `https://${newHost}:${CONFIG.targetPort}${url.pathname}${url.search}`;
  
      // 返回 302 临时重定向,如果有需要,可以改成 307 重定向
      return Response.redirect(targetUrl, 302);
    }
    // 如果不是目标域名,则返回 404
    return new Response('Not Found', { status: 404 });
  }

接口调用成功包含的字符串

1
"success": true
页面浏览量Loading
网站总访客数:Loading
网站总访问量:Loading

-->