tailscale/feature
Adrian Dewhurst 477d5a43df ipn/ipnlocal, feature/conn25: add hook for accepting PeerAPI DNS
Currently, PeerAPI DNS is only allowed if
1. The peer is owned by the same user as this device, or
2. The node is an exit node or app connector
  a. and the peer has access to a hypothetical DNS server at 0.0.0.0:53
     (which approximately means "the peer has access to
     autogroup:internet")

None of this is useful for conn25. This adds the most basic of hooks
(and converts the existing logic to a hook, which should improve clarity
and lead to the possibility of moving the existing checks into feature
packages in future).

There is an extra filter based on the name being queried that is
performed later. It refuses names in
tailcfg.DNSConfig.ExitNodeFilteredSet. That filter is not modified by
this change.

With this change, if conn25 is configured as a connector, then all
PeerAPI DNS queries are permitted (still subject to the
ExitNodeFilteredSet as noted above).

More work is required: the goal before release (i.e. the WIPCode check
is removed) is that each query should be checked against the list of
domains in the requested conn25 app. For now, this only verifies that
conn25 is configured (and does not include the autogroup:internet
check, which is not how conn25 grants will operate when implemented,
soon).

This change has been manually tested against the scenario outlined in
tailscale/corp#40117; unfortunately the code's structure makes writing a
unit test difficult. The more comprehensive changes needed for
tailscale/corp#40076 should include an integration test that covers this
case.

The hook must go in the ipnlocal package rather than the usual extension
host to prevent a circular dependency on the ipnlocal.PeerAPIHandler
interface. Registering PeerAPI handlers uses a similar strategy, likely
because of, at least in part, this same problem.

Updates tailscale/corp#40076
Fixes tailscale/corp#40117

Change-Id: I367714170b509d7a421f62672e5824b3590c2b9c
Signed-off-by: Adrian Dewhurst <adrian@tailscale.com>
2026-06-29 16:33:33 -04:00
..
ace all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
acme ipn/ipnlocal, feature/acme: move most remaining cert code into feature/acme 2026-06-29 12:57:22 -07:00
appconnectors all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
awsparamstore cmd/tailscale/cli: allow fetching keys from AWS Parameter Store 2026-01-29 18:09:56 -05:00
buildfeatures control/controlknobs,feature/*,ipn/ipnlocal,tailcfg: add runtimemetrics 2026-05-26 16:02:01 -07:00
c2n all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
capture all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
clientupdate feature/clientupdate: windows update should use tailscale.exe update (#19438) 2026-04-17 10:28:35 -07:00
condlite/expvar all: fix duplicate package docs and tighten TestPackageDocs 2026-04-24 19:01:43 -07:00
condregister feature/acme, ipn/ipnlocal: start moving ACME/cert state into an extension 2026-06-26 09:48:24 -07:00
conn25 ipn/ipnlocal, feature/conn25: add hook for accepting PeerAPI DNS 2026-06-29 16:33:33 -04:00
debugportmapper util: add parse fallback helpers (#20022) 2026-06-15 15:58:51 -07:00
doctor ipn/ipnlocal, all: split LocalBackend.NetMap into NetMapNoPeers / NetMapWithPeers 2026-04-30 11:14:06 -07:00
drive all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
featuretags control/controlknobs,feature/*,ipn/ipnlocal,tailcfg: add runtimemetrics 2026-05-26 16:02:01 -07:00
identityfederation cmd/vet: add subtestnames analyzer; fix all existing violations 2026-04-05 15:52:51 -07:00
linkspeed all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
linuxdnsfight all: use Go 1.26 things, run most gofix modernizers 2026-03-06 13:32:03 -08:00
oauthkey cmd/vet: add subtestnames analyzer; fix all existing violations 2026-04-05 15:52:51 -07:00
portlist feature/portlist: address case where poller misses CollectServices updates 2026-03-04 13:07:23 -08:00
portmapper all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
posture posture: add HealthTracker for serial number retrieval (#19181) 2026-04-25 15:42:47 -03:00
relayserver control/controlknobs,net/{batching,tstun},wgengine: add nodecaps to disable UDP & TUN GRO/GSO 2026-05-27 17:10:14 -07:00
routecheck tailcfg,net/routecheck: add NodeAttrClientSideReachabilityRouteCheck (#20169) 2026-06-25 18:22:15 -07:00
runtimemetrics control/controlknobs,feature/*,ipn/ipnlocal,tailcfg: add runtimemetrics 2026-05-26 16:02:01 -07:00
sdnotify all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
ssh ipn/ipnlocal, feature/ssh: move SSH code out of LocalBackend to feature 2026-03-10 17:27:17 -07:00
syspolicy all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
taildrop feature/taildrop: replace outgoing-file progress channel with synchronous reporter 2026-05-27 12:00:34 -07:00
tailnetlock ipn/ipnlocal: consolidate test-only LocalBackend methods behind ForTest 2026-06-27 16:11:42 -07:00
tap all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
tpm ipn/store: make WriteState(id, nil) delete key instead of adding nil entry (#19920) 2026-05-29 11:22:14 -07:00
tundevstats feature/*,net/tstun: add tundev_txq_drops clientmetric on Linux 2026-03-24 09:44:58 -07:00
useproxy all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
wakeonlan all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
feature.go all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00
hooks.go ipn/ipnlocal, feature/ssh: move SSH code out of LocalBackend to feature 2026-03-10 17:27:17 -07:00
sdnotify.go all: remove AUTHORS file and references to it 2026-01-23 15:49:45 -08:00