Documentation ¶
Overview ¶
Package netns contains the common code for using the Go net package in a logical "network namespace" to avoid routing loops where Tailscale-created packets would otherwise loop back through Tailscale routes.
Despite the name netns, the exact mechanism used differs by operating system, and perhaps even by version of the OS.
The netns package also handles connecting via SOCKS proxies when configured by the environment.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func IsSOCKSDialer ¶
IsSOCKSDialer reports whether d is SOCKS-proxying dialer as returned by NewDialer or FromDialer.
func Listener ¶
Listener returns a new net.Listener with its Control hook func initialized as necessary to run in logical network namespace that doesn't route back into Tailscale. The netMon parameter is optional; if non-nil it's used to do faster interface lookups.
func SetBindToInterfaceByRoute ¶
func SetBindToInterfaceByRoute(v bool)
SetBindToInterfaceByRoute enables or disables whether we use the system's route information to bind to a particular interface. It is the same as setting the TS_BIND_TO_INTERFACE_BY_ROUTE.
Currently, this only changes the behaviour on macOS.
func SetDisableBindConnToInterface ¶
func SetDisableBindConnToInterface(v bool)
SetDisableBindConnToInterface disables the (normal) behavior of binding connections to the default network interface.
Currently, this only has an effect on Darwin.
func SetEnabled ¶
func SetEnabled(on bool)
SetEnabled enables or disables netns for the process. It defaults to being enabled.
func UseSocketMark ¶
func UseSocketMark() bool
UseSocketMark reports whether SO_MARK is in use. If it doesn't, we have to use SO_BINDTODEVICE on our sockets instead.
Types ¶
type Dialer ¶
type Dialer interface { Dial(network, address string) (net.Conn, error) DialContext(ctx context.Context, network, address string) (net.Conn, error) }
Dialer is the interface for a dialer that can dial with or without a context. It's the type implemented both by net.Dialer and the Go SOCKS dialer.
func FromDialer ¶
FromDialer returns sets d.Control as necessary to run in a logical network namespace that doesn't route back into Tailscale. It also handles using a SOCKS if configured in the environment with ALL_PROXY. The netMon parameter is optional; if non-nil it's used to do faster interface lookups.
func NewDialer ¶
NewDialer returns a new Dialer using a net.Dialer with its Control hook func initialized as necessary to run in a logical network namespace that doesn't route back into Tailscale. It also handles using a SOCKS if configured in the environment with ALL_PROXY. The netMon parameter is optional; if non-nil it's used to do faster interface lookups.