Files
zonat/cmd/node/main.go
T

63 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// zonat 节点入口:TCP 桥接监听 + 隧道注册表 + 纯 TCP 隧道监听。
// 无管理 API、无数据库;隧道由 agent 经桥接控制流注册。
// agent 登录用 JWT 校验(HS256);token 正式部署由 cloud 签发,
// 手工/测试场景可用 -print-token 现场签发。
package main
import (
"flag"
"fmt"
"log/slog"
"os"
"os/signal"
"syscall"
"time"
"git.zeroonesoft.cn/golib/zonat/internal/node"
)
func main() {
addr := flag.String("addr", ":5212", "桥接监听地址")
tunnelBind := flag.String("tunnel-bind", "0.0.0.0", "隧道监听绑定地址")
jwtSecret := flag.String("jwt-secret", "", "agent 登录 JWT 校验密钥(HS256)")
sweep := flag.Duration("sweep", 30*time.Second, "TTL 清扫间隔")
// 便捷签发:node -jwt-secret s3cret -print-token -agent a1 -ttl 24h
printToken := flag.Bool("print-token", false, "用 -jwt-secret 签发一张 agent 登录 token 后退出")
tokenAgent := flag.String("agent", "", "print-token 时写入 agentId claim")
tokenTTL := flag.Duration("ttl", 24*time.Hour, "print-token 签发的有效期")
flag.Parse()
if *printToken {
if *jwtSecret == "" || *tokenTTL <= 0 {
slog.Error("print-token 需要 -jwt-secret 与正的 -ttl")
os.Exit(1)
}
tok, err := node.SignToken(*jwtSecret, *tokenAgent, *tokenTTL)
if err != nil {
slog.Error("签发失败", "err", err.Error())
os.Exit(1)
}
fmt.Println(tok)
return
}
if *jwtSecret == "" {
slog.Error("缺少 -jwt-secret(agent 登录 JWT 校验密钥)")
os.Exit(1)
}
n := node.New()
n.JwtSecret = *jwtSecret
n.BindTunnel = *tunnelBind
n.SweepInterval = *sweep
if err := n.Start(*addr); err != nil {
slog.Error("节点启动失败", "err", err.Error())
os.Exit(1)
}
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGTERM)
<-quit
n.Stop()
}