Documentation
¶
Overview ¶
nolint
Index ¶
- Constants
- func DiscoPublicKeyEnsurePrefix(discoKey string) string
- func DiscoPublicKeyStripPrefix(discoKey key.DiscoPublic) string
- func GetDERPMap(cfg DERPConfig) *tailcfg.DERPMap
- func GrpcSocketDialer(ctx context.Context, addr string) (net.Conn, error)
- func MachinePublicKeyEnsurePrefix(machineKey string) string
- func MachinePublicKeyStripPrefix(machineKey key.MachinePublic) string
- func NodePublicKeyEnsurePrefix(nodeKey string) string
- func NodePublicKeyStripPrefix(nodeKey key.NodePublic) string
- func PrivateKeyEnsurePrefix(privateKey string) string
- func SwaggerAPIv1(ctx *gin.Context)
- func SwaggerUI(ctx *gin.Context)
- type ACL
- type ACLPolicy
- type ACLTest
- type AppleMobileConfig
- type AppleMobilePlatformConfig
- type CLIConfig
- type Config
- type DERPConfig
- type Error
- type Groups
- type Headscale
- func (h *Headscale) AddSharedMachineToNamespace(machine *Machine, namespace *Namespace) error
- func (h *Headscale) AppleMobileConfig(ctx *gin.Context)
- func (h *Headscale) ApplePlatformConfig(ctx *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(machine *Machine) error
- func (h *Headscale) DestroyNamespace(name string) error
- func (h *Headscale) DestroyPreAuthKey(pak PreAuthKey) error
- func (h *Headscale) EnableNodeRoute(namespace string, nodeName string, routeStr string) errordeprecated
- func (h *Headscale) EnableRoutes(machine *Machine, routeStrs ...string) error
- func (h *Headscale) ExpireMachine(machine *Machine)
- func (h *Headscale) ExpirePreAuthKey(k *PreAuthKey) error
- func (h *Headscale) GetAdvertisedNodeRoutes(namespace string, nodeName string) (*[]netaddr.IPPrefix, error)deprecated
- func (h *Headscale) GetEnabledNodeRoutes(namespace string, nodeName string) ([]netaddr.IPPrefix, error)deprecated
- func (h *Headscale) GetMachine(namespace string, name string) (*Machine, error)
- func (h *Headscale) GetMachineByID(id uint64) (*Machine, error)
- func (h *Headscale) GetMachineByMachineKey(machineKey key.MachinePublic) (*Machine, error)
- func (h *Headscale) GetNamespace(name string) (*Namespace, error)
- func (h *Headscale) GetPreAuthKey(namespace string, key string) (*PreAuthKey, error)
- func (h *Headscale) HardDeleteMachine(machine *Machine) error
- func (h *Headscale) IsNodeRouteEnabled(namespace string, nodeName string, routeStr string) booldeprecated
- func (h *Headscale) KeyHandler(ctx *gin.Context)
- func (h *Headscale) ListMachines() ([]Machine, error)
- func (h *Headscale) ListMachinesInNamespace(name string) ([]Machine, error)
- func (h *Headscale) ListNamespaces() ([]Namespace, error)
- func (h *Headscale) ListPreAuthKeys(namespaceName string) ([]PreAuthKey, error)
- func (h *Headscale) ListSharedMachinesInNamespace(name string) ([]Machine, error)
- func (h *Headscale) LoadACLPolicy(path string) error
- func (h *Headscale) OIDCCallback(ctx *gin.Context)
- func (h *Headscale) PollNetMapHandler(ctx *gin.Context)
- func (h *Headscale) PollNetMapStream(ctx *gin.Context, machine *Machine, mapRequest tailcfg.MapRequest, ...)
- func (h *Headscale) RefreshMachine(machine *Machine, expiry time.Time)
- func (h *Headscale) RegisterMachine(machineKeyStr string, namespaceName string) (*Machine, error)
- func (h *Headscale) RegisterOIDC(ctx *gin.Context)
- func (h *Headscale) RegisterWebAPI(ctx *gin.Context)
- func (h *Headscale) RegistrationHandler(ctx *gin.Context)
- func (h *Headscale) RemoveSharedMachineFromAllNamespaces(machine *Machine) error
- func (h *Headscale) RemoveSharedMachineFromNamespace(machine *Machine, namespace *Namespace) error
- func (h *Headscale) RenameNamespace(oldName, newName string) error
- func (h *Headscale) RequestMapUpdates(namespaceID uint) error
- func (h *Headscale) Serve() error
- func (h *Headscale) SetMachineNamespace(machine *Machine, namespaceName string) error
- func (h *Headscale) UpdateMachine(machine *Machine) error
- type Hosts
- type IDTokenClaims
- type KV
- type Machine
- func (machine *Machine) GetAdvertisedRoutes() ([]netaddr.IPPrefix, error)
- func (machine *Machine) GetEnabledRoutes() ([]netaddr.IPPrefix, error)
- func (machine *Machine) GetHostInfo() (*tailcfg.Hostinfo, error)
- func (machine *Machine) IsRoutesEnabled(routeStr string) bool
- func (machine *Machine) RoutesToProto() (*v1.Routes, error)
- func (machine Machine) String() string
- type Machines
- type MachinesP
- type Namespace
- type OIDCConfig
- type PreAuthKey
- type SharedMachine
- type TagOwners
Constants ¶
const ( Base10 = 10 BitSize16 = 16 )
const ( RegisterMethodAuthKey = "authKey" RegisterMethodOIDC = "oidc" RegisterMethodCLI = "cli" ErrRegisterMethodCLIDoesNotSupportExpire = Error( "machines registered with CLI does not support expire", ) )
const ( AuthPrefix = "Bearer " Postgres = "postgres" Sqlite = "sqlite3" HTTPReadTimeout = 30 * time.Second )
const (
ByteSize = 8
)
Variables ¶
This section is empty.
Functions ¶
func DiscoPublicKeyEnsurePrefix ¶ added in v0.12.1
func DiscoPublicKeyStripPrefix ¶ added in v0.12.1
func DiscoPublicKeyStripPrefix(discoKey key.DiscoPublic) string
func GetDERPMap ¶ added in v0.11.0
func GetDERPMap(cfg DERPConfig) *tailcfg.DERPMap
func GrpcSocketDialer ¶ added in v0.12.1
func MachinePublicKeyEnsurePrefix ¶ added in v0.12.1
func MachinePublicKeyStripPrefix ¶ added in v0.12.1
func MachinePublicKeyStripPrefix(machineKey key.MachinePublic) string
func NodePublicKeyEnsurePrefix ¶ added in v0.12.1
func NodePublicKeyStripPrefix ¶ added in v0.12.1
func NodePublicKeyStripPrefix(nodeKey key.NodePublic) string
func PrivateKeyEnsurePrefix ¶ added in v0.12.1
func SwaggerAPIv1 ¶ added in v0.12.1
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 EphemeralNodeInactivityTimeout time.Duration IPPrefix netaddr.IPPrefix PrivateKeyPath string BaseDomain string DERP DERPConfig 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 UnixSocket string OIDC OIDCConfig CLI CLIConfig }
Config contains the initial Headscale configuration.
type DERPConfig ¶ added in v0.11.0
type Error ¶
type Error string
Error is used to compare errors as per https://dave.cheney.net/2016/04/07/constant-errors
type Headscale ¶
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) DestroyPreAuthKey ¶ added in v0.12.1
func (h *Headscale) DestroyPreAuthKey(pak PreAuthKey) error
DestroyPreAuthKey destroys a preauthkey. Returns error if the PreAuthKey does not exist.
func (*Headscale) EnableRoutes ¶ added in v0.12.1
EnableNodeRoute enables new routes based on a list of new routes. It will _replace_ the previous list of routes.
func (*Headscale) ExpireMachine ¶ added in v0.12.1
ExpireMachine takes a Machine struct and sets the expire field to now.
func (*Headscale) ExpirePreAuthKey ¶ added in v0.12.1
func (h *Headscale) ExpirePreAuthKey(k *PreAuthKey) error
MarkExpirePreAuthKey marks a PreAuthKey as expired.
func (*Headscale) GetAdvertisedNodeRoutes
deprecated
added in
v0.7.0
func (*Headscale) GetEnabledNodeRoutes
deprecated
added in
v0.7.0
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
func (h *Headscale) GetMachineByMachineKey( machineKey key.MachinePublic, ) (*Machine, error)
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) 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) ListMachines ¶ added in v0.12.1
func (*Headscale) ListMachinesInNamespace ¶
ListMachinesInNamespace gets all the nodes in a given namespace.
func (*Headscale) ListNamespaces ¶
ListNamespaces gets all the existing namespaces.
func (*Headscale) ListPreAuthKeys ¶ added in v0.12.1
func (h *Headscale) ListPreAuthKeys(namespaceName string) ([]PreAuthKey, error)
ListPreAuthKeys returns the list of PreAuthKeys for a namespace.
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) OIDCCallback ¶ added in v0.12.1
OIDCCallback handles the callback from the OIDC endpoint Retrieves the mkey from the state cache and adds the machine to the users email namespace TODO: A confirmation page for new machines should be added to avoid phishing vulnerabilities TODO: Add groups information from OIDC tokens into machine HostInfo Listens in /oidc/callback.
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( ctx *gin.Context, machine *Machine, mapRequest tailcfg.MapRequest, machineKey key.MachinePublic, 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) RefreshMachine ¶ added in v0.12.1
RefreshMachine takes a Machine struct and sets the expire field to now.
func (*Headscale) RegisterMachine ¶
func (h *Headscale) RegisterMachine( machineKeyStr string, namespaceName string, ) (*Machine, error)
RegisterMachine is executed from the CLI to register a new Machine using its MachineKey.
func (*Headscale) RegisterOIDC ¶ added in v0.12.1
RegisterOIDC redirects to the OIDC provider for authentication Puts machine key in cache so the callback can retrieve it using the oidc state param Listens in /oidc/register/:mKey.
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
func (h *Headscale) RemoveSharedMachineFromNamespace( machine *Machine, namespace *Namespace, ) error
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
TODO(kradalby): Remove the need for this. RequestMapUpdates signals the KV worker to update the maps for this namespace.
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 IDTokenClaims ¶ added in v0.12.1
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) GetAdvertisedRoutes ¶ added in v0.12.1
func (*Machine) GetEnabledRoutes ¶ added in v0.12.1
func (*Machine) GetHostInfo ¶
GetHostInfo returns a Hostinfo struct for the machine.
func (*Machine) IsRoutesEnabled ¶ added in v0.12.1
func (*Machine) RoutesToProto ¶ added in v0.12.1
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 OIDCConfig ¶ added in v0.12.1
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.
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
cmd
|
|
gen
|
|
go/headscale/v1
Package v1 is a reverse proxy.
|
Package v1 is a reverse proxy. |