package appc
import "tailscale.com/appc"
Package appc implements App Connectors. An AppConnector provides DNS domain oriented routing of traffic. An App Connector becomes a DNS server for a peer, authoritative for the set of configured domains. DNS resolution of the target domain triggers dynamic publication of routes to ensure that traffic to the domain is routed through the App Connector.
Index ¶
- type AppConnector
- func NewAppConnector(logf logger.Logf, routeAdvertiser RouteAdvertiser, routeInfo *RouteInfo, storeRoutesFunc func(*RouteInfo) error) *AppConnector
- func (e *AppConnector) ClearRoutes() error
- func (e *AppConnector) DomainRoutes() map[string][]netip.Addr
- func (e *AppConnector) Domains() views.Slice[string]
- func (e *AppConnector) ObserveDNSResponse(res []byte) error
- func (e *AppConnector) ShouldStoreRoutes() bool
- func (e *AppConnector) UpdateDomains(domains []string)
- func (e *AppConnector) UpdateDomainsAndRoutes(domains []string, routes []netip.Prefix)
- func (e *AppConnector) Wait(ctx context.Context)
- type RouteAdvertiser
- type RouteInfo
Types ¶
type AppConnector ¶
type AppConnector struct {
// contains filtered or unexported fields
}
AppConnector is an implementation of an AppConnector that performs its function as a subsystem inside of a tailscale node. At the control plane side App Connector routing is configured in terms of domains rather than IP addresses. The AppConnectors responsibility inside tailscaled is to apply the routing and domain configuration as supplied in the map response. DNS requests for configured domains are observed. If the domains resolve to routes not yet served by the AppConnector the local node configuration is updated to advertise the new route.
func NewAppConnector ¶
func NewAppConnector(logf logger.Logf, routeAdvertiser RouteAdvertiser, routeInfo *RouteInfo, storeRoutesFunc func(*RouteInfo) error) *AppConnector
NewAppConnector creates a new AppConnector.
func (*AppConnector) ClearRoutes ¶
func (e *AppConnector) ClearRoutes() error
ClearRoutes removes all route state from the AppConnector.
func (*AppConnector) DomainRoutes ¶
func (e *AppConnector) DomainRoutes() map[string][]netip.Addr
DomainRoutes returns a map of domains to resolved IP addresses.
func (*AppConnector) Domains ¶
func (e *AppConnector) Domains() views.Slice[string]
Domains returns the currently configured domain list.
func (*AppConnector) ObserveDNSResponse ¶
func (e *AppConnector) ObserveDNSResponse(res []byte) error
ObserveDNSResponse is a callback invoked by the DNS resolver when a DNS response is being returned over the PeerAPI. The response is parsed and matched against the configured domains, if matched the routeAdvertiser is advised to advertise the discovered route.
func (*AppConnector) ShouldStoreRoutes ¶
func (e *AppConnector) ShouldStoreRoutes() bool
ShouldStoreRoutes returns true if the appconnector was created with the controlknob on and is storing its discovered routes persistently.
func (*AppConnector) UpdateDomains ¶
func (e *AppConnector) UpdateDomains(domains []string)
UpdateDomains asynchronously replaces the current set of configured domains with the supplied set of domains. Domains must not contain a trailing dot, and should be lower case. If the domain contains a leading '*' label it matches all subdomains of a domain.
func (*AppConnector) UpdateDomainsAndRoutes ¶
func (e *AppConnector) UpdateDomainsAndRoutes(domains []string, routes []netip.Prefix)
UpdateDomainsAndRoutes starts an asynchronous update of the configuration given the new domains and routes.
func (*AppConnector) Wait ¶
func (e *AppConnector) Wait(ctx context.Context)
Wait waits for the currently scheduled asynchronous configuration changes to complete.
type RouteAdvertiser ¶
type RouteAdvertiser interface { // AdvertiseRoute adds one or more route advertisements skipping any that // are already advertised. AdvertiseRoute(...netip.Prefix) error // UnadvertiseRoute removes any matching route advertisements. UnadvertiseRoute(...netip.Prefix) error }
RouteAdvertiser is an interface that allows the AppConnector to advertise newly discovered routes that need to be served through the AppConnector.
type RouteInfo ¶
type RouteInfo struct { // Control is the routes from the 'routes' section of an app connector acl. Control []netip.Prefix `json:",omitempty"` // Domains are the routes discovered by observing DNS lookups for configured domains. Domains map[string][]netip.Addr `json:",omitempty"` // Wildcards are the configured DNS lookup domains to observe. When a DNS query matches Wildcards, // its result is added to Domains. Wildcards []string `json:",omitempty"` }
RouteInfo is a data structure used to persist the in memory state of an AppConnector so that we can know, even after a restart, which routes came from ACLs and which were learned from domains.
Source Files ¶
appconnector.go
Directories ¶
Path | Synopsis |
---|---|
appc/appctest | Package appctest contains code to help test App Connectors. |
- Version
- v1.84.0 (latest)
- Published
- May 21, 2025
- Platform
- linux/amd64
- Imports
- 15 packages
- Last checked
- 1 day ago –
Tools for package owners.