{"slug":"set-up-high-availability","title":"Set up high availability","tags":["tailscale"],"agent_summary":"Last validated: Oct 3, 2025","trigger_phrases":[],"runnable":false,"markdown":"\r\n# Set up high availability\r\n\r\nLast validated: Oct 3, 2025\r\n\r\nWhen using [subnet routers](https://tailscale.com/docs/features/subnet-routers) or [app connectors](https://tailscale.com/docs/features/app-connectors) in large networks, you may want to set up high availability to ensure users of your network can continue to access resources if one routing device goes offline, or to increase performance across a global workforce. Tailscale offers two methods of building redundancy into a network.\r\n\r\n## [Failover](https://tailscale.com/docs/how-to/set-up-high-availability\\#failover)\r\n\r\nFailoveris available for [all plans](https://tailscale.com/pricing).\r\n\r\nFailover lets customers deploy _overlapping connectors_ (that is, app connectors that advertise the same apps, or subnet routers that advertise the same routes). In a failover scheme, one connector is used at a time by all clients. If it goes offline another connector is used.\r\nConnector selection occurs in the order of the dates when you added the connectors to the tailnet. The oldest connector is the \"primary\", and failover occurs in oldest-first order. Failover can take up to ~15 seconds after a primary connector goes offline.\r\n\r\nFailover is the default behavior: overlapping connectors will automatically exhibit this behavior, which is available on all plans.\r\n\r\n## [Regional routing](https://tailscale.com/docs/how-to/set-up-high-availability\\#regional-routing)\r\n\r\nRegional routingis available for [the Premium and Enterprise plans](https://tailscale.com/pricing).\r\n\r\nRegional routing lets customers deploy a global fleet of _overlapping connectors_ (that is, app connectors that advertise the same apps, or subnet routers that advertise the same routes). Overlapping connectors are grouped into regions that map to Tailscale's [DERP regions](https://tailscale.com/docs/reference/derp-servers).\r\n\r\nUpon connecting to Tailscale, client devices identify which regional routing group is closest to them by finding the closest DERP server. This works by having clients report their latencies to the nearest active DERP servers, after which clients are assigned a regional routing group. Each client is then instructed to send traffic bound to a given applicable destination directly to the closest connector. The client re-evaluates its choice of regional routing group periodically. If a region no longer has available connectors, another region is used, giving the network global high availability and improved performance for a global workforce.\r\n\r\nIf multiple overlapping connectors exist within a region, the specific connector used within that region depends on one of two behaviors:\r\n\r\n### [In-region load balancing (default)](https://tailscale.com/docs/how-to/set-up-high-availability\\#in-region-load-balancing-default)\r\n\r\nWithin a [DERP region](https://tailscale.com/docs/reference/derp-servers), if multiple overlapping connectors exist, then load is spread evenly across the connectors on a best-effort basis. The algorithm is as follows: each client has a stable pseudorandom order of routing preference for the set of nodes in a region. If the top preferred node is unavailable the client is directed to the next most preferred node. As a side effect, this behavior creates a \"stickiness\": clients will be routed to a specific connector within a region, unless that connector is unavailable.\r\n\r\n### [In-region failover](https://tailscale.com/docs/how-to/set-up-high-availability\\#in-region-failover)\r\n\r\nAn admin can request to disable in-region load balancing and instead opt for in-region failover when regional routing is enabled. To disable in-region load balancing while regional routing is enabled, [contact support](https://tailscale.com/contact/support) and request in-region failover when using regional routing. Failover exhibits the behavior described in [Failover](https://tailscale.com/docs/how-to/set-up-high-availability#failover), limited to the scope of a single DERP region.\r\n\r\n### [Enabling regional routing for your tailnet](https://tailscale.com/docs/how-to/set-up-high-availability\\#enabling-regional-routing-for-your-tailnet)\r\n\r\n1. Open the [General](https://login.tailscale.com/admin/settings/general) settings page of the admin console.\r\n2. Enable the **Regional Routing** option.\r\n\r\nThe traffic for Tailscale clients will automatically be routed to the nearest region with an active overlapping connector. This is a global preference; all overlapping connectors will exhibit the same tailnet-wide settings.\r\n\r\n### [Example use cases for regional routing](https://tailscale.com/docs/how-to/set-up-high-availability\\#example-use-cases-for-regional-routing)\r\n\r\n#### [On-ramping remote employees to transit backbones](https://tailscale.com/docs/how-to/set-up-high-availability\\#on-ramping-remote-employees-to-transit-backbones)\r\n\r\nYou can use subnet routers in conjunction with regional routing to on-ramp remote employee traffic to transit gateways such as AWS Transit Gateway, Google Cloud Interconnect, Azure ExpressRoute, and other virtual private transit providers. By placing a subnet router in front of each network on-ramp point, regional routing will automatically route device traffic on to the transit provider as quickly as possible.\r\n\r\n#### [Connecting to a globally replicated application or VPC](https://tailscale.com/docs/how-to/set-up-high-availability\\#connecting-to-a-globally-replicated-application-or-vpc)\r\n\r\nYou can use subnet routers in conjunction with regional routing to connect to applications or VPCs that are globally replicated across your cloud provider's regions, or across multiple cloud providers. By placing a subnet router in front of each application or VPC, regional routing will automatically route device traffic on to the nearest version of that application or VPC. When using this methodology, the application must be available from the same set of IP addresses within the same high availability subnet route. In this way, you can easily deploy and connect to a globally distributed application, with multi-cloud failover built right in.\r\n\r\n#### [Connecting to a SaaS app for a global workforce](https://tailscale.com/docs/how-to/set-up-high-availability\\#connecting-to-a-saas-app-for-a-global-workforce)\r\n\r\nYou can use app connectors alongside regional routing to connect to SaaS apps from a globally distributed workforce to increase performance for your entire organization, while maintaining necessary [access controls](https://tailscale.com/docs/features/access-control). By placing an app connector near each office or branch, regional routing will automatically route device traffic on to the nearest app connector, and out to the target SaaS app. In this way you can deploy and connect to SaaS, with performance and reliability built right in.\r\n\r\n## [App connector high availability](https://tailscale.com/docs/how-to/set-up-high-availability\\#app-connector-high-availability)\r\n\r\n### [Step 1: Set up multiple app connectors](https://tailscale.com/docs/how-to/set-up-high-availability\\#step-1-set-up-multiple-app-connectors)\r\n\r\nFollow [our guide to configure app connectors](https://tailscale.com/docs/features/app-connectors), assigning all app connectors to the same [tag](https://tailscale.com/docs/features/tags). For example, to create multiple app connectors on the `tag:connector`, you'll want to run a command like this on 2+ machines.\r\n\r\n```shell\r\nsudo tailscale up --advertise-connector --advertise-tags=\"tag:connector\"\r\n```\r\n\r\n### [Step 2: Assign an app to the app connectors](https://tailscale.com/docs/how-to/set-up-high-availability\\#step-2-assign-an-app-to-the-app-connectors)\r\n\r\nFollow [our guide to configure app connectors](https://tailscale.com/docs/features/app-connectors), assigning an app to multiple app connectors by using the same `tag:connector` [tag](https://tailscale.com/docs/features/tags).\r\n\r\n### [Step 3: Done](https://tailscale.com/docs/how-to/set-up-high-availability\\#step-3-done)\r\n\r\nOnce you have 2+ app connectors exposing the same apps on the same network,\r\nthe Tailscale control server will automatically manage the failover between\r\nthe different connectors. In failover mode, if an app connector is disconnected from the\r\ncontrol plane for more than 15 seconds, traffic will be routed to another\r\napp connector. In regional routing mode, if the connectors are in different regions, clients will be assigned to each based on their closest available DERP region.\r\n\r\n## [Subnet router high availability](https://tailscale.com/docs/how-to/set-up-high-availability\\#subnet-router-high-availability)\r\n\r\n### [Step 1: Set up multiple subnet routers](https://tailscale.com/docs/how-to/set-up-high-availability\\#step-1-set-up-multiple-subnet-routers)\r\n\r\nFollow [our guide to configure subnet routers](https://tailscale.com/docs/features/subnet-routers), exposing the same routes on the same network on 2+ devices. For example, to expose `10.0.0.0/24,10.1.0.0/24`, you'll want to run a command like this on 2+ devices.\r\n\r\n```shell\r\nsudo tailscale set --advertise-routes=10.0.0.0/24,10.1.0.0/24\r\n```\r\n\r\nYou can configure as many subnet routers as you want to act as a failover.\r\n\r\nFailover only works between subnet routers that advertise the exact same route prefix. A broader route does not serve as a fallback for a more-specific route.\r\n\r\nFor example, if one subnet router advertises `10.0.0.0/24` and another advertises `10.0.0.0/16`, they are not failover candidates for each other. If the `/24` router goes offline, Tailscale drops traffic to `10.0.0.0/24` rather than falling back to the `/16` route.\r\n\r\nTo configure failover correctly, have multiple subnet routers advertise the same routes:\r\n\r\n```shell\r\n# Run on 2+ subnet routers to enable failover for both prefixes\r\nsudo tailscale set --advertise-routes=10.0.0.0/24,172.16.5.0/24\r\n```\r\n\r\nIf you need a broader route to also serve as a fallback for a more-specific prefix, configure the broader-route router to advertise both prefixes. For more information, refer to [overlapping subnet route failover](https://tailscale.com/docs/reference/troubleshooting/network-configuration/overlapping-subnet-route-failover).\r\n\r\nWhen setting up subnet routers for high availability (HA), be careful with the `--accept-routes` flag. If you turn on `--accept-routes` for subnet routers that share the same routes in the same region, the standby router will accept its own advertised routes from the primary router.\r\n\r\nThis leads to an inefficient routing path. The standby router will send traffic for its directly connected subnet through the primary router instead. For example, if both subnet routers advertise and accept the same route, such as `192.168.1.0/24`, the standby router will send all `192.168.1.0/24` traffic through the primary router, even though it is directly connected to that network.\r\n\r\nFor most HA subnet router setups, use the `--advertise-routes` flag alone. Avoid using `--accept-routes` unless you specifically need that routing behavior.\r\n\r\n### [Step 2: Activate the subnet routers in the admin console](https://tailscale.com/docs/how-to/set-up-high-availability\\#step-2-activate-the-subnet-routers-in-the-admin-console)\r\n\r\nOpen the [Machines](https://login.tailscale.com/admin/machines) page of the admin console, locate your subnet router and using the ![ellipsis icon](https://tailscale.com/files/images/icons/fa-ellipsis-h.svg) menu at the end of the table, select **Review subnet routes**. This will open up the Subnet settings.\r\n\r\nSelect **Enable** on your routes so that Tailscale distributes the subnet routes to the rest of the nodes on your Tailscale network.\r\n\r\nYou may want to disable key expiry on your server to avoid having to periodically reauthenticate. Refer to [key expiry](https://tailscale.com/docs/features/access-control/key-expiry) for more information about machine keys and how to disable their expiry.\r\n\r\n### [Step 3: Done](https://tailscale.com/docs/how-to/set-up-high-availability\\#step-3-done-1)\r\n\r\nOnce you have 2+ subnet routers exposing the same route on the same network,\r\nthe Tailscale control server will automatically manage the failover between\r\nthe different routers. In failover mode, if a subnet router is disconnected from the\r\ncontrol plane for more than 15 seconds, traffic will be routed to another\r\nsubnet router. In regional routing mode, if the subnet routers are in different regions, clients will be assigned to each based on their closest available DERP region.\r\n\r\n## [Limitations](https://tailscale.com/docs/how-to/set-up-high-availability\\#limitations)\r\n\r\n- Regional routing does not use [custom DERP servers](https://tailscale.com/docs/reference/derp-servers/custom-derp-servers). Refer to [issue #12993](https://github.com/tailscale/tailscale/issues/12993) for updates.\r\n\r\n![Project Logo](https://cdn.brandfetch.io/tailscale.com/fallback/lettermark/theme/dark/h/256/w/256/icon?c=1bfwsmEH20zzEfSNTed)\r\n\r\nAsk AI\r\n\r\nreCAPTCHA\r\n\r\nRecaptcha requires verification.\r\n\r\nprotected by **reCAPTCHA**\r\n","html":"<h1>Set up high availability</h1>\n<p>Last validated: Oct 3, 2025</p>\n<p>When using <a href=\"https://tailscale.com/docs/features/subnet-routers\">subnet routers</a> or <a href=\"https://tailscale.com/docs/features/app-connectors\">app connectors</a> in large networks, you may want to set up high availability to ensure users of your network can continue to access resources if one routing device goes offline, or to increase performance across a global workforce. Tailscale offers two methods of building redundancy into a network.</p>\n<h2><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#failover\">Failover</a></h2>\n<p>Failoveris available for <a href=\"https://tailscale.com/pricing\">all plans</a>.</p>\n<p>Failover lets customers deploy <em>overlapping connectors</em> (that is, app connectors that advertise the same apps, or subnet routers that advertise the same routes). In a failover scheme, one connector is used at a time by all clients. If it goes offline another connector is used.\r\nConnector selection occurs in the order of the dates when you added the connectors to the tailnet. The oldest connector is the \"primary\", and failover occurs in oldest-first order. Failover can take up to ~15 seconds after a primary connector goes offline.</p>\n<p>Failover is the default behavior: overlapping connectors will automatically exhibit this behavior, which is available on all plans.</p>\n<h2><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#regional-routing\">Regional routing</a></h2>\n<p>Regional routingis available for <a href=\"https://tailscale.com/pricing\">the Premium and Enterprise plans</a>.</p>\n<p>Regional routing lets customers deploy a global fleet of <em>overlapping connectors</em> (that is, app connectors that advertise the same apps, or subnet routers that advertise the same routes). Overlapping connectors are grouped into regions that map to Tailscale's <a href=\"https://tailscale.com/docs/reference/derp-servers\">DERP regions</a>.</p>\n<p>Upon connecting to Tailscale, client devices identify which regional routing group is closest to them by finding the closest DERP server. This works by having clients report their latencies to the nearest active DERP servers, after which clients are assigned a regional routing group. Each client is then instructed to send traffic bound to a given applicable destination directly to the closest connector. The client re-evaluates its choice of regional routing group periodically. If a region no longer has available connectors, another region is used, giving the network global high availability and improved performance for a global workforce.</p>\n<p>If multiple overlapping connectors exist within a region, the specific connector used within that region depends on one of two behaviors:</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#in-region-load-balancing-default\">In-region load balancing (default)</a></h3>\n<p>Within a <a href=\"https://tailscale.com/docs/reference/derp-servers\">DERP region</a>, if multiple overlapping connectors exist, then load is spread evenly across the connectors on a best-effort basis. The algorithm is as follows: each client has a stable pseudorandom order of routing preference for the set of nodes in a region. If the top preferred node is unavailable the client is directed to the next most preferred node. As a side effect, this behavior creates a \"stickiness\": clients will be routed to a specific connector within a region, unless that connector is unavailable.</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#in-region-failover\">In-region failover</a></h3>\n<p>An admin can request to disable in-region load balancing and instead opt for in-region failover when regional routing is enabled. To disable in-region load balancing while regional routing is enabled, <a href=\"https://tailscale.com/contact/support\">contact support</a> and request in-region failover when using regional routing. Failover exhibits the behavior described in <a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#failover\">Failover</a>, limited to the scope of a single DERP region.</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#enabling-regional-routing-for-your-tailnet\">Enabling regional routing for your tailnet</a></h3>\n<ol>\n<li>Open the <a href=\"https://login.tailscale.com/admin/settings/general\">General</a> settings page of the admin console.</li>\n<li>Enable the <strong>Regional Routing</strong> option.</li>\n</ol>\n<p>The traffic for Tailscale clients will automatically be routed to the nearest region with an active overlapping connector. This is a global preference; all overlapping connectors will exhibit the same tailnet-wide settings.</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#example-use-cases-for-regional-routing\">Example use cases for regional routing</a></h3>\n<h4><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#on-ramping-remote-employees-to-transit-backbones\">On-ramping remote employees to transit backbones</a></h4>\n<p>You can use subnet routers in conjunction with regional routing to on-ramp remote employee traffic to transit gateways such as AWS Transit Gateway, Google Cloud Interconnect, Azure ExpressRoute, and other virtual private transit providers. By placing a subnet router in front of each network on-ramp point, regional routing will automatically route device traffic on to the transit provider as quickly as possible.</p>\n<h4><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#connecting-to-a-globally-replicated-application-or-vpc\">Connecting to a globally replicated application or VPC</a></h4>\n<p>You can use subnet routers in conjunction with regional routing to connect to applications or VPCs that are globally replicated across your cloud provider's regions, or across multiple cloud providers. By placing a subnet router in front of each application or VPC, regional routing will automatically route device traffic on to the nearest version of that application or VPC. When using this methodology, the application must be available from the same set of IP addresses within the same high availability subnet route. In this way, you can easily deploy and connect to a globally distributed application, with multi-cloud failover built right in.</p>\n<h4><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#connecting-to-a-saas-app-for-a-global-workforce\">Connecting to a SaaS app for a global workforce</a></h4>\n<p>You can use app connectors alongside regional routing to connect to SaaS apps from a globally distributed workforce to increase performance for your entire organization, while maintaining necessary <a href=\"https://tailscale.com/docs/features/access-control\">access controls</a>. By placing an app connector near each office or branch, regional routing will automatically route device traffic on to the nearest app connector, and out to the target SaaS app. In this way you can deploy and connect to SaaS, with performance and reliability built right in.</p>\n<h2><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#app-connector-high-availability\">App connector high availability</a></h2>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#step-1-set-up-multiple-app-connectors\">Step 1: Set up multiple app connectors</a></h3>\n<p>Follow <a href=\"https://tailscale.com/docs/features/app-connectors\">our guide to configure app connectors</a>, assigning all app connectors to the same <a href=\"https://tailscale.com/docs/features/tags\">tag</a>. For example, to create multiple app connectors on the <code>tag:connector</code>, you'll want to run a command like this on 2+ machines.</p>\n<pre><code class=\"language-shell\">sudo tailscale up --advertise-connector --advertise-tags=\"tag:connector\"\n</code></pre>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#step-2-assign-an-app-to-the-app-connectors\">Step 2: Assign an app to the app connectors</a></h3>\n<p>Follow <a href=\"https://tailscale.com/docs/features/app-connectors\">our guide to configure app connectors</a>, assigning an app to multiple app connectors by using the same <code>tag:connector</code> <a href=\"https://tailscale.com/docs/features/tags\">tag</a>.</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#step-3-done\">Step 3: Done</a></h3>\n<p>Once you have 2+ app connectors exposing the same apps on the same network,\r\nthe Tailscale control server will automatically manage the failover between\r\nthe different connectors. In failover mode, if an app connector is disconnected from the\r\ncontrol plane for more than 15 seconds, traffic will be routed to another\r\napp connector. In regional routing mode, if the connectors are in different regions, clients will be assigned to each based on their closest available DERP region.</p>\n<h2><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#subnet-router-high-availability\">Subnet router high availability</a></h2>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#step-1-set-up-multiple-subnet-routers\">Step 1: Set up multiple subnet routers</a></h3>\n<p>Follow <a href=\"https://tailscale.com/docs/features/subnet-routers\">our guide to configure subnet routers</a>, exposing the same routes on the same network on 2+ devices. For example, to expose <code>10.0.0.0/24,10.1.0.0/24</code>, you'll want to run a command like this on 2+ devices.</p>\n<pre><code class=\"language-shell\">sudo tailscale set --advertise-routes=10.0.0.0/24,10.1.0.0/24\n</code></pre>\n<p>You can configure as many subnet routers as you want to act as a failover.</p>\n<p>Failover only works between subnet routers that advertise the exact same route prefix. A broader route does not serve as a fallback for a more-specific route.</p>\n<p>For example, if one subnet router advertises <code>10.0.0.0/24</code> and another advertises <code>10.0.0.0/16</code>, they are not failover candidates for each other. If the <code>/24</code> router goes offline, Tailscale drops traffic to <code>10.0.0.0/24</code> rather than falling back to the <code>/16</code> route.</p>\n<p>To configure failover correctly, have multiple subnet routers advertise the same routes:</p>\n<pre><code class=\"language-shell\"># Run on 2+ subnet routers to enable failover for both prefixes\r\nsudo tailscale set --advertise-routes=10.0.0.0/24,172.16.5.0/24\n</code></pre>\n<p>If you need a broader route to also serve as a fallback for a more-specific prefix, configure the broader-route router to advertise both prefixes. For more information, refer to <a href=\"https://tailscale.com/docs/reference/troubleshooting/network-configuration/overlapping-subnet-route-failover\">overlapping subnet route failover</a>.</p>\n<p>When setting up subnet routers for high availability (HA), be careful with the <code>--accept-routes</code> flag. If you turn on <code>--accept-routes</code> for subnet routers that share the same routes in the same region, the standby router will accept its own advertised routes from the primary router.</p>\n<p>This leads to an inefficient routing path. The standby router will send traffic for its directly connected subnet through the primary router instead. For example, if both subnet routers advertise and accept the same route, such as <code>192.168.1.0/24</code>, the standby router will send all <code>192.168.1.0/24</code> traffic through the primary router, even though it is directly connected to that network.</p>\n<p>For most HA subnet router setups, use the <code>--advertise-routes</code> flag alone. Avoid using <code>--accept-routes</code> unless you specifically need that routing behavior.</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#step-2-activate-the-subnet-routers-in-the-admin-console\">Step 2: Activate the subnet routers in the admin console</a></h3>\n<p>Open the <a href=\"https://login.tailscale.com/admin/machines\">Machines</a> page of the admin console, locate your subnet router and using the <img src=\"https://tailscale.com/files/images/icons/fa-ellipsis-h.svg\" alt=\"ellipsis icon\"> menu at the end of the table, select <strong>Review subnet routes</strong>. This will open up the Subnet settings.</p>\n<p>Select <strong>Enable</strong> on your routes so that Tailscale distributes the subnet routes to the rest of the nodes on your Tailscale network.</p>\n<p>You may want to disable key expiry on your server to avoid having to periodically reauthenticate. Refer to <a href=\"https://tailscale.com/docs/features/access-control/key-expiry\">key expiry</a> for more information about machine keys and how to disable their expiry.</p>\n<h3><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#step-3-done-1\">Step 3: Done</a></h3>\n<p>Once you have 2+ subnet routers exposing the same route on the same network,\r\nthe Tailscale control server will automatically manage the failover between\r\nthe different routers. In failover mode, if a subnet router is disconnected from the\r\ncontrol plane for more than 15 seconds, traffic will be routed to another\r\nsubnet router. In regional routing mode, if the subnet routers are in different regions, clients will be assigned to each based on their closest available DERP region.</p>\n<h2><a href=\"https://tailscale.com/docs/how-to/set-up-high-availability#limitations\">Limitations</a></h2>\n<ul>\n<li>Regional routing does not use <a href=\"https://tailscale.com/docs/reference/derp-servers/custom-derp-servers\">custom DERP servers</a>. Refer to <a href=\"https://github.com/tailscale/tailscale/issues/12993\">issue #12993</a> for updates.</li>\n</ul>\n<p><img src=\"https://cdn.brandfetch.io/tailscale.com/fallback/lettermark/theme/dark/h/256/w/256/icon?c=1bfwsmEH20zzEfSNTed\" alt=\"Project Logo\"></p>\n<p>Ask AI</p>\n<p>reCAPTCHA</p>\n<p>Recaptcha requires verification.</p>\n<p>protected by <strong>reCAPTCHA</strong></p>\n"}