From 16f600df8c1b1f66ed5de8ea89eb9056ab42d22e Mon Sep 17 00:00:00 2001 From: scientificworld Date: Tue, 2 Jun 2026 23:13:02 +0800 Subject: [PATCH] ipn/conf: add ConfigVAlpha.AdvertiseExitNode Fixes #19941 Change-Id: I69e63a8036f50cfee2ed770a88f92ce344412f4d Signed-off-by: scientificworld --- ipn/conf.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/ipn/conf.go b/ipn/conf.go index 342ab684e..266cf5592 100644 --- a/ipn/conf.go +++ b/ipn/conf.go @@ -8,6 +8,7 @@ import ( "fmt" "net/netip" + "tailscale.com/net/tsaddr" "tailscale.com/tailcfg" "tailscale.com/types/opt" "tailscale.com/types/preftype" @@ -31,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"` @@ -124,6 +126,14 @@ func (c *ConfigVAlpha) ToPrefs() (MaskedPrefs, error) { 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.NoSNATSet = true