From 4036674794f2aa5752f7ef0ae936d46741ede2aa Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Thu, 4 Jun 2026 13:10:22 -0700 Subject: [PATCH 1/3] Document relay authentication Relays from Iroh Services now require authentication by default: only a project's own endpoints can connect, using a short-lived token the iroh_services::preset() builder mints from the project's API key. - concepts/relays: add an Authentication section explaining how it works (allow-set, per-endpoint token, live revocation, on/off toggle) - managed: authenticated-by-default framing + "Turn authentication off" section with dashboard screenshot - access: API keys now also authorize dedicated relay connections - add new authenticated preset config snippet; use it in add-a-relay and managed - reword public/private as authentication on/off (a relay with auth off is not discoverable) Co-Authored-By: Claude Opus 4.8 (1M context) --- add-a-relay.mdx | 20 +++++++++----- concepts/relays.mdx | 20 ++++++++++++++ deployment/dedicated-infrastructure.mdx | 4 +-- images/relay-auth-toggle.png | Bin 0 -> 108613 bytes iroh-services/access.mdx | 16 ++++++++---- iroh-services/relays/managed.mdx | 30 ++++++++++++++++++--- iroh-services/relays/public.mdx | 2 ++ snippets/relay-preset-config.mdx | 33 ++++++++++++++++++++++++ 8 files changed, 109 insertions(+), 16 deletions(-) create mode 100644 images/relay-auth-toggle.png create mode 100644 snippets/relay-preset-config.mdx diff --git a/add-a-relay.mdx b/add-a-relay.mdx index 2460798..122f723 100644 --- a/add-a-relay.mdx +++ b/add-a-relay.mdx @@ -3,7 +3,7 @@ title: "Use your own relay" description: "Configure dedicated relays so your endpoints don't share infrastructure with the public network" --- -import RelayEndpointConfig from '/snippets/relay-endpoint-config.mdx'; +import RelayPresetConfig from '/snippets/relay-preset-config.mdx'; By default, iroh endpoints use the public relays maintained by [n0.computer](https://n0.computer) to facilitate connections when direct peer-to-peer links aren't possible. The public relays are great for development and testing, but production deployments should run their own. @@ -11,17 +11,23 @@ By default, iroh endpoints use the public relays maintained by [n0.computer](htt Running dedicated relays gives you: -- **Isolation**: your traffic isn't mixed with other developers on the shared public network +- **Isolation**: your traffic isn't mixed with other applications - **Performance**: relays close to your users reduce latency and improve NAT traversal success -- **Capacity**: the public relays are rate-limited; your own relays have no rate limits and capacity you control +- **Capacity**: the shared public infrastructure is rate-limited - **Redundancy**: distribute relays across regions or cloud providers for failover - **Compliance**: keep relayed traffic inside your own network or jurisdiction -Iroh's relay architecture is uniquely suited to multi-relay deployments because relays are stateless. Clients automatically fail over between relays in your list, so adding capacity or surviving an outage is just a matter of running more relay processes. See [Dedicated Infrastructure](/deployment/dedicated-infrastructure) for the deeper architecture story. +Iroh's relay architecture is uniquely suited to multi-relay deployments because +relays are stateless. Clients automatically fail over between relays in your +list, so adding capacity or surviving an outage is just a matter of running more +relay processes. See [Dedicated +Infrastructure](/deployment/dedicated-infrastructure) for the deeper +architecture story. ## Get a relay -You have two paths. Pick **managed** if you want a relay running today without ops work; pick **self-host** if you have infrastructure available and want full control over the deployment. +You have two paths. Pick **managed** if you want a relay running today. But +you're never locked in! You can always self-host later if you want. + + +Relays you self-host outside of Iroh Services are configured directly with `RelayMode::Custom`; see [Dedicated Infrastructure](/deployment/dedicated-infrastructure). ## Recommended setup diff --git a/concepts/relays.mdx b/concepts/relays.mdx index 4891412..d05960a 100644 --- a/concepts/relays.mdx +++ b/concepts/relays.mdx @@ -55,11 +55,31 @@ Dedicated relays are relay servers provisioned exclusively for your project, eit They offer: +- **Authenticated by default**: only your project's endpoints can connect, authenticated automatically with your API key. You can turn authentication off from the dashboard if you want any endpoint that has the URL to be able to use it. - **Isolation**: no noisy neighbors; your traffic is yours alone - **Uptime guarantees**: SLAs available via [Iroh Services](/iroh-services/relays) - **Version locking**: stay on a specific iroh version or run blue/green deployments - **Multi-region & multi-cloud**: deploy relays across regions and providers for resilience +## Authentication + +Dedicated relays require authentication by default, so a relay only carries traffic for endpoints that belong to your project. Authentication is built in — there's nothing extra to wire up beyond your [API key](/iroh-services/access). + +Here's how it works: + +1. **Your relay knows your project.** When Iroh Services provisions a relay, it tells the relay which of your project's API keys are allowed to use it. This allow-set is kept in sync as you create or revoke keys. +2. **Your endpoint presents a token, not the key itself.** When you build an endpoint with the `iroh_services::preset()` builder and your API key, the SDK mints a short-lived, signed access token scoped to that endpoint's identity. The endpoint presents this token when it connects to the relay. Your API key never leaves your application. +3. **The relay verifies and admits.** The relay checks that the token was signed by one of your project's allowed keys and hasn't expired, then admits the connection. An endpoint with no token, an expired token, or a token from a revoked key is refused at the handshake. + +A few things worth knowing: + +- **Revocation is live.** Delete an API key and its access is withdrawn from your relays right away, including connections that are already open. +- **Authentication is a toggle, not a different relay.** Turning authentication off from the dashboard tells the relay to admit any endpoint without a token. Turn it back on and the token check resumes for new connections. See [Turn authentication off](/iroh-services/relays/managed#turn-authentication-off). +- **Turning authentication off doesn't make a relay discoverable.** Your relay is never listed or advertised anywhere. With authentication off, any endpoint that already knows the relay's URL can use it — but it still has to know the URL. +- **Authentication is about access, not privacy.** All relay traffic is end-to-end encrypted regardless. Authentication controls *who may use* your relay; it doesn't change what the relay can see (it still can't read your traffic). + +Self-hosted relays you run outside of Iroh Services manage their own access, so this is handled for you only on managed relays. See [API Keys](/iroh-services/access) for where your key comes from. + ## Deploy your own relay -For full deployment steps, see the [managed relay guide](/iroh-services/relays/managed). +Managed relays from Iroh Services **require authentication by default**, and your endpoints authenticate to them with your project's API key. For that flow — and full deployment steps — see the [managed relay guide](/iroh-services/relays/managed). ## Why use dedicated relays in production? diff --git a/images/relay-auth-toggle.png b/images/relay-auth-toggle.png new file mode 100644 index 0000000000000000000000000000000000000000..cc0f4ecc7b3a4ac4ce07d17b283e6f8cbeb7b3fd GIT binary patch literal 108613 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 literal 0 HcmV?d00001 diff --git a/iroh-services/access.mdx b/iroh-services/access.mdx index 2c97e3d..e8c2db0 100644 --- a/iroh-services/access.mdx +++ b/iroh-services/access.mdx @@ -3,7 +3,7 @@ title: "API Keys" description: "Authenticate your endpoint to Iroh Services to push metrics and connectivity reports" --- -API keys authenticate your endpoint to Iroh Services. Iroh itself is permissionless (connections between endpoints don't need authorization), so API keys only come into play when an endpoint pushes data into your project. +API keys authenticate your endpoint to Iroh Services. Iroh itself is permissionless — connections between two endpoints never need authorization — but the resources in your project belong to you. Your API key is what lets an endpoint push data into your project and connect to your project's dedicated relays. ## What API keys authorize @@ -11,10 +11,11 @@ API keys are required for: - Uploading metrics from endpoints to your project - Sending network diagnostics reports from endpoints to your project +- Connecting to your project's [dedicated relays](/iroh-services/relays/managed), which require authentication by default API keys are **not** required for: -- Synchronizing data across relays +- Connecting through the public relays - [NAT traversal](/concepts/nat-traversal) connections to other iroh endpoints ## Get an API key @@ -44,10 +45,15 @@ let client = Client::builder(&endpoint) .await?; ``` -In production, load the key from a config file or environment variable instead of hardcoding it. +In production, load the key from a config file or environment variable instead +of hardcoding it. -For a full walkthrough (creating an endpoint, naming it, and verifying it on the dashboard) see the [Iroh Services quickstart](/iroh-services/quickstart). +For a full walkthrough (creating an endpoint, naming it, and verifying it on the +dashboard) see the [Iroh Services quickstart](/iroh-services/quickstart). ## What's next -Today, API keys gate access to metrics and net diagnostics uploads. Future versions may support per-resource permissions and time-based access control. If your use case needs that today, [contact us](https://n0.computer/contact). +Today, API keys gate metrics and net diagnostics uploads and access to your +dedicated relays. Future versions may support per-resource permissions and +time-based access control. If your use case needs that today, [contact +us](https://n0.computer/contact). diff --git a/iroh-services/relays/managed.mdx b/iroh-services/relays/managed.mdx index 89c487d..6bcad58 100644 --- a/iroh-services/relays/managed.mdx +++ b/iroh-services/relays/managed.mdx @@ -3,13 +3,14 @@ title: "Managed Hosting" description: "Deploy and configure dedicated relay infrastructure through Iroh Services" --- -import RelayEndpointConfig from '/snippets/relay-endpoint-config.mdx'; +import RelayPresetConfig from '/snippets/relay-preset-config.mdx'; -Managed relays are dedicated relay servers provisioned through the Iroh Services platform and operated by n0.computer. Unlike the [public relays](/iroh-services/relays/public), managed relays are exclusively yours: no shared traffic, no rate limits, and with uptime SLAs. +Managed relays are dedicated relay servers provisioned through the Iroh Services platform and operated by n0.computer. Unlike the [public relays](/iroh-services/relays/public), managed relays are exclusively yours: authenticated by default, no shared traffic, no rate limits, and with uptime SLAs. ## What you get - **Fully managed**: n0.computer handles operations, maintenance, and upgrades +- **Authenticated by default**: only your project's endpoints can connect, authenticated automatically with your API key - **Isolation**: your traffic only; no noisy neighbors - **Version locking**: pin to a specific iroh version or run blue/green deployments - **Multi-region & multi-cloud**: deploy across regions and providers for resilience @@ -41,7 +42,7 @@ Once deployed, your relay URL will appear in the dashboard. Copy it; you'll need Set your endpoint to use your dedicated relay URLs instead of the public relays: - + ### 5. Verify connectivity @@ -49,6 +50,29 @@ Go to your project's **Relays** page to confirm your endpoints are connecting th ![Relay metrics](/images/metrics-relay.png) +## Authentication + +Managed relays **require authentication by default** — only your project's endpoints can connect. There's nothing extra to set up: when you build your endpoint with the [`preset()`](#4-configure-your-endpoint) and your API key, it authenticates automatically. For how this works under the hood, see [relay authentication](/concepts/relays#authentication). + +## Turn authentication off + +If you want any endpoint that has your relay's URL to be able to use it — not just your project's endpoints — you can turn authentication off in your relay's **Settings → Network Settings → Access Control**. Use the **Who may connect** dropdown, then **Save**. + +In the dashboard this control is labeled **Private** (authentication on — only your project's API keys may connect) and **Public** (authentication off). "Public" here means no API key is required to connect; it does not make your relay discoverable. + +![Relay access control settings](/images/relay-auth-toggle.png) + +Turning authentication off doesn't list or advertise your relay anywhere; an +endpoint still has to know the URL to use it. The relay also keeps reporting its +traffic and metrics to your dashboard either way. + +Be careful turning authentication off: any iroh endpoint that learns the URL can +then use the relay, so it may be subject to abuse. We recommend keeping +authentication on for production deployments and only turning it off for testing +or development. + +Public relays still report their traffic and metrics to your dashboard; they just don't require your API key to connect. + ## Recommended setup For production, deploy at least two relays in different geographic regions. If one relay becomes unreachable, iroh automatically falls back to the next one in your list, so your peers will still find each other. diff --git a/iroh-services/relays/public.mdx b/iroh-services/relays/public.mdx index 235ee9c..3ee2ca0 100644 --- a/iroh-services/relays/public.mdx +++ b/iroh-services/relays/public.mdx @@ -5,6 +5,8 @@ description: "Free shared relays for development and hobby use" iroh includes a set of public relays provided by [n0.computer](https://n0.computer), available to all iroh users at no cost. No setup required; they work out of the box. +Public relays are open to every iroh endpoint and need no authentication. This is different from [managed relays](/iroh-services/relays/managed), which require authentication by default so only your project's endpoints can use them. + Public relays are suitable for **development and hobby use only**. For production, use [managed relays](/iroh-services/relays/managed). ## Support policy diff --git a/snippets/relay-preset-config.mdx b/snippets/relay-preset-config.mdx new file mode 100644 index 0000000..0e13285 --- /dev/null +++ b/snippets/relay-preset-config.mdx @@ -0,0 +1,33 @@ +Your dedicated relays require authentication by default. Your endpoint +authenticates to them with your project's API key. The `iroh_services::preset()` builder handles +this for you: it mints a short-lived access token scoped to your endpoint's key +and configures the endpoint to use your relays. + +```rust +use iroh::Endpoint; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + // Build a preset pointing at your dedicated relays, authenticated with + // your project's API key. In production, load the key from a config file + // or environment variable instead of hardcoding it. + let preset = iroh_services::preset() + .relays([ + "YOUR_RELAY_URL_US", + "YOUR_RELAY_URL_EU", + ])? + .api_secret_from_str("YOUR_API_KEY")? + .build()?; + + // Bind the endpoint with the preset, then wait until it's online to + // confirm it has an authorized connection to a relay. + let endpoint = Endpoint::bind(preset).await?; + endpoint.online().await; + + Ok(()) +} +``` + + + Custom relay URLs are available on Pro and Enterprise projects. On a free project, pass your API key to the preset without `relays(...)` to authenticate against the public relays and surface your relay traffic on the dashboard. + From 69d3ad1f32f77348d80befd5196856a3706a2efc Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Thu, 4 Jun 2026 13:17:58 -0700 Subject: [PATCH 2/3] Add cargo add iroh-services to preset snippet The preset config flow uses the iroh-services crate, so show installing it before the example. Co-Authored-By: Claude Opus 4.8 (1M context) --- snippets/relay-preset-config.mdx | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/snippets/relay-preset-config.mdx b/snippets/relay-preset-config.mdx index 0e13285..beb7a5f 100644 --- a/snippets/relay-preset-config.mdx +++ b/snippets/relay-preset-config.mdx @@ -3,6 +3,14 @@ authenticates to them with your project's API key. The `iroh_services::preset()` this for you: it mints a short-lived access token scoped to your endpoint's key and configures the endpoint to use your relays. +Add the `iroh-services` crate to your project: + +```bash +cargo add iroh-services +``` + +Then build a preset and bind your endpoint with it: + ```rust use iroh::Endpoint; From 403d6834025cf284a583fedd297bf24d2cef80b6 Mon Sep 17 00:00:00 2001 From: Rae McKelvey <633012+okdistribute@users.noreply.github.com> Date: Thu, 4 Jun 2026 13:18:12 -0700 Subject: [PATCH 3/3] update text --- concepts/relays.mdx | 4 ++-- deployment/dedicated-infrastructure.mdx | 7 +++++-- iroh-services/relays/managed.mdx | 13 ++++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/concepts/relays.mdx b/concepts/relays.mdx index d05960a..23e70f0 100644 --- a/concepts/relays.mdx +++ b/concepts/relays.mdx @@ -73,9 +73,9 @@ Here's how it works: A few things worth knowing: -- **Revocation is live.** Delete an API key and its access is withdrawn from your relays right away, including connections that are already open. +- **Revocation is live.** Delete an API key and its access is withdrawn from your relays right away, including connections that are already open. The relay will kick off clients using that key, and they won't be able to reconnect until they have a valid token again. - **Authentication is a toggle, not a different relay.** Turning authentication off from the dashboard tells the relay to admit any endpoint without a token. Turn it back on and the token check resumes for new connections. See [Turn authentication off](/iroh-services/relays/managed#turn-authentication-off). -- **Turning authentication off doesn't make a relay discoverable.** Your relay is never listed or advertised anywhere. With authentication off, any endpoint that already knows the relay's URL can use it — but it still has to know the URL. +- **Turning authentication off doesn't make a relay discoverable.** Your relay is never listed or advertised anywhere. With authentication off, any endpoint that already knows the relay's URL can use it, but it still has to know the URL. - **Authentication is about access, not privacy.** All relay traffic is end-to-end encrypted regardless. Authentication controls *who may use* your relay; it doesn't change what the relay can see (it still can't read your traffic). Self-hosted relays you run outside of Iroh Services manage their own access, so this is handled for you only on managed relays. See [API Keys](/iroh-services/access) for where your key comes from. diff --git a/deployment/dedicated-infrastructure.mdx b/deployment/dedicated-infrastructure.mdx index c6e86ca..7c3ebe4 100644 --- a/deployment/dedicated-infrastructure.mdx +++ b/deployment/dedicated-infrastructure.mdx @@ -38,11 +38,14 @@ using dedicated relays instead. ## Using dedicated relays -To use a relay you self-host with your iroh endpoint, configure it with your relay URLs: +To use a specific set of relays with your iroh endpoint, configure your relay URLs as part of an iroh-services preset: -Managed relays from Iroh Services **require authentication by default**, and your endpoints authenticate to them with your project's API key. For that flow — and full deployment steps — see the [managed relay guide](/iroh-services/relays/managed). +Managed relays from Iroh Services **supply authentication by default**, and +your endpoints authenticate to them with your project's API key. For that flow, +and full deployment steps, see the [managed relay +guide](/iroh-services/relays/managed). ## Why use dedicated relays in production? diff --git a/iroh-services/relays/managed.mdx b/iroh-services/relays/managed.mdx index 6bcad58..7640b5f 100644 --- a/iroh-services/relays/managed.mdx +++ b/iroh-services/relays/managed.mdx @@ -56,9 +56,15 @@ Managed relays **require authentication by default** — only your project's end ## Turn authentication off -If you want any endpoint that has your relay's URL to be able to use it — not just your project's endpoints — you can turn authentication off in your relay's **Settings → Network Settings → Access Control**. Use the **Who may connect** dropdown, then **Save**. +If you want any endpoint that has your relay's URL to be able to use it — not +just your project's endpoints — you can turn authentication off in your relay's +**Settings → Network Settings → Access Control**. Use the **Who may connect** +dropdown, then **Save**. -In the dashboard this control is labeled **Private** (authentication on — only your project's API keys may connect) and **Public** (authentication off). "Public" here means no API key is required to connect; it does not make your relay discoverable. +In the dashboard this control is labeled **Private** (authentication on — only +your project's API keys may connect) and **Public** (authentication off). +"Public" here means no API key is required to connect; it does not make your +relay discoverable. ![Relay access control settings](/images/relay-auth-toggle.png) @@ -71,7 +77,8 @@ then use the relay, so it may be subject to abuse. We recommend keeping authentication on for production deployments and only turning it off for testing or development. -Public relays still report their traffic and metrics to your dashboard; they just don't require your API key to connect. +Public relays still report their traffic and metrics to your dashboard; they +just don't require your API key to connect. ## Recommended setup