Mike O'Driscoll 55751c3d6d
derp/derpserver: add server-level not-here cache for absent peer drops
Add a sync.Map cache on the Server that tracks destination keys not
connected to this server. When a packet arrives for a cached absent
destination, the payload is discarded via bufio.Reader.Discard without
allocating a buffer, taking the server mutex, or looking up the client
map. Cache entries expire after a configurable TTL (10s) and are
invalidated in registerClient when a peer connects.

Move the cache check into recvPacket so handleFrameSendPacket does not
need to duplicate the frame validation and key reading logic. When the
cache is hit, recvPacket returns nil contents and the caller returns
early.

Increase peerGoneLim from 3/sec to 50/sec per client. The not-here
cache now provides per-destination rate limiting, so the per-client
limiter serves only as a safety backstop against clients sending to
many unique absent destinations.

```
name                                      old ns/op  new ns/op  delta
HandleFrameSendPacketAbsent/same_key      570        131        -77%
HandleFrameSendPacketAbsent/unique_keys   559        145        -74%
(0 B/op, 0 allocs/op on cache hits; was 280 B/op, 8 allocs/op)
```

Updates #38509
2026-03-27 10:51:32 -04:00
2026-03-24 11:40:14 -07:00
2026-03-27 08:41:33 +00:00
2026-01-27 16:15:17 -08:00
2026-03-17 17:25:24 -07:00
2026-03-16 13:51:04 -07:00
2026-03-16 13:51:04 -07:00
2026-03-16 13:51:04 -07:00
2026-03-16 13:51:04 -07:00
2026-03-06 11:27:29 -08:00
2026-03-16 13:51:04 -07:00

Tailscale

https://tailscale.com

Private WireGuard® networks made easy

Overview

This repository contains the majority of Tailscale's open source code. Notably, it includes the tailscaled daemon and the tailscale CLI tool. The tailscaled daemon runs on Linux, Windows, macOS, and to varying degrees on FreeBSD and OpenBSD. The Tailscale iOS and Android apps use this repo's code, but this repo doesn't contain the mobile GUI code.

Other Tailscale repos of note:

For background on which parts of Tailscale are open source and why, see https://tailscale.com/opensource/.

Using

We serve packages for a variety of distros and platforms at https://pkgs.tailscale.com.

Other clients

The macOS, iOS, and Windows clients use the code in this repository but additionally include small GUI wrappers. The GUI wrappers on non-open source platforms are themselves not open source.

Building

We always require the latest Go release, currently Go 1.25. (While we build releases with our Go fork, its use is not required.)

go install tailscale.com/cmd/tailscale{,d}

If you're packaging Tailscale for distribution, use build_dist.sh instead, to burn commit IDs and version info into the binaries:

./build_dist.sh tailscale.com/cmd/tailscale
./build_dist.sh tailscale.com/cmd/tailscaled

If your distro has conventions that preclude the use of build_dist.sh, please do the equivalent of what it does in your distro's way, so that bug reports contain useful version information.

Bugs

Please file any issues about this code or the hosted service on the issue tracker.

Contributing

PRs welcome! But please file bugs. Commit messages should reference bugs.

We require Developer Certificate of Origin Signed-off-by lines in commits.

See commit-messages.md (or skim git log) for our commit message style.

About Us

Tailscale is primarily developed by the people at https://github.com/orgs/tailscale/people. For other contributors, see:

WireGuard is a registered trademark of Jason A. Donenfeld.

Description
The easiest, most secure way to use WireGuard and 2FA.
Readme BSD-3-Clause 119 MiB
Languages
Go 95.5%
C 1.7%
TypeScript 1.1%
Shell 0.6%
Swift 0.3%
Other 0.5%