Documentation ¶
Index ¶
- type ACL
- type ACLPolicy
- type ACLTest
- type Config
- type Error
- type Groups
- type Headscale
- func (h *Headscale) CreateNamespace(name string) (*Namespace, error)
- func (h *Headscale) CreatePreAuthKey(namespaceName string, reusable bool, ephemeral bool, expiration *time.Time) (*PreAuthKey, error)
- func (h *Headscale) DeleteMachine(m *Machine) error
- func (h *Headscale) DestroyNamespace(name string) error
- func (h *Headscale) EnableNodeRoute(namespace string, nodeName string, routeStr string) (*netaddr.IPPrefix, error)
- func (h *Headscale) ExpireEphemeralNodes(milliSeconds int64)
- func (h *Headscale) GetMachine(namespace string, name string) (*Machine, error)
- func (h *Headscale) GetMachineByID(id uint64) (*Machine, error)
- func (h *Headscale) GetNamespace(name string) (*Namespace, error)
- func (h *Headscale) GetNodeRoutes(namespace string, nodeName string) (*[]netaddr.IPPrefix, error)
- func (h *Headscale) GetPreAuthKeys(namespaceName string) (*[]PreAuthKey, error)
- func (h *Headscale) HardDeleteMachine(m *Machine) error
- func (h *Headscale) KeyHandler(c *gin.Context)
- func (h *Headscale) ListMachinesInNamespace(name string) (*[]Machine, error)
- func (h *Headscale) ListNamespaces() (*[]Namespace, error)
- func (h *Headscale) LoadACLPolicy(path string) error
- func (h *Headscale) PollNetMapHandler(c *gin.Context)
- func (h *Headscale) RegisterMachine(key string, namespace string) (*Machine, error)
- func (h *Headscale) RegisterWebAPI(c *gin.Context)
- func (h *Headscale) RegistrationHandler(c *gin.Context)
- func (h *Headscale) RequestMapUpdates(namespaceID uint) error
- func (h *Headscale) Serve() error
- func (h *Headscale) SetMachineNamespace(m *Machine, namespaceName string) error
- type Hosts
- type KV
- type Machine
- type Namespace
- type PreAuthKey
- type TagOwners
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type ACL ¶ added in v0.3.0
type ACL struct { Action string `json:"Action"` Users []string `json:"Users"` Ports []string `json:"Ports"` }
ACL is a basic rule for the ACL Policy
type ACLPolicy ¶ added in v0.3.0
type ACLPolicy struct { Groups Groups `json:"Groups"` Hosts Hosts `json:"Hosts"` TagOwners TagOwners `json:"TagOwners"` ACLs []ACL `json:"ACLs"` Tests []ACLTest `json:"Tests"` }
ACLPolicy represents a Tailscale ACL Policy
type ACLTest ¶ added in v0.3.0
type ACLTest struct { User string `json:"User"` Allow []string `json:"Allow"` Deny []string `json:"Deny,omitempty"` }
ACLTest is not implemented, but should be use to check if a certain rule is allowed
type Config ¶
type Config struct { ServerURL string Addr string PrivateKeyPath string DerpMap *tailcfg.DERPMap EphemeralNodeInactivityTimeout time.Duration IPPrefix netaddr.IPPrefix DBtype string DBpath string DBhost string DBport int DBname string DBuser string DBpass string TLSLetsEncryptListen string TLSLetsEncryptHostname string TLSLetsEncryptCacheDir string TLSLetsEncryptChallengeType string TLSCertPath string TLSKeyPath string }
Config contains the initial Headscale configuration
type Error ¶
type Error string
Error is used to compare errors as per https://dave.cheney.net/2016/04/07/constant-errors
type Headscale ¶
type Headscale struct {
// contains filtered or unexported fields
}
Headscale represents the base app of the service
func NewHeadscale ¶
NewHeadscale returns the Headscale app
func (*Headscale) CreateNamespace ¶
CreateNamespace creates a new Namespace. Returns error if could not be created or another namespace already exists
func (*Headscale) CreatePreAuthKey ¶
func (h *Headscale) CreatePreAuthKey(namespaceName string, reusable bool, ephemeral bool, expiration *time.Time) (*PreAuthKey, error)
CreatePreAuthKey creates a new PreAuthKey in a namespace, and returns it
func (*Headscale) DeleteMachine ¶ added in v0.6.1
DeleteMachine softs deletes a Machine from the database
func (*Headscale) DestroyNamespace ¶
DestroyNamespace destroys a Namespace. Returns error if the Namespace does not exist or if there are machines associated with it.
func (*Headscale) EnableNodeRoute ¶
func (h *Headscale) EnableNodeRoute(namespace string, nodeName string, routeStr string) (*netaddr.IPPrefix, error)
EnableNodeRoute enables a subnet route advertised by a node (identified by namespace and node name)
func (*Headscale) ExpireEphemeralNodes ¶
ExpireEphemeralNodes deletes ephemeral machine records that have not been seen for longer than h.cfg.EphemeralNodeInactivityTimeout
func (*Headscale) GetMachine ¶
GetMachine finds a Machine by name and namespace and returns the Machine struct
func (*Headscale) GetMachineByID ¶ added in v0.6.1
GetMachineByID finds a Machine by ID and returns the Machine struct
func (*Headscale) GetNamespace ¶
GetNamespace fetches a namespace by name
func (*Headscale) GetNodeRoutes ¶
GetNodeRoutes returns the subnet routes advertised by a node (identified by namespace and node name)
func (*Headscale) GetPreAuthKeys ¶
func (h *Headscale) GetPreAuthKeys(namespaceName string) (*[]PreAuthKey, error)
GetPreAuthKeys returns the list of PreAuthKeys for a namespace
func (*Headscale) HardDeleteMachine ¶ added in v0.6.1
HardDeleteMachine hard deletes a Machine from the database
func (*Headscale) KeyHandler ¶
KeyHandler provides the Headscale pub key Listens in /key
func (*Headscale) ListMachinesInNamespace ¶
ListMachinesInNamespace gets all the nodes in a given namespace
func (*Headscale) ListNamespaces ¶
ListNamespaces gets all the existing namespaces
func (*Headscale) LoadACLPolicy ¶ added in v0.3.0
LoadACLPolicy loads the ACL policy from the specify path, and generates the ACL rules
func (*Headscale) PollNetMapHandler ¶
PollNetMapHandler takes care of /machine/:id/map
This is the busiest endpoint, as it keeps the HTTP long poll that updates the clients when something in the network changes.
The clients POST stuff like HostInfo and their Endpoints here, but only after their first request (marked with the ReadOnly field).
At this moment the updates are sent in a quite horrendous way, but they kinda work.
func (*Headscale) RegisterMachine ¶
RegisterMachine is executed from the CLI to register a new Machine using its MachineKey
func (*Headscale) RegisterWebAPI ¶
RegisterWebAPI shows a simple message in the browser to point to the CLI Listens in /register
func (*Headscale) RegistrationHandler ¶
RegistrationHandler handles the actual registration process of a machine Endpoint /machine/:id
func (*Headscale) RequestMapUpdates ¶ added in v0.6.1
RequestMapUpdates signals the KV worker to update the maps for this namespace
type Hosts ¶ added in v0.3.0
Hosts are alias for IP addresses or subnets
func (*Hosts) UnmarshalJSON ¶ added in v0.3.0
UnmarshalJSON allows to parse the Hosts directly into netaddr objects
type Machine ¶
type Machine struct { ID uint64 `gorm:"primary_key"` MachineKey string `gorm:"type:varchar(64);unique_index"` NodeKey string DiscoKey string IPAddress string Name string NamespaceID uint Namespace Namespace `gorm:"foreignKey:NamespaceID"` Registered bool // temp RegisterMethod string AuthKeyID uint AuthKey *PreAuthKey LastSeen *time.Time Expiry *time.Time HostInfo datatypes.JSON Endpoints datatypes.JSON EnabledRoutes datatypes.JSON CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time }
Machine is a Headscale client
type Namespace ¶
Namespace is the way Headscale implements the concept of users in Tailscale
At the end of the day, users in Tailscale are some kind of 'bubbles' or namespaces that contain our machines.