Network server racks in a data center representing Tailscale mesh VPN relay infrastructure

Tailscale Peer Relay Feature Guide

August 8, 2026 · 21 min read · By Thomas A. Anderson

Tailscale Peer Relays Six Months After GA: Operational Maturity, Static Endpoints, and Real-World Trade-offs

When Tailscale pushed Peer Relays to general availability on February 18, 2026, initial coverage focused on the headline capability: run your own relay nodes inside your tailnet instead of depending on the global DERP network. That story is well documented. What matters now, six months later, is how the feature has matured from a NAT-workaround into a production networking tool with real architectural implications.

Our earlier analysis of the Tailscale Peer Relays GA announcement covered the step-by-step deployment workflow and the basic performance story from the DevOps and self-hosted angle, including a TrueNAS setup walkthrough. This piece takes a different angle. Here we focus on the operational maturity that has accumulated since launch: how the static endpoints feature changes cloud architecture decisions, the observability tooling that turns relay behavior into measurable data, and where the operational trade-offs still bite. If you are deciding whether to deploy Peer Relays across your fleet in late 2026, this is the update you need.

The beta period for Peer Relays ran for several months before the GA milestone, and feedback from early adopters directly shaped what shipped. During beta, operators discovered that automatic endpoint discovery failed in a wide range of cloud environments. They found that relay performance was hard to measure. They learned that throughput was acceptable for SSH sessions but disappointing for bulk data transfer. Each of these pain points received a targeted fix in the GA release, and understanding those fixes is key to understanding why the feature is now production-ready.

Distributed team technology adoption

Peer Relays turn ordinary tailnet nodes into high-throughput relay infrastructure.

Static Endpoints: The Cloud Breakthrough

The most consequential change in the GA release is static endpoint support. Before this, a Peer Relay had to discover its own reachable endpoints through outbound probing, which fails in many cloud environments. Instances sitting behind strict security groups, behind AWS Network Load Balancers, or in peered public subnets simply could not advertise a reliable address for inbound relay traffic.

The GA release fixes this with the --relay-server-static-endpoints flag on tailscale set. You can now advertise one or more fixed IP:port pairs that live behind infrastructure like an AWS NLB. External clients reach the relay through that load-balanced address even when automatic endpoint discovery produces nothing usable. This single feature unlocks Peer Relays in environments where they were previously impractical.

The practical implication is significant. Teams can now place a relay inside a private VPC, front it with a Network Load Balancer, and let remote clients relay through it without opening arbitrary inbound ports on the instances themselves. That is a materially different deployment posture than the beta-era model, where relays had to sit on publicly reachable nodes. For security teams that had rejected Peer Relays because of the inbound-port requirement, this one flag changes the entire calculus.

Consider a concrete scenario: a team running production workloads in AWS with a strict security posture. Their instances sit in private subnets behind security groups that deny all inbound traffic except from the load balancer. In the beta model, a Peer Relay in this environment was non-functional because the instance could not discover a publicly reachable endpoint. With static endpoints, the operator configures one or more IP:port pairs that correspond to the NLB’s listener configuration. The NLB handles inbound traffic and forwards it to the relay instance. The security group only needs to allow traffic from the NLB, not from arbitrary internet sources. This is the pattern that makes Peer Relays viable in enterprises with mature cloud security practices.

The same pattern applies in other cloud environments. On Google Cloud, a relay behind a TCP load balancer works the same way. On Azure, an instance behind an Azure Load Balancer can advertise the load balancer’s frontend IP. The static endpoint abstraction is cloud-agnostic: it does not care what kind of load balancer sits in front of the relay, only that the address is reachable from clients that need to relay through it.

There is an important operational nuance here. Static endpoints are not auto-discovered, which means they are not validated automatically. If you configure a static endpoint that points to a dead address, clients will attempt to connect and fail. The tailscale ping integration becomes essential in this scenario: you can verify that the relay is reachable through its static endpoint before depending on it in production. The documentation recommends testing each static endpoint after configuration and monitoring relay health through the new metrics to catch failures early.

Observability: From Black Box to Measurable

The beta version of Peer Relays was something of a black box. You knew traffic was being relayed, but you could not tell whether the relay was healthy, how much traffic it was forwarding, or whether it was contributing to degraded latency. The GA release closes that gap with first-class metrics, and the implications for production operations are substantial.

Server room monitoring setup for Tailscale relay metrics
Relay metrics integrate with Prometheus and Grafana for production monitoring.

Two client metrics now ship with the feature: tailscaled_peer_relay_forwarded_packets_total and tailscaled_peer_relay_forwarded_bytes_total. Both are Prometheus-compatible counters that can be scraped alongside existing Tailscale client metrics and exported to Grafana. That gives operators the ability to track relay usage over time, spot saturation before users complain, and understand traffic patterns across the tailnet.

Tailscale peer relays cloud networking infrastructure

Relay metrics integrate with Prometheus and Grafana for production monitoring.

These two counters are simple but powerful. The packets counter tells you how much relay activity is happening. A sudden spike might indicate that direct connections have failed across a segment of your fleet, which is often the first sign of a network regression. A gradual increase over weeks tells you that more devices are falling back to relayed paths, which might indicate growing NAT or firewall friction in your network. The bytes counter tells you the volume of relayed traffic, which is essential for capacity planning. If your relay node is forwarding gigabytes per hour, you know it needs more resources or a sibling relay to share the load.

What makes these metrics particularly useful is that they integrate into existing monitoring workflows. If you already scrape Tailscale client metrics with Prometheus and visualize them in Grafana, adding relay metrics requires no new infrastructure. You add the relay node to your scrape targets and the metrics appear. From there, standard PromQL queries can surface relay usage trends, and standard Grafana alerting can fire when relay throughput exceeds a threshold.

Beyond Prometheus metrics, Peer Relays now integrate directly with tailscale ping. You can test whether a relay is being used, whether it is reachable, and how it affects latency and reliability. This removes the guesswork from troubleshooting. When a connection degrades, you can quickly determine whether traffic is being relayed, whether the relay is healthy, and whether the relay path is the culprit. The ping output includes relay path information, so you can see at a glance whether a connection is going direct, through a peer relay, or through DERP.

The tailscale status command also changed: devices connecting through a Peer Relay now show a connection type of peer-relay rather than direct or relay. That distinction matters for automated monitoring. A script can grep for peer-relay in status output and flag any device that has fallen off the direct path, which is often the first sign of a network regression. Combined with the new metrics, this makes Peer Relays one of the most instrumented components of a tailnet.

For teams running incident response, this observability stack is a meaningful upgrade. Before the GA release, diagnosing a relay problem meant SSH-ing into the relay node and inspecting logs manually. Now, you can check a Grafana dashboard, see that relay throughput has dropped to zero, and know within seconds that the relay is down. You can run tailscale ping from an affected client, see that it is falling back to DERP, and confirm the root cause without touching the relay at all. That is the difference between a black box and a production system.

Throughput Engineering: What GA Release Fixed

The throughput improvements in the GA release are worth understanding at a mechanical level, because they explain why Peer Relays now perform closer to a true mesh than they did in beta. Three changes stand out, and each addresses a specific bottleneck that early adopters encountered.

First, connecting clients now select a more optimal interface and address family when multiple are available within a single relay. In beta, a client might pick a suboptimal path simply because it was the first one discovered. The GA release improves the selection algorithm to prefer higher-bandwidth interfaces and to handle dual-stack environments correctly. That improves bootstrap time and overall connection quality, particularly for clients that have both IPv4 and IPv6 paths available. A client with a 10-gigabit IPv4 interface and a slower IPv6 path will now prefer the faster interface, where beta might have chosen arbitrarily.

Second, traffic is now spread across multiple UDP sockets where available. In beta, all relayed traffic between a client and the relay node used a single UDP socket, which created a bottleneck at high throughput. The GA release distributes traffic across multiple sockets, which reduces contention and raises aggregate throughput. This is particularly impactful for workloads that involve multiple concurrent streams: a file transfer that uses parallel connections, a media streaming session with multiple quality layers, or a database replication stream that runs alongside interactive SSH traffic.

Third, lock contention on the relay itself has been reduced. The relay daemon maintains internal data structures that track client connections, relay bindings, and traffic state. In beta, these data structures were protected by locks that could become contended under heavy load, causing packets to queue while waiting for lock acquisition. The GA release restructures locking to reduce contention, meaning packets are handled more efficiently on every relay node. This is an invisible improvement from an operator’s perspective, but it shows up directly in throughput numbers.

The result, according to Tailscale’s engineering team, is that even when direct peer-to-peer connections are not possible, Peer Relays can now achieve performance much closer to a true mesh. For file transfers, media streaming, and other high-throughput workloads that previously suffered on DERP, this is a meaningful operational improvement. The gap between relayed and direct throughput has narrowed considerably, which changes the cost-benefit analysis for teams that had previously ruled out relayed paths for performance-sensitive workloads.

Peer Relays are not a replacement for DERP. Tailscale’s documentation is explicit that Peer Relays complement DERP, which still plays a critical role in negotiating connections and providing fallback relay options when peer relays are unavailable. A client first tries a direct connection, then checks for available Peer Relays, and only falls back to DERP if no peer relay is reachable. Understanding this precedence order is essential for anyone planning a relay architecture. It also means that DERP remains in the critical path for connection establishment, even when all data traffic flows through peer relays.

Adoption Patterns in 2026

Six months into general availability, the adoption patterns that have emerged tell you where the feature delivers real value. Three use cases dominate, and each maps to a distinct operational need. Understanding which pattern matches your environment is the first step toward a successful deployment.

The first pattern, restricted cloud environments, is the one that static endpoints made possible. Before the GA release, Peer Relays were effectively unusable in any environment where instances could not discover publicly reachable endpoints. That excluded most production cloud deployments with mature security postures. Static endpoints remove that barrier. Teams deploying in these environments now have a high-throughput relay option that does not require opening arbitrary inbound ports, which is a significant security and compliance win.

In practice, this pattern typically involves a relay instance in a private subnet, fronted by a Network Load Balancer or equivalent, with a static endpoint pointing to the load balancer’s address. The security group on the relay instance only needs to allow traffic from the load balancer. Clients outside the VPC reach the relay through the load balancer without ever knowing the instance’s private IP. This is the same architecture that production services use for any internal service that needs external reachability, which means it slots into existing security review processes without requiring exceptions.

The second pattern, full mesh in private subnets, is about topology simplification. For many customers, Peer Relays can replace subnet routers entirely, unlocking full-mesh deployments with core Tailscale features like Tailscale SSH and MagicDNS. Subnet routers have historically been a source of configuration complexity: they require careful route advertisement, they create asymmetric routing scenarios, and they add a layer of indirection that complicates troubleshooting. Peer Relays eliminate that layer. Instead of routing through a subnet router to reach devices in a private subnet, clients relay directly through a peer relay in that subnet, maintaining end-to-end Tailscale connectivity with all the features that come with it.

The third pattern, geographic locality, is straightforward in concept but powerful in practice. Deploying relays in specific regions reduces latency for geographically dispersed tailnet members. A team with offices in Europe and the US can run relays in both regions and let clients automatically prefer the nearest one, rather than routing all relayed traffic through a global DERP node that might be thousands of miles away. The latency improvement is proportional to the distance between the client and the nearest DERP node versus the distance to the nearest peer relay. For teams with offices in regions where DERP coverage is thin, the improvement can be dramatic.

Across all three patterns, the ACL model is central. Peer Relays are controlled through grants in your access control policies, using the tailscale.com/cap/relay app capability. Only devices with that grant can allocate relay bindings on a peer relay, which means relay capacity is a controlled resource that any tailnet device cannot consume. This is the mechanism that prevents a single misconfigured device from overwhelming the relay infrastructure.

Adoption pattern What it enables Core requirement Typical environment
Restricted cloud environments Relay traffic behind AWS NLBs, in private subnets, and in peered VPCs without opening arbitrary inbound ports Static endpoints flag on tailscale set AWS, GCP, Azure with strict security groups
Full mesh in private subnets Replaces subnet routers while keeping Tailscale SSH and MagicDNS Relays deployed inside the subnet Multi-VPC deployments, hybrid cloud
Geographic locality Lower latency for geographically dispersed tailnet members Relays running in each region Multi-office, global teams

The ACL Model and Security Architecture

The security architecture of Peer Relays deserves a closer look, because it determines who can use your relay infrastructure and under what conditions. Getting ACL grants right is the difference between a relay that serves its intended purpose and one that becomes a bottleneck for unintended traffic.

Peer Relays are controlled through grants in your access control policies, using the tailscale.com/cap/relay app capability. A device that holds this capability can are a relay server, accepting relay connections from other devices in the tailnet. The grant is expressed in the tailnet policy file using standard Tailscale ACL syntax, with src specifying which devices receive the capability and dst specifying which relay servers they can use.

The critical design decision is what goes in the src field. The documentation warns against overly permissive targets like a wildcard, because that would make every device in the tailnet attempt to route through the relay. This is not just a security concern; it is a performance concern. If every device in a large tailnet tries to relay through a single node, the relay saturates and throughput collapses for everyone. The src field should typically be limited to devices in stable physical locations behind strict NAT or firewall, not mobile devices that frequently change networks.

A well-designed grant policy separates devices into categories. Devices that are always behind restrictive NAT, such as office workstations behind a corporate firewall, get relay access. Devices that roam between networks, such as laptops and phones, typically do not, because they can often establish direct connections when on open networks and can fall back to DERP when they cannot. Relay servers themselves do not need relay capability; they need a separate configuration to enable relay server mode.

The relay server configuration is separate from the grant policy. A node becomes a relay server by setting the appropriate flag on tailscale set, which enables relay server mode on that node. The grant policy then determines which other devices can use that relay. This separation of concerns means you can deploy relay servers broadly and restrict access through policy, rather than needing to manage relay server configuration on a per-client basis.

Peer Relays can only relay traffic for devices in the same tailnet. There is no cross-tailnet relay capability, which means the relay infrastructure you deploy cannot be used by devices outside your tailnet. This is a hard security boundary enforced by the Tailscale coordination server, not something that can be misconfigured.

Peer Relays vs. DERP: A Detailed Comparison

Understanding the relationship between Peer Relays and DERP is essential for planning a relay architecture. They are not competitors; they are complementary components of the same connectivity stack. But the differences between them determine which one carries your traffic in different scenarios.

DERP, or Designated Encrypted Relay for Packets, is Tailscale’s global relay network. It is operated by Tailscale and provides relay services to every tailnet. DERP nodes are distributed across multiple regions worldwide, and clients automatically select the nearest one when relay is needed. DERP is always available as a fallback, requires zero configuration, and handles connection negotiation as well as data relay.

Peer Relays are relay nodes that you operate yourself, inside your own tailnet. They provide the same relay function as DERP but with several key differences: you control where they are deployed, you can measure their performance, and you can tune their capacity. Peer Relays also offer higher throughput than DERP, thanks to the GA throughput improvements, because they are not shared across multiple tailnets and are not subject to the same resource constraints.

The connection precedence order is fixed: a client first tries a direct peer-to-peer connection. If that fails, it checks whether any Peer Relays are available and reachable. If a peer relay is available, the client uses it. Only if no peer relay is reachable does the client fall back to DERP. This order is not configurable, and it reflects a deliberate design choice: your own infrastructure is preferred over shared infrastructure, but shared infrastructure is always available as a safety net.

Dimension Peer Relays DERP
Operator You (customer-operated) Tailscale (global network)
Connection precedence Tried second (after direct) Tried third (final fallback)
Metrics exposed Prometheus counters for packets and bytes forwarded Not exposed to customers
Status type in tailscale status peer-relay relay
Throughput ceiling Determined by your relay node resources Shared across all tailnets on the node
Static endpoint support Yes, via --relay-server-static-endpoints Not applicable
Geographic placement You choose regions Tailscale’s global distribution
Configuration required ACL grants plus relay server setup None

The table makes clear that Peer Relays and DERP serve different roles in a production architecture. Peer Relays give you control, performance, and observability. DERP gives you zero-configuration availability everywhere. A mature deployment uses both: Peer Relays for traffic patterns you control and understand, DERP for edge cases and the safety net.

Trade-offs and Operational Realities

No feature ships without trade-offs, and Peer Relays have several that operators should plan for before rolling them out across the fleet. These are not reasons to avoid the feature; they are considerations that determine whether your deployment succeeds or frustrates.

Relay capacity is the first consideration. A single relay node can saturate under heavy traffic, and the GA throughput improvements do not eliminate that ceiling. They raise it, but every relay node has finite CPU, memory, and network bandwidth. Teams running high-traffic tailnets need to monitor the new metrics and scale out relay nodes as usage grows. A dedicated relay pool across multiple regions is the pattern that works best in practice, with each relay handling a subset of the tailnet’s devices. The ACL grant model supports this: you can assign different groups of devices to different relays based on geography, network topology, or organizational boundaries.

Availability is the second consideration. If your only relay goes offline, clients revert to DERP automatically. The failover is smooth from the client’s perspective, but it is not free. DERP typically offers lower throughput and higher latency than a well-placed peer relay, so users will notice the degradation. The solution is redundancy: run at least two relays in different availability zones or regions, and ensure that clients have access to more than one relay through ACL policy. The failover between peer relays is handled automatically by the client, which will try each available relay until it finds one that is reachable.

Version compatibility is the third consideration. Peer Relays require a current Tailscale release on both the relay node and the clients that use it. The feature depends on recent client and daemon behavior, so a fleet-wide upgrade is a prerequisite, and mixed-version tailnets will not get the full benefit until every node is current. If you run a large fleet with staggered upgrade cycles, plan the rollout before you depend on relays. A common pattern is to upgrade relay nodes first, then roll out client upgrades in phases, verifying at each phase that relay connectivity works as expected.

Monitoring overhead is the fourth consideration, though it is a minor one. The new metrics are lightweight counters that impose negligible overhead on the relay node. But they do require that your monitoring infrastructure can reach the relay node to scrape them. If your relay sits in a private subnet with no inbound access except through a load balancer, you need to ensure that your Prometheus server can reach it, either through the tailnet itself or through a separate monitoring path. This is not unique to Peer Relays; it applies to any service you deploy in a private subnet.

Finally, the security model deserves attention. Peer Relays can only relay traffic for devices in the same tailnet, and the grant rule that assigns relay capability is the access control mechanism. The documentation warns against overly permissive targets like a wildcard in the grant policy, because that would make every device in the tailnet attempt to route through the relay, potentially causing unintended traffic routing and high latency. The src field should typically be limited to devices in stable physical locations behind strict NAT or firewall, not mobile devices that frequently change networks. A well-scoped grant policy is the single most important configuration decision you will make when deploying Peer Relays.

Conclusion

Tailscale Peer Relays have matured from a beta-era NAT workaround into a production networking tool with real architectural weight. The static endpoints feature unlocks cloud environments that were previously impractical, observability tooling turns relay behavior from a black box into measurable data, and throughput improvements close the performance gap with direct mesh connections.

For teams that deployed Peer Relays in beta, the GA release is worth re-evaluating, particularly if you previously dismissed the feature because your cloud environment could not support automatic endpoint discovery. The static endpoints flag changes that calculus. For teams that have not yet adopted the feature, the adoption patterns are now clear enough to plan around: restricted cloud environments, full mesh in private subnets, and geographic locality. Each pattern has a well-understood architecture and a clear set of prerequisites.

The relationship between Peer Relays and DERP is not competitive; it is complementary. Peer Relays give you control, performance, and observability for traffic patterns you understand. DERP provides a zero-configuration safety net for everything else. A mature deployment uses both, with Peer Relays handling the bulk of relayed traffic and DERP catching the edge cases.

The trade-offs are real but manageable. Monitor the new relay metrics, run redundant relays across regions, keep every node on a current Tailscale version, and scope your ACL grants carefully. Do that, and Peer Relays deliver a level of control, performance, and observability that DERP alone cannot match. Six months after GA, the feature has earned its place in the production networking toolkit.

Key Takeaways

  • Static endpoints via --relay-server-static-endpoints unlock Peer Relays in restrictive cloud environments where automatic endpoint discovery fails, enabling deployment behind AWS NLBs and in private subnets.
  • New Prometheus metrics (tailscaled_peer_relay_forwarded_packets_total and tailscaled_peer_relay_forwarded_bytes_total) make relay behavior measurable and auditable, integrating with existing Grafana dashboards.
  • Throughput improvements from multi-socket UDP, better interface selection, and reduced lock contention bring relayed traffic closer to true mesh performance for file transfers and streaming workloads.
  • Peer Relays complement DERP rather than replace it; clients try direct, then peer relay, then DERP fallback in a fixed precedence order.
  • The ACL grant model using tailscale.com/cap/relay is the central security mechanism; scope grants carefully to prevent relay saturation and unintended traffic routing.
  • Plan for relay capacity, availability through redundancy, and fleet-wide version compatibility before rolling out Peer Relays across production tailnets.

For teams evaluating the hardware side of self-hosted networking and AI workloads, understanding which GPU is best for running local large language models can inform decisions about the compute resources you dedicate to relay nodes and other infrastructure. Similarly, if you are containerizing your relay infrastructure, modern Docker multi-stage build patterns can help you keep relay images small and maintainable.

More in-depth coverage from this blog on closely related topics:

Sources and References

Sources cited while researching and writing this article:

Thomas A. Anderson

Mass-produced in late 2022, upgraded frequently. Has opinions about Kubernetes that he formed in roughly 0.3 seconds. Occasionally flops, but don't we all? The One with AI can dodge the bullets easily; it's like one ring to rule them all... sort of...