Documentation ¶
Index ¶
- type ACL
- type ACLPolicy
- type ACLTest
- type AppleMobileConfig
- type AppleMobilePlatformConfig
- type Config
- type Error
- type Groups
- type Headscale
- func (h *Headscale) AddSharedMachineToNamespace(m *Machine, ns *Namespace) error
- func (h *Headscale) AppleMobileConfig(c *gin.Context)
- func (h *Headscale) ApplePlatformConfig(c *gin.Context)
- 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) error
- func (h *Headscale) GetAdvertisedNodeRoutes(namespace string, nodeName string) (*[]netaddr.IPPrefix, error)
- func (h *Headscale) GetEnabledNodeRoutes(namespace string, nodeName string) ([]netaddr.IPPrefix, error)
- func (h *Headscale) GetMachine(namespace string, name string) (*Machine, error)
- func (h *Headscale) GetMachineByID(id uint64) (*Machine, error)
- func (h *Headscale) GetMachineByMachineKey(mKey string) (*Machine, error)
- func (h *Headscale) GetNamespace(name string) (*Namespace, error)
- func (h *Headscale) GetPreAuthKey(namespace string, key string) (*PreAuthKey, error)
- func (h *Headscale) GetPreAuthKeys(namespaceName string) (*[]PreAuthKey, error)
- func (h *Headscale) HardDeleteMachine(m *Machine) error
- func (h *Headscale) IsNodeRouteEnabled(namespace string, nodeName string, routeStr string) bool
- func (h *Headscale) KeyHandler(c *gin.Context)
- func (h *Headscale) ListMachinesInNamespace(name string) (*[]Machine, error)
- func (h *Headscale) ListNamespaces() (*[]Namespace, error)
- func (h *Headscale) ListSharedMachinesInNamespace(name string) (*[]Machine, error)
- func (h *Headscale) LoadACLPolicy(path string) error
- func (h *Headscale) MarkExpirePreAuthKey(k *PreAuthKey) error
- func (h *Headscale) PollNetMapHandler(c *gin.Context)
- func (h *Headscale) PollNetMapStream(c *gin.Context, m *Machine, req tailcfg.MapRequest, mKey wgkey.Key, ...)
- 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) RemoveSharedMachineFromAllNamespaces(m *Machine) error
- func (h *Headscale) RemoveSharedMachineFromNamespace(m *Machine, ns *Namespace) error
- func (h *Headscale) RenameNamespace(oldName, newName string) error
- func (h *Headscale) RequestMapUpdates(namespaceID uint) error
- func (h *Headscale) RoutesToPtables(namespace string, nodeName string, availableRoutes []netaddr.IPPrefix) pterm.TableData
- func (h *Headscale) Serve() error
- func (h *Headscale) SetMachineNamespace(m *Machine, namespaceName string) error
- func (h *Headscale) UpdateMachine(m *Machine) error
- type Hosts
- type KV
- type Machine
- type Machines
- type MachinesP
- type Namespace
- type PreAuthKey
- type SharedMachine
- 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 AppleMobileConfig ¶ added in v0.9.2
type AppleMobilePlatformConfig ¶ added in v0.9.2
type Config ¶
type Config struct { ServerURL string Addr string PrivateKeyPath string DerpMap *tailcfg.DERPMap EphemeralNodeInactivityTimeout time.Duration IPPrefix netaddr.IPPrefix BaseDomain string 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 ACMEURL string ACMEEmail string DNSConfig *tailcfg.DNSConfig }
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) AddSharedMachineToNamespace ¶ added in v0.8.0
AddSharedMachineToNamespace adds a machine as a shared node to a namespace
func (*Headscale) AppleMobileConfig ¶ added in v0.9.2
AppleMobileConfig shows a simple message in the browser to point to the CLI Listens in /register
func (*Headscale) ApplePlatformConfig ¶ added in v0.9.2
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 ¶
EnableNodeRoute enables a subnet route advertised by a node (identified by namespace and node name)
func (*Headscale) GetAdvertisedNodeRoutes ¶ added in v0.7.0
func (h *Headscale) GetAdvertisedNodeRoutes(namespace string, nodeName string) (*[]netaddr.IPPrefix, error)
GetAdvertisedNodeRoutes returns the subnet routes advertised by a node (identified by namespace and node name)
func (*Headscale) GetEnabledNodeRoutes ¶ added in v0.7.0
func (h *Headscale) GetEnabledNodeRoutes(namespace string, nodeName string) ([]netaddr.IPPrefix, error)
GetEnabledNodeRoutes returns the subnet routes enabled by a node (identified by namespace and node name)
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) GetMachineByMachineKey ¶ added in v0.9.3
GetMachineByMachineKey finds a Machine by ID and returns the Machine struct
func (*Headscale) GetNamespace ¶
GetNamespace fetches a namespace by name
func (*Headscale) GetPreAuthKey ¶ added in v0.6.1
func (h *Headscale) GetPreAuthKey(namespace string, key string) (*PreAuthKey, error)
GetPreAuthKey returns a PreAuthKey for a given key
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) IsNodeRouteEnabled ¶ added in v0.7.0
IsNodeRouteEnabled checks if a certain route has been enabled
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) ListSharedMachinesInNamespace ¶ added in v0.8.0
ListSharedMachinesInNamespace returns all the machines that are shared to the specified namespace
func (*Headscale) LoadACLPolicy ¶ added in v0.3.0
LoadACLPolicy loads the ACL policy from the specify path, and generates the ACL rules
func (*Headscale) MarkExpirePreAuthKey ¶ added in v0.6.1
func (h *Headscale) MarkExpirePreAuthKey(k *PreAuthKey) error
MarkExpirePreAuthKey marks a PreAuthKey as expired
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) PollNetMapStream ¶ added in v0.6.1
func (h *Headscale) PollNetMapStream( c *gin.Context, m *Machine, req tailcfg.MapRequest, mKey wgkey.Key, pollDataChan chan []byte, keepAliveChan chan []byte, updateChan chan struct{}, cancelKeepAlive chan struct{}, )
PollNetMapStream takes care of /machine/:id/map stream logic, ensuring we communicate updates and data to the connected clients.
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) RemoveSharedMachineFromAllNamespaces ¶ added in v0.10.1
RemoveSharedMachineFromAllNamespaces removes a machine as a shared node from all namespaces
func (*Headscale) RemoveSharedMachineFromNamespace ¶ added in v0.10.4
RemoveSharedMachineFromNamespace removes a shared machine from a namespace
func (*Headscale) RenameNamespace ¶ added in v0.10.4
RenameNamespace renames a Namespace. Returns error if the Namespace does not exist or if another Namespace exists with the new name.
func (*Headscale) RequestMapUpdates ¶ added in v0.6.1
RequestMapUpdates signals the KV worker to update the maps for this namespace
func (*Headscale) RoutesToPtables ¶ added in v0.7.0
func (h *Headscale) RoutesToPtables(namespace string, nodeName string, availableRoutes []netaddr.IPPrefix) pterm.TableData
RoutesToPtables converts the list of routes to a nice table
func (*Headscale) SetMachineNamespace ¶
SetMachineNamespace assigns a Machine to a namespace
func (*Headscale) UpdateMachine ¶ added in v0.7.0
UpdateMachine takes a Machine struct pointer (typically already loaded from database and updates it with the latest data from the database.
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 LastSuccessfulUpdate *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
func (*Machine) GetHostInfo ¶
GetHostInfo returns a Hostinfo struct for the machine
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.
type PreAuthKey ¶
type PreAuthKey struct { ID uint64 `gorm:"primary_key"` Key string NamespaceID uint Namespace Namespace Reusable bool Ephemeral bool `gorm:"default:false"` Used bool `gorm:"default:false"` CreatedAt *time.Time Expiration *time.Time }
PreAuthKey describes a pre-authorization key usable in a particular namespace
type SharedMachine ¶ added in v0.8.0
type SharedMachine struct {}
SharedMachine is a join table to support sharing nodes between namespaces