client

package
v1.0.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 11, 2026 License: MIT Imports: 10 Imported by: 0

README

Client - 本地 Service API

管理本地 ZeroTier 节点(localhost:9993)。

安装

import "github.com/topic-kit/sko-toolkit/zerotier/client"

快速开始

ctx := context.Background()
c := client.New() // 自动读取系统 token

status, _ := c.Status(ctx)
fmt.Println(status.Address, status.Online)

⚠️ v1.0.0 起所有方法都接受 context.Context 作为首参。

配置选项

c := client.New(
    client.WithBaseURL("http://localhost:9993"),
    client.WithToken("your-token"),
    client.WithTokenFile("/path/to/authtoken.secret"),
    client.WithTimeout(30 * time.Second),
)

Token 位置

系统 路径
Windows C:\ProgramData\ZeroTier\One\authtoken.secret
macOS ~/Library/Application Support/ZeroTier/authtoken.secret
Linux /var/lib/zerotier-one/authtoken.secret

API

节点状态
status, _ := c.Status(ctx)
// status.Address, status.Version, status.Online
网络
// 列表
networks, _ := c.Networks().List(ctx)

// 加入
c.Networks().Join(ctx, "network_id")

// 离开
c.Networks().Leave(ctx, "network_id")

// 更新设置
settings := client.NewNetworkSettings().
    AllowDNS(true).
    AllowManaged(true).
    Build()
c.Networks().Update(ctx, "network_id", settings)
Peers
peers, _ := c.Peers().List(ctx)
peer, _ := c.Peers().Get(ctx, "peer_id")
控制器(自托管)
// 状态
status, _ := c.Controller().Status(ctx)

// 创建网络
config := client.NewControllerNetworkConfig().
    Name("my-network").
    Private(true).
    AddRoute("10.0.0.0/24", nil).
    AddIPPool("10.0.0.1", "10.0.0.254").
    V4AssignMode(true).
    Build()
c.Controller().CreateNetwork(ctx, nodeID, config)

// 授权成员
memberConfig := client.NewControllerMemberConfig().
    Authorized(true).
    Build()
c.Controller().UpdateMember(ctx, networkID, memberID, memberConfig)

Documentation

Overview

Package client 提供 ZeroTier Service API(本地节点)的 Go 客户端

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type AssignMode

type AssignMode struct {
	ZT bool `json:"zt"`
}

AssignMode IP 分配模式

type Client

type Client interface {
	// Status 获取节点状态
	Status(ctx context.Context) (*NodeStatus, error)
	// Networks 网络管理
	Networks() NetworkService
	// Peers 节点管理
	Peers() PeerService
	// Controller 控制器管理(自托管时可用)
	Controller() ControllerService
}

Client ZeroTier Service API 客户端接口

func New

func New(opts ...Option) Client

New 创建新的 ZeroTier Service API 客户端

type ControllerMember

type ControllerMember struct {
	ID                   string   `json:"id"`
	Address              string   `json:"address"`
	NetworkID            string   `json:"networkId"`
	Authorized           bool     `json:"authorized"`
	ActiveBridge         bool     `json:"activeBridge"`
	IPAssignments        []string `json:"ipAssignments"`
	NoAutoAssignIPs      bool     `json:"noAutoAssignIps"`
	Revision             int      `json:"revision"`
	CreationTime         int64    `json:"creationTime"`
	LastAuthorizedTime   int64    `json:"lastAuthorizedTime"`
	LastDeauthorizedTime int64    `json:"lastDeauthorizedTime"`
}

ControllerMember 控制器成员

type ControllerMemberBuilder

type ControllerMemberBuilder struct {
	// contains filtered or unexported fields
}

ControllerMemberBuilder 成员配置构建器

func NewControllerMemberConfig

func NewControllerMemberConfig() *ControllerMemberBuilder

NewControllerMemberConfig 创建成员配置构建器

func (*ControllerMemberBuilder) ActiveBridge

ActiveBridge 设置是否为活动桥接

func (*ControllerMemberBuilder) Authorized

Authorized 设置是否授权

func (*ControllerMemberBuilder) Build

Build 构建配置

func (*ControllerMemberBuilder) IPAssignments

func (b *ControllerMemberBuilder) IPAssignments(ips ...string) *ControllerMemberBuilder

IPAssignments 设置 IP 分配

func (*ControllerMemberBuilder) NoAutoAssignIPs

func (b *ControllerMemberBuilder) NoAutoAssignIPs(v bool) *ControllerMemberBuilder

NoAutoAssignIPs 设置是否禁用自动 IP 分配

type ControllerMemberConfig

type ControllerMemberConfig struct {
	Authorized      *bool    `json:"authorized,omitempty"`
	ActiveBridge    *bool    `json:"activeBridge,omitempty"`
	IPAssignments   []string `json:"ipAssignments,omitempty"`
	NoAutoAssignIPs *bool    `json:"noAutoAssignIps,omitempty"`
}

ControllerMemberConfig 成员配置

type ControllerNetwork

type ControllerNetwork struct {
	ID                string             `json:"id"`
	Name              string             `json:"name"`
	Private           bool               `json:"private"`
	CreationTime      int64              `json:"creationTime"`
	Revision          int                `json:"revision"`
	MulticastLimit    int                `json:"multicastLimit"`
	EnableBroadcast   bool               `json:"enableBroadcast"`
	Routes            []Route            `json:"routes"`
	IPAssignmentPools []IPAssignmentPool `json:"ipAssignmentPools"`
	V4AssignMode      *AssignMode        `json:"v4AssignMode,omitempty"`
	V6AssignMode      *AssignMode        `json:"v6AssignMode,omitempty"`
}

ControllerNetwork 控制器网络配置

type ControllerNetworkBuilder

type ControllerNetworkBuilder struct {
	// contains filtered or unexported fields
}

ControllerNetworkBuilder 控制器网络配置构建器

func NewControllerNetworkConfig

func NewControllerNetworkConfig() *ControllerNetworkBuilder

NewControllerNetworkConfig 创建网络配置构建器

func (*ControllerNetworkBuilder) AddIPPool

func (b *ControllerNetworkBuilder) AddIPPool(start, end string) *ControllerNetworkBuilder

AddIPPool 添加 IP 分配池

func (*ControllerNetworkBuilder) AddRoute

AddRoute 添加路由

func (*ControllerNetworkBuilder) Build

Build 构建配置

func (*ControllerNetworkBuilder) EnableBroadcast

EnableBroadcast 设置是否启用广播

func (*ControllerNetworkBuilder) MulticastLimit

func (b *ControllerNetworkBuilder) MulticastLimit(limit int) *ControllerNetworkBuilder

MulticastLimit 设置多播限制

func (*ControllerNetworkBuilder) Name

Name 设置网络名称

func (*ControllerNetworkBuilder) Private

Private 设置是否私有网络

func (*ControllerNetworkBuilder) V4AssignMode

V4AssignMode 设置 IPv4 分配模式

func (*ControllerNetworkBuilder) V6AssignMode

V6AssignMode 设置 IPv6 分配模式

type ControllerNetworkConfig

type ControllerNetworkConfig struct {
	Name              string             `json:"name,omitempty"`
	Private           *bool              `json:"private,omitempty"`
	EnableBroadcast   *bool              `json:"enableBroadcast,omitempty"`
	MulticastLimit    *int               `json:"multicastLimit,omitempty"`
	Routes            []Route            `json:"routes,omitempty"`
	IPAssignmentPools []IPAssignmentPool `json:"ipAssignmentPools,omitempty"`
	V4AssignMode      *AssignMode        `json:"v4AssignMode,omitempty"`
	V6AssignMode      *AssignMode        `json:"v6AssignMode,omitempty"`
}

ControllerNetworkConfig 创建/更新网络的配置

type ControllerService

type ControllerService interface {
	// Status 获取控制器状态
	Status(ctx context.Context) (*ControllerStatus, error)
	// ListNetworks 列出控制器管理的所有网络
	ListNetworks(ctx context.Context) ([]string, error)
	// GetNetwork 获取网络配置
	GetNetwork(ctx context.Context, networkID string) (*ControllerNetwork, error)
	// CreateNetwork 创建新网络
	CreateNetwork(ctx context.Context, nodeID string, config *ControllerNetworkConfig) (*ControllerNetwork, error)
	// UpdateNetwork 更新网络配置
	UpdateNetwork(ctx context.Context, networkID string, config *ControllerNetworkConfig) (*ControllerNetwork, error)
	// DeleteNetwork 删除网络
	DeleteNetwork(ctx context.Context, networkID string) error
	// ListMembers 列出网络成员
	ListMembers(ctx context.Context, networkID string) ([]string, error)
	// GetMember 获取成员信息
	GetMember(ctx context.Context, networkID, memberID string) (*ControllerMember, error)
	// UpdateMember 更新成员配置
	UpdateMember(ctx context.Context, networkID, memberID string, config *ControllerMemberConfig) (*ControllerMember, error)
	// DeleteMember 删除成员
	DeleteMember(ctx context.Context, networkID, memberID string) error
}

ControllerService 控制器管理服务接口(自托管时可用)

type ControllerStatus

type ControllerStatus struct {
	Controller bool  `json:"controller"`
	APIVersion int   `json:"apiVersion"`
	Clock      int64 `json:"clock"`
}

ControllerStatus 控制器状态

type DNS

type DNS struct {
	Domain  string   `json:"domain"`
	Servers []string `json:"servers,omitempty"`
}

DNS 配置

type IPAssignmentPool

type IPAssignmentPool struct {
	IPRangeStart string `json:"ipRangeStart"`
	IPRangeEnd   string `json:"ipRangeEnd"`
}

IPAssignmentPool IP 分配池

type Network

type Network struct {
	ID                string   `json:"id"`
	Name              string   `json:"name"`
	Status            string   `json:"status"`
	Type              string   `json:"type"`
	MAC               string   `json:"mac"`
	MTU               int      `json:"mtu"`
	Bridge            bool     `json:"bridge"`
	BroadcastEnabled  bool     `json:"broadcastEnabled"`
	PortDeviceName    string   `json:"portDeviceName"`
	NetconfRevision   int      `json:"netconfRevision"`
	AssignedAddresses []string `json:"assignedAddresses"`
	AllowDNS          bool     `json:"allowDNS"`
	AllowDefault      bool     `json:"allowDefault"`
	AllowGlobal       bool     `json:"allowGlobal"`
	AllowManaged      bool     `json:"allowManaged"`
	DNS               *DNS     `json:"dns,omitempty"`
}

Network 本地网络信息

type NetworkService

type NetworkService interface {
	// List 列出所有已加入的网络
	List(ctx context.Context) ([]Network, error)
	// Get 获取指定网络详情
	Get(ctx context.Context, networkID string) (*Network, error)
	// Join 加入网络
	Join(ctx context.Context, networkID string) (*Network, error)
	// Leave 离开网络
	Leave(ctx context.Context, networkID string) error
	// Update 更新网络设置
	Update(ctx context.Context, networkID string, settings *NetworkSettings) (*Network, error)
}

NetworkService 网络管理服务接口

type NetworkSettings

type NetworkSettings struct {
	AllowDNS     *bool `json:"allowDNS,omitempty"`
	AllowDefault *bool `json:"allowDefault,omitempty"`
	AllowGlobal  *bool `json:"allowGlobal,omitempty"`
	AllowManaged *bool `json:"allowManaged,omitempty"`
}

NetworkSettings 网络设置(用于更新)

type NetworkSettingsBuilder

type NetworkSettingsBuilder struct {
	// contains filtered or unexported fields
}

NetworkSettingsBuilder 网络设置构建器

func NewNetworkSettings

func NewNetworkSettings() *NetworkSettingsBuilder

NewNetworkSettings 创建网络设置构建器

func (*NetworkSettingsBuilder) AllowDNS

AllowDNS 设置是否允许 DNS

func (*NetworkSettingsBuilder) AllowDefault

AllowDefault 设置是否允许默认路由

func (*NetworkSettingsBuilder) AllowGlobal

AllowGlobal 设置是否允许全局路由

func (*NetworkSettingsBuilder) AllowManaged

AllowManaged 设置是否允许托管路由

func (*NetworkSettingsBuilder) Build

Build 构建设置

type NodeStatus

type NodeStatus struct {
	Address           string `json:"address"`
	Clock             int64  `json:"clock"`
	Online            bool   `json:"online"`
	PlanetWorldID     int64  `json:"planetWorldId"`
	PublicIdentity    string `json:"publicIdentity"`
	TCPFallbackActive bool   `json:"tcpFallbackActive"`
	Version           string `json:"version"`
}

NodeStatus 节点状态

type Option

type Option func(*client)

Option 客户端配置选项

func WithBaseURL

func WithBaseURL(url string) Option

WithBaseURL 设置 API 地址

func WithHTTPClient

func WithHTTPClient(hc *http.Client) Option

WithHTTPClient 自定义 HTTP 客户端

func WithTimeout

func WithTimeout(timeout time.Duration) Option

WithTimeout 设置请求超时

func WithToken

func WithToken(token string) Option

WithToken 设置认证 Token

func WithTokenFile

func WithTokenFile(path string) Option

WithTokenFile 从文件读取 Token

type Peer

type Peer struct {
	Address string     `json:"address"`
	Version string     `json:"version"`
	Role    string     `json:"role"`
	Latency int        `json:"latency"`
	Paths   []PeerPath `json:"paths"`
}

Peer 节点信息

type PeerPath

type PeerPath struct {
	Active        bool   `json:"active"`
	Address       string `json:"address"`
	Expired       bool   `json:"expired"`
	LastReceive   int64  `json:"lastReceive"`
	LastSend      int64  `json:"lastSend"`
	Preferred     bool   `json:"preferred"`
	TrustedPathID int64  `json:"trustedPathId"`
}

PeerPath 节点路径

type PeerService

type PeerService interface {
	// List 列出所有 Peers
	List(ctx context.Context) ([]Peer, error)
	// Get 获取指定 Peer 信息
	Get(ctx context.Context, peerID string) (*Peer, error)
}

PeerService 节点管理服务接口

type Route

type Route struct {
	Target string  `json:"target"`
	Via    *string `json:"via,omitempty"`
}

Route 路由配置

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL