This commit is contained in:
bluepython508 committed 2026-10-22 12:27:19 +01:00
1 parent 3530afb854
commit 6903fcff27
2146 files changed
+112256 -190703

No files matched your search

+47 -4
View File
@@ -1,11 +1,14 @@
// Copyright (c) Tailscale Inc & AUTHORS
// Copyright (c) Tailscale Inc & contributors
// SPDX-License-Identifier: BSD-3-Clause
package ipn
import (
"errors"
"fmt"
"net/netip"
"tailscale.com/net/tsaddr"
"tailscale.com/tailcfg"
"tailscale.com/types/opt"
"tailscale.com/types/preftype"
@@ -29,8 +32,9 @@ type ConfigVAlpha struct {
ExitNode *string `json:"exitNode,omitempty"` // IP, StableID, or MagicDNS base name
AllowLANWhileUsingExitNode opt.Bool `json:"allowLANWhileUsingExitNode,omitempty"`
AdvertiseRoutes []netip.Prefix `json:",omitempty"`
DisableSNAT opt.Bool `json:",omitempty"`
AdvertiseRoutes []netip.Prefix `json:",omitempty"`
AdvertiseExitNode opt.Bool `json:",omitzero"`
DisableSNAT opt.Bool `json:",omitzero"`
AdvertiseServices []string `json:",omitempty"`
@@ -43,6 +47,7 @@ type ConfigVAlpha struct {
RunSSHServer opt.Bool `json:",omitempty"` // Tailscale SSH
RunWebClient opt.Bool `json:",omitempty"`
ShieldsUp opt.Bool `json:",omitempty"`
RemoteConfig opt.Bool `json:",omitzero"` // delegate full remote control to the tailnet admin; see Prefs.RemoteConfig
AutoUpdate *AutoUpdatePrefs `json:",omitempty"`
ServeConfigTemp *ServeConfig `json:",omitempty"` // TODO(bradfitz,maisem): make separate stable type for this
@@ -50,6 +55,15 @@ type ConfigVAlpha struct {
// should advertise amongst its wireguard endpoints.
StaticEndpoints []netip.AddrPort `json:",omitempty"`
// RelayServerPort is the UDP port for the relay server to bind to.
// A value of 0 will pick a random unused port. Nil disables relay server.
RelayServerPort *uint16 `json:",omitzero"`
// RelayServerStaticEndpoints are static IP:port endpoints to advertise
// as candidates for relay connections. Only relevant when RelayServerPort
// is non-nil.
RelayServerStaticEndpoints []netip.AddrPort `json:",omitempty"`
// TODO(bradfitz,maisem): future something like:
// Profile map[string]*Config // keyed by alice@gmail.com, corp.com (TailnetSID)
}
@@ -101,12 +115,29 @@ func (c *ConfigVAlpha) ToPrefs() (MaskedPrefs, error) {
mp.ExitNodeAllowLANAccessSet = true
}
if c.AdvertiseRoutes != nil {
var routeErrs []error
for _, route := range c.AdvertiseRoutes {
if route != route.Masked() {
routeErrs = append(routeErrs, fmt.Errorf("route %s has non-address bits set; expected %s", route, route.Masked()))
}
}
if err := errors.Join(routeErrs...); err != nil {
return mp, err
}
mp.AdvertiseRoutes = c.AdvertiseRoutes
mp.AdvertiseRoutesSet = true
}
if c.AdvertiseExitNode.EqualBool(true) {
if mp.AdvertiseRoutesSet {
mp.AdvertiseRoutes = append(mp.AdvertiseRoutes, tsaddr.AllIPv4(), tsaddr.AllIPv6())
} else {
mp.AdvertiseRoutes = tsaddr.ExitRoutes()
mp.AdvertiseRoutesSet = true
}
}
if c.DisableSNAT != "" {
mp.NoSNAT = c.DisableSNAT.EqualBool(true)
mp.NoSNAT = true
mp.NoSNATSet = true
}
if c.NoStatefulFiltering != "" {
mp.NoStatefulFiltering = c.NoStatefulFiltering
@@ -137,6 +168,10 @@ func (c *ConfigVAlpha) ToPrefs() (MaskedPrefs, error) {
mp.ShieldsUp = c.ShieldsUp.EqualBool(true)
mp.ShieldsUpSet = true
}
if c.RemoteConfig != "" {
mp.RemoteConfig = c.RemoteConfig.EqualBool(true)
mp.RemoteConfigSet = true
}
if c.AutoUpdate != nil {
mp.AutoUpdate = *c.AutoUpdate
mp.AutoUpdateSet = AutoUpdatePrefsMask{ApplySet: true, CheckSet: true}
@@ -155,5 +190,13 @@ func (c *ConfigVAlpha) ToPrefs() (MaskedPrefs, error) {
if c.AdvertiseServices != nil {
mp.AdvertiseServices = c.AdvertiseServices
}
mp.RelayServerPortSet = true
mp.RelayServerStaticEndpointsSet = true
if c.RelayServerPort != nil {
mp.RelayServerPort = c.RelayServerPort
}
if c.RelayServerStaticEndpoints != nil {
mp.RelayServerStaticEndpoints = c.RelayServerStaticEndpoints
}
return mp, nil
}