Documentation ¶
Overview ¶
Package router presents an interface to manipulate the host network stack's state.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var SetRoutesFunc func(cfg *Config) error
SetRoutesFunc applies the given router settings to the OS network stack. cfg is guaranteed to be non-nil.
This is logically part of the router_darwin.go implementation, and should not be used on other platforms.
The code to reconfigure the network stack on MacOS and iOS is in the non-open `ipn-go-bridge` package, which bridges between the Go and Swift pieces of the application. The ipn-go-bridge sets SetRoutesFunc at startup.
So why isn't this in router_darwin.go? Because in the non-oss repository, we build ipn-go-bridge when developing on Linux as well as MacOS, so that we don't have to wait until the Mac CI to discover that we broke it. So this one definition needs to exist in both the darwin and linux builds. Hence this file and build tag.
Functions ¶
Types ¶
type Config ¶
type Config struct { LocalAddrs []netaddr.IPPrefix Routes []netaddr.IPPrefix // routes to point into the Tailscale interface DNSConfig SubnetRoutes []netaddr.IPPrefix // subnets being advertised to other Tailscale nodes SNATSubnetRoutes bool // SNAT traffic to local subnets NetfilterMode NetfilterMode // how much to manage netfilter rules }
Config is the subset of Tailscale configuration that is relevant to the OS's network stack.
type DNSConfig ¶ added in v1.0.0
type DNSConfig struct { // Nameservers are the IP addresses of the nameservers to use. Nameservers []netaddr.IP // Domains are the search domains to use. Domains []string }
DNSConfig is the subset of Config that contains DNS parameters.
func (DNSConfig) EquivalentTo ¶ added in v1.0.0
EquivalentTo determines whether its argument and receiver represent equivalent DNS configurations (then DNS reconfig is a no-op).
type NetfilterMode ¶
type NetfilterMode int
NetfilterMode is the firewall management mode to use when programming the Linux network stack.
const ( NetfilterOff NetfilterMode = iota // remove all tailscale netfilter state NetfilterNoDivert // manage tailscale chains, but don't call them NetfilterOn // manage tailscale chains and call them from main chains )
func (NetfilterMode) String ¶
func (m NetfilterMode) String() string
type Router ¶
type Router interface { // Up brings the router up. Up() error // Set updates the OS network stack with a new Config. It may be // called multiple times with identical Configs, which the // implementation should handle gracefully. Set(*Config) error // Close closes the router. Close() error }
Router is responsible for managing the system network stack.
There is typically only one instance of this interface per process.