From a5d4a42119b1464c2ad02e3b24f8f04099107d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Mon, 12 May 2025 18:06:58 +0800 Subject: [PATCH] Add missing `accept_routes` option for Tailscale --- docs/configuration/endpoint/tailscale.md | 5 +++++ option/tailscale.go | 1 + protocol/tailscale/endpoint.go | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/docs/configuration/endpoint/tailscale.md b/docs/configuration/endpoint/tailscale.md index 298b68ce..612a86e6 100644 --- a/docs/configuration/endpoint/tailscale.md +++ b/docs/configuration/endpoint/tailscale.md @@ -15,6 +15,7 @@ icon: material/new-box "control_url": "", "ephemeral": false, "hostname": "", + "accept_routes": false, "exit_node": "", "exit_node_allow_lan_access": false, "advertise_routes": [], @@ -62,6 +63,10 @@ System hostname is used by default. Example: `localhost` +#### accept_routes + +Indicates whether the node should accept routes advertised by other nodes. + #### exit_node The exit node name or IP address to use. diff --git a/option/tailscale.go b/option/tailscale.go index 30579fc7..7b901770 100644 --- a/option/tailscale.go +++ b/option/tailscale.go @@ -11,6 +11,7 @@ type TailscaleEndpointOptions struct { ControlURL string `json:"control_url,omitempty"` Ephemeral bool `json:"ephemeral,omitempty"` Hostname string `json:"hostname,omitempty"` + AcceptRoutes bool `json:"accept_routes,omitempty"` ExitNode string `json:"exit_node,omitempty"` ExitNodeAllowLANAccess bool `json:"exit_node_allow_lan_access,omitempty"` AdvertiseRoutes []netip.Prefix `json:"advertise_routes,omitempty"` diff --git a/protocol/tailscale/endpoint.go b/protocol/tailscale/endpoint.go index 26aa6ebd..92f40562 100644 --- a/protocol/tailscale/endpoint.go +++ b/protocol/tailscale/endpoint.go @@ -72,6 +72,7 @@ type Endpoint struct { filter *atomic.Pointer[filter.Filter] onReconfig wgengine.ReconfigListener + acceptRoutes bool exitNode string exitNodeAllowLANAccess bool advertiseRoutes []netip.Prefix @@ -170,6 +171,7 @@ func NewEndpoint(ctx context.Context, router adapter.Router, logger log.ContextL network: service.FromContext[adapter.NetworkManager](ctx), platformInterface: service.FromContext[platform.Interface](ctx), server: server, + acceptRoutes: options.AcceptRoutes, exitNode: options.ExitNode, exitNodeAllowLANAccess: options.ExitNodeAllowLANAccess, advertiseRoutes: options.AdvertiseRoutes, @@ -226,6 +228,10 @@ func (t *Endpoint) Start(stage adapter.StartStage) error { localBackend := t.server.ExportLocalBackend() perfs := &ipn.MaskedPrefs{ + Prefs: ipn.Prefs{ + RouteAll: t.acceptRoutes, + }, + RouteAllSet: true, ExitNodeIPSet: true, AdvertiseRoutesSet: true, }