Files
tslink/core/tsnet.go
T
nullcat e60a6b76c7 feat(utils): implement MagicDNS suffix handling and normalization for dst_addr
- Added support for extracting and setting MagicDNS suffix.
- Normalized `dst_addr` using the MagicDNS suffix to simplify configuration.
- Improved logging for normalized and failed addresses during `connect` rule processing.
2026-06-01 16:07:23 +08:00

83 lines
2.1 KiB
Go

package core
import (
"context"
fmt2 "fmt"
"log/slog"
"time"
"tailscale.com/ipn"
"tailscale.com/tsnet"
)
func InitTsNet(ctx context.Context, cfg *Core, logger *slog.Logger, withDebugLog bool) (*tsnet.Server, error) {
dbgLogger := func(fmt string, args ...interface{}) {}
if withDebugLog {
logger.Warn("Tsnet debug log activated")
dbgLogger = func(fmt string, args ...interface{}) {
logger.With(slog.String("from", "tsnet")).Debug(fmt2.Sprintf(fmt, args...))
}
}
srv := &tsnet.Server{
Hostname: "tslink-" + cfg.Hostname,
AuthKey: cfg.AuthKey,
Ephemeral: cfg.Ephemeral,
Logf: dbgLogger,
UserLogf: func(fmt string, args ...interface{}) {
logger.With(slog.String("from", "tsnet")).Info(fmt2.Sprintf(fmt, args...))
},
RunWebClient: true,
}
if cfg.ControlURL != "" {
srv.ControlURL = cfg.ControlURL
}
logger.Debug("starting tsnet server")
if err := srv.Start(); err != nil {
logger.With(slog.String("error", err.Error())).Error("starting tsnet server failed")
return nil, err
}
cnclCtx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
status, err := srv.Up(cnclCtx)
if err != nil {
logger.With(slog.String("error", err.Error())).Error("bring up tsnet server failed")
return nil, err
}
for _, ip := range status.TailscaleIPs {
logger.With(slog.String("ip", ip.String())).Info("ip got from tsnet")
}
rawSuffix, err := GetMagicDNSSuffixFromStatus(status)
if err != nil {
logger.Debug("failed to extract MagicDNS suffix", slog.String("error", err.Error()))
} else {
SetMagicDNSSuffix(rawSuffix)
logger.Info("MagicDNS suffix extracted", slog.String("suffix", rawSuffix))
}
if cfg.AcceptRoutes {
lc, err := srv.LocalClient()
if err != nil {
logger.With(slog.String("error", err.Error())).Error("error from getting local client")
} else {
_, err = lc.EditPrefs(ctx, &ipn.MaskedPrefs{
Prefs: ipn.Prefs{RouteAll: true},
RouteAllSet: true,
})
if err != nil {
logger.With(slog.String("error", err.Error())).Error("error from editing prefs")
} else {
logger.Debug("subnet route accepted")
}
}
}
return srv, nil
}