Skip to content

Hostname routing GA + public IP range for initial resolved IPs - #32544

Open
nikitacano wants to merge 4 commits into
productionfrom
ncano/hostname-routing-public-ip-ga
Open

Hostname routing GA + public IP range for initial resolved IPs#32544
nikitacano wants to merge 4 commits into
productionfrom
ncano/hostname-routing-public-ip-ga

Conversation

@nikitacano

@nikitacano nikitacano commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Summary

Hostname routing (Cloudflare Tunnel and Cloudflare Mesh) is now generally available. Alongside GA, the default IPv4 range used for Gateway initial resolved IPs (token IPs) is changing from a CGNAT range (100.80.0.0/16) to a public Cloudflare-owned range (172.64.128.0/20), resolving a conflict with Google Chrome's Local Network Access restrictions (Chrome 142+). IPv6 (2606:4700:0cf1:4000::/64) is unchanged.

Changes

  • Updated the default initial resolved IP range across all docs that reference it: private/public hostname routing, Cloudflare Mesh hostname routes, egress policy host selectors, Access private apps, the reserved IP reference page, and related partials/glossary.
  • Removed Beta badges from Connect a private hostname and Egress through Cloudflare Tunnel (both GA). Egress policy host selectors (host-selectors.mdx) remains a separate, still-beta Gateway feature and is unaffected.
  • Added a new how-to page, Configure initial resolved IPs, with Dashboard (Networking > IP addresses > Address space > Custom IPs, the designated place to view/change this range now that the dashboard supports editing it) and API instructions for checking/changing the range. Uses <CURL> instead of <APIRequest> since the initial_resolved_ip endpoint isn't yet in the docs site's pinned OpenAPI schema commit. Follow-up: switch to <APIRequest> once that schema pin updates.
  • Fixed the Split Tunnel Exclude-mode math on reserved-ips.mdx — the new default range sits outside CGNAT space entirely, so the "add back" CIDR example changes.
  • Added TunnelHostnameRoutingDiagram.astro, modeled on the existing MeshHostnameRoutingDiagram.astro, showing the client → Gateway → Tunnel → destination flow for hostname routing. Placed on Connect a private hostname, which previously had no diagram.
  • Fixed a stale hardcoded 100.80.0.0/16 in the existing MeshHostnameRoutingDiagram.astro.
  • Added a changelog entry (dated Wednesday, 2026-08-12).

Notes for reviewers

  • Verified all DashButton deeplinks and CURL/APIRequest usage against this repo's route/schema validation before pushing. The Custom IPs deeplink (/ip-addresses/address-space/custom-ips) was added to dash-routes/core-manually-defined.json since it's a real route not yet in the auto-generated snapshot.
  • MeshHostnameRoutingDiagram.astro has a pre-existing list-style: none accessibility gap (same pattern fixed in the new Tunnel diagram) and an unused --map-subtle CSS variable, both predating this PR. Left as a follow-up rather than expanding scope here.

@cloudflare-docs-bot

cloudflare-docs-bot Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review

⚠️ 5 warnings, 💡 6 suggestions found in commit 669917d.

👉 Fix in your agent 👈
Fix the following review findings in PR #32544 (https://github.com/cloudflare/cloudflare-docs/pull/32544).

Before making changes, review each finding and present a brief summary table:
- For each finding, state whether you agree, disagree, or need clarification
- If you disagree (e.g. the fix requires disproportionate effort for minimal benefit,
  or the finding is factually incorrect), explain why
- If you need clarification before deciding, ask those questions
- Then share your plan for which issues to tackle and in what order

After triaging, follow this order:
1. Post a comment on this PR for any findings you are skipping, with the finding ID and your reasoning.
2. Then commit the fixes for the legitimate findings.

The comment must come before the commit — the bot reads PR comments when a new
push triggers a review, so skip comments posted after the push will be missed.

---

## Code Review

### Warnings (4)

#### CR-31b2f54efa67 · Glossary definition is stale
- **File:** `src/content/docs/cloudflare-one/networks/routes/configure-initial-resolved-ips.mdx` line 13
- **Issue:** The page uses <GlossaryTooltip term="initial resolved IP">, but the glossary entry for "initial resolved IP" still describes the IPv4 range as `100.80.0.0/16` (CGNAT). This contradicts the page and the rendered partial, which state the new default is `172.64.128.0/20`.
- **Fix:** Update the "initial resolved IP" glossary definition in src/content/glossary/cloudflare-one.yaml to reflect the new default `172.64.128.0/20` range and the configurable IPv4 range.

#### CR-b4a8f09e8641 · Factual inconsistency with glossary definition
- **File:** `src/content/partials/cloudflare-one/gateway/egress-selector-chrome-issue.mdx` line 7
- **Issue:** The partial states the new current default initial resolved IP range is `172.64.128.0/20` and earlier calls `100.80.0.0/16` a legacy default, but the glossary entry for `initial resolved IP` currently defines it as IPs randomly selected from `100.80.0.0/16` with no mention of the new default.
- **Fix:** Update the glossary entry for `initial resolved IP` (in `src/content/glossary/cloudflare-one.yaml`) to describe the new `172.64.128.0/20` default and mark `100.80.0.0/16` as legacy, or add both ranges with context about when each applies.

#### CR-1bd2c1f1b2f2 · Filename/content mismatch on IP type
- **File:** `src/content/partials/cloudflare-one/gateway/egress-selector-cgnat-ips.mdx` line 6
- **Issue:** The partial file is named egress-selector-cgnat-ips, but the added IP ranges are 172.64.128.0/20 and 2606:4700:0cf1:4000::/64, which are public Cloudflare ranges rather than CGNAT (100.64.0.0/10). Existing callers still describe the partial as the 'CGNAT space'.
- **Fix:** Rename the partial to reflect that it now contains initial resolved public IP ranges (e.g., egress-selector-initial-resolved-ips) and update the three callers that still refer to these as CGNAT addresses.

#### CR-f633a07326f9 · Inconsistent documented IP range across docs
- **File:** `src/content/docs/cloudflare-one/networks/connectors/cloudflare-mesh/routes.mdx` line 236
- **Issue:** This change introduces `172.64.128.0/20` as the IPv4 range for hostname routing / Gateway initial resolved IPs. Other published docs still list the IPv4 initial resolved IP range as `100.80.0.0/16`: `src/content/docs/cloudflare-one/networks/routes/reserved-ips.mdx`, `src/content/docs/cloudflare-one/networks/connectors/cloudflare-mesh/client-devices.mdx`, and `src/content/glossary/cloudflare-one.yaml`. The IPv6 range is consistent (`2606:4700:0cf1:4000::/64`), but the IPv4 mismatch is confusing.
- **Fix:** Confirm whether `172.64.128.0/20` replaces `100.80.0.0/16` for all initial resolved IP use cases; if so, update the related pages and glossary to match. If Mesh hostname routing uses a distinct public range, clarify that distinction in the text.

### Suggestions (1)

#### CR-c706a0e901cd · Missing IPv6 range in return-route note
- **File:** `src/content/docs/cloudflare-one/networks/connectors/cloudflare-mesh/routes.mdx` line 298
- **Issue:** The return-route note lists `172.64.128.0/20` for the initial resolved IP range but omits the IPv6 range `2606:4700:0cf1:4000::/64`, even though the prerequisites table and DNS filtering section consistently include both IPv4 and IPv6.
- **Fix:** Add the IPv6 initial resolved IP range to the return-route note, e.g. `2606:4700:0cf1:4000::/64` -> next hop is the Mesh node's local IP.

---

## Style Guide Review

### Warnings (1)

#### SG-77bff0568505 · Avoid directional words
- **File:** `src/content/partials/cloudflare-one/gateway/egress-selector-chrome-issue.mdx` line 9
- **Issue:** Line 9 uses 'below' in 'The workarounds below use Google Chrome Enterprise policies.'
- **Fix:** Replace the directional word with a direct reference, e.g., 'The workarounds under [Workarounds](#workarounds) use...' or rephrase without 'below.'

### Suggestions (5)

#### SG-d28019e6e7a7 · Use APIRequest for Cloudflare API endpoints
- **File:** `src/content/docs/cloudflare-one/networks/routes/configure-initial-resolved-ips.mdx` line 44
- **Issue:** Line adds `<CURL>` documenting the Cloudflare API GET endpoint `/zerotrust/subnets/initial_resolved_ip/$ADDRESS_FAMILY`.
- **Fix:** Use `<APIRequest>` instead of `<CURL>` when documenting Cloudflare API endpoints.

#### SG-7742e5c1dd02 · Use APIRequest for Cloudflare API endpoints
- **File:** `src/content/docs/cloudflare-one/networks/routes/configure-initial-resolved-ips.mdx` line 69
- **Issue:** Line adds `<CURL>` documenting the Cloudflare API PUT endpoint `/zerotrust/subnets/initial_resolved_ip/$ADDRESS_FAMILY`.
- **Fix:** Use `<APIRequest>` instead of `<CURL>` when documenting Cloudflare API endpoints.

#### SG-b6fca2688a3a · Lists with fewer than three items
- **File:** `src/content/changelog/tunnel/2026-08-12-hostname-routing-ga-public-initial-resolved-ips.mdx` line 17
- **Issue:** The added bullet list contains only two items (`Cloudflare Tunnel` and `Cloudflare Mesh`).
- **Fix:** Consider writing the two items as prose or adding a third item so the list has at least three entries.

#### SG-19d6464a6cb4 · Bullet list with fewer than three items should be prose
- **File:** `src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-device-client.mdx` line 154
- **Issue:** Line 154 begins a bulleted list with only two items (`Initial resolved IPs:` and `DNS queries for your private hostname`).
- **Fix:** Combine the two items into prose, for example: 'Cloudflare One Clients must forward initial resolved IPs and DNS queries for your private hostname to Cloudflare.'

#### SG-5f621e5f6c28 · Lists with fewer than three items
- **File:** `src/content/partials/cloudflare-one/gateway/egress-selector-cgnat-ips.mdx` line 6
- **Issue:** Added lines contain a two-item bulleted list (`IPv4` and `IPv6` ranges).
- **Fix:** Consider rewriting the two IP ranges as prose instead of a bullet list.

Code Review

This code review is in beta and may not always be helpful — use your judgment.

Warnings (4)
File Issue
cloudflare-one/networks/routes/configure-initial-resolved-ips.mdx line 13 Glossary definition is stale — The page uses , but the glossary entry for "initial resolved IP" still describes the IPv4 range as 100.80.0.0/16 (CGNAT). This contradicts the page and the rendered partial, which state the new default is 172.64.128.0/20. Fix: Update the "initial resolved IP" glossary definition in src/content/glossary/cloudflare-one.yaml to reflect the new default 172.64.128.0/20 range and the configurable IPv4 range.
partials/cloudflare-one/gateway/egress-selector-chrome-issue.mdx line 7 Factual inconsistency with glossary definition — The partial states the new current default initial resolved IP range is 172.64.128.0/20 and earlier calls 100.80.0.0/16 a legacy default, but the glossary entry for initial resolved IP currently defines it as IPs randomly selected from 100.80.0.0/16 with no mention of the new default. Fix: Update the glossary entry for initial resolved IP (in src/content/glossary/cloudflare-one.yaml) to describe the new 172.64.128.0/20 default and mark 100.80.0.0/16 as legacy, or add both ranges with context about when each applies.
partials/cloudflare-one/gateway/egress-selector-cgnat-ips.mdx line 6 Filename/content mismatch on IP type — The partial file is named egress-selector-cgnat-ips, but the added IP ranges are 172.64.128.0/20 and 2606:4700:0cf1:4000::/64, which are public Cloudflare ranges rather than CGNAT (100.64.0.0/10). Existing callers still describe the partial as the 'CGNAT space'. Fix: Rename the partial to reflect that it now contains initial resolved public IP ranges (e.g., egress-selector-initial-resolved-ips) and update the three callers that still refer to these as CGNAT addresses.
cloudflare-one/networks/connectors/cloudflare-mesh/routes.mdx line 236 Inconsistent documented IP range across docs — This change introduces 172.64.128.0/20 as the IPv4 range for hostname routing / Gateway initial resolved IPs. Other published docs still list the IPv4 initial resolved IP range as 100.80.0.0/16: src/content/docs/cloudflare-one/networks/routes/reserved-ips.mdx, src/content/docs/cloudflare-one/networks/connectors/cloudflare-mesh/client-devices.mdx, and src/content/glossary/cloudflare-one.yaml. The IPv6 range is consistent (2606:4700:0cf1:4000::/64), but the IPv4 mismatch is confusing. Fix: Confirm whether 172.64.128.0/20 replaces 100.80.0.0/16 for all initial resolved IP use cases; if so, update the related pages and glossary to match. If Mesh hostname routing uses a distinct public range, clarify that distinction in the text.
Suggestions (1)
File Issue
cloudflare-one/networks/connectors/cloudflare-mesh/routes.mdx line 298 Missing IPv6 range in return-route note — The return-route note lists 172.64.128.0/20 for the initial resolved IP range but omits the IPv6 range 2606:4700:0cf1:4000::/64, even though the prerequisites table and DNS filtering section consistently include both IPv4 and IPv6. Fix: Add the IPv6 initial resolved IP range to the return-route note, e.g. 2606:4700:0cf1:4000::/64 -> next hop is the Mesh node's local IP.

Conventions

No convention issues found.

Style Guide Review

Warnings (1)
File Issue
partials/cloudflare-one/gateway/egress-selector-chrome-issue.mdx line 9 Avoid directional words — Line 9 uses 'below' in 'The workarounds below use Google Chrome Enterprise policies.' Fix: Replace the directional word with a direct reference, e.g., 'The workarounds under Workarounds use...' or rephrase without 'below.'
Suggestions (5)
File Issue
cloudflare-one/networks/routes/configure-initial-resolved-ips.mdx line 44 Use APIRequest for Cloudflare API endpoints — Line adds <CURL> documenting the Cloudflare API GET endpoint /zerotrust/subnets/initial_resolved_ip/$ADDRESS_FAMILY. Fix: Use <APIRequest> instead of <CURL> when documenting Cloudflare API endpoints.
cloudflare-one/networks/routes/configure-initial-resolved-ips.mdx line 69 Use APIRequest for Cloudflare API endpoints — Line adds <CURL> documenting the Cloudflare API PUT endpoint /zerotrust/subnets/initial_resolved_ip/$ADDRESS_FAMILY. Fix: Use <APIRequest> instead of <CURL> when documenting Cloudflare API endpoints.
changelog/tunnel/2026-08-12-hostname-routing-ga-public-initial-resolved-ips.mdx line 17 Lists with fewer than three items — The added bullet list contains only two items (Cloudflare Tunnel and Cloudflare Mesh). Fix: Consider writing the two items as prose or adding a third item so the list has at least three entries.
cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-device-client.mdx line 154 Bullet list with fewer than three items should be prose — Line 154 begins a bulleted list with only two items (Initial resolved IPs: and DNS queries for your private hostname). Fix: Combine the two items into prose, for example: 'Cloudflare One Clients must forward initial resolved IPs and DNS queries for your private hostname to Cloudflare.'
partials/cloudflare-one/gateway/egress-selector-cgnat-ips.mdx line 6 Lists with fewer than three items — Added lines contain a two-item bulleted list (IPv4 and IPv6 ranges). Fix: Consider rewriting the two IP ranges as prose instead of a bullet list.
Commands

Only codeowners can run commands. Post a comment with the command to trigger it.

Command Description
/review Runs a review now. Incremental if a prior review exists, full if not.
/full-review Re-reviews the entire PR diff from scratch, ignoring incremental history. Useful after a rebase, when you want a fresh review, or if the bot gets out of sync and reports issues that no longer exist.
/ignore-review-limit Permanently lifts the 2-review automatic limit for this PR. Future pushes will trigger reviews as normal.
/disable-auto-review Stops automatic reviews from triggering on future pushes to this PR. Codeowners can still run /review or /full-review manually.
/rebase Rebases the PR branch against production. On conflict, attempts to resolve automatically using AI. Stops with an explanation if confidence is not high enough.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

This pull request requires reviews from CODEOWNERS as it changes files that match the following patterns:

Pattern Owners
*.ts @cloudflare/content-engineering, @kodster28
*.astro @cloudflare/content-engineering, @kodster28
/src/content/changelog/ @cloudflare/pm-changelogs, @cloudflare/product-owners, @hoan-pom
* @cloudflare/product-owners
/src/content/docs/cloudflare-one/access-controls/ @kennyj42, @asamborski, @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners
/src/content/docs/cloudflare-one/networks/connectors/cloudflare-mesh/ @nikitacano, @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners
/src/content/docs/cloudflare-one/networks/connectors/cloudflare-tunnel/ @nikitacano, @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners
/src/content/docs/cloudflare-one/ @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners
/src/content/docs/cloudflare-one/traffic-policies/ @alexmoraru7, @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners
/src/content/docs/load-balancing/ @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners, @ncrouch-cflare, @cbennett-jpg, @emmanuelflores-cf, @fabienne-cf, @gofish
/src/content/partials/cloudflare-one/ @cloudflare/cf1-reviewers, @elithrar, @cloudflare/product-owners
/src/content/partials/networking-services/ @steve-cloudflare, @jeffh-cloudflare, @alpdot, @cloudflare/product-owners

@nikitacano
nikitacano force-pushed the ncano/hostname-routing-public-ip-ga branch from 8e44cc2 to 67b83bc Compare August 5, 2026 10:57
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Preview URL: https://dbd0aeb3.preview.developers.cloudflare.com
Preview Branch URL: https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com

Files with changes (up to 15)

Original Link Updated Link
https://developers.cloudflare.com/cloudflare-one/networks/routes/configure-initial-resolved-ips/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/networks/routes/configure-initial-resolved-ips/
https://developers.cloudflare.com/changelog/post/2026-08-12-hostname-routing-ga-public-initial-resolved-ips/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/changelog/post/2026-08-12-hostname-routing-ga-public-initial-resolved-ips/
https://developers.cloudflare.com/cloudflare-one/networks/routes/reserved-ips/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/networks/routes/reserved-ips/
https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/private-net/cloudflared/connect-private-hostname/
https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-device-client/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-device-client/
https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-mesh/routes/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-mesh/routes/
https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/egress-cloudflared/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/egress-cloudflared/
https://developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/host-selectors/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/traffic-policies/egress-policies/host-selectors/
https://developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/access-controls/applications/non-http/self-hosted-private-app/
https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-mesh/client-devices/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-mesh/client-devices/
https://developers.cloudflare.com/cloudflare-one/traffic-policies/troubleshoot-gateway/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/cloudflare-one/traffic-policies/troubleshoot-gateway/
https://developers.cloudflare.com/load-balancing/private-network/warp-to-tunnel/ https://ncano-hostname-routing-public-ip-ga.preview.developers.cloudflare.com/load-balancing/private-network/warp-to-tunnel/

@nikitacano

Copy link
Copy Markdown
Contributor Author

Triaged the review findings — fixing all of them except one:

SG-6f7fe6807916 (skipping): The 2-item `IPv4:` / `IPv6:` bullet list in `egress-selector-cgnat-ips.mdx` is a pre-existing convention used identically across a dozen+ other files in this repo (WARP CGNAT ranges, device IP ranges, etc.), none of which are flagged for the same rule. This PR only changed the CIDR values on those lines, not the list structure itself. Converting just this one instance to prose would reduce scannability for a quick-reference technical pair and would create inconsistency with the surrounding docs ecosystem rather than resolve one. I'd rather see this addressed as a deliberate, repo-wide style pass than a one-off here.

CR-0248079a6e48: 4 of the 5 files cited were already fixed by an earlier push (reserved-ips.mdx, egress-selector-cgnat-ips.mdx, the WAN tunnel.mdx partial, and the glossary) — this looks like it reviewed a stale diff. The 5th, src/components/cf/MeshHostnameRoutingDiagram.astro, genuinely still hardcodes 100.80.0.0/16 in the diagram and was missed originally. Fixing that now.

All other findings (contraction, root-relative link, directional words, passive voice, semicolon splits) are legitimate and being fixed in the next commit.

nikitacano added a commit that referenced this pull request Aug 5, 2026
…agram

Review findings:
- Fix remaining hardcoded 100.80.0.0/16 in MeshHostnameRoutingDiagram.astro
  (CR-0248079a6e48)
- Remove contraction, use root-relative internal link, remove directional
  words (above/below), split semicolon-joined clauses into separate
  sentences, and rewrite passive voice as active voice in reserved-ips.mdx
  and the changelog entry (SG-3dfd068375a0, SG-e45dffc72174,
  SG-344e30d2eb64, SG-5c7af6376962, SG-5b986e4edf2f, SG-983f7d771c3b,
  SG-29585027da84, SG-e7bfde642a70, SG-486f00ad5738, SG-261ff277316f,
  SG-01bc9aa619e4)
- Skipping SG-6f7fe6807916 (2-item bullet list to prose) per PR comment

New diagram:
- Add TunnelHostnameRoutingDiagram.astro, modeled on the existing
  MeshHostnameRoutingDiagram.astro, showing the same generic flow
  (client -> Gateway -> connector -> destination) adapted for Cloudflare
  Tunnel and its dual private/public hostname destinations
- Place it on connect-private-hostname.mdx (previously had no diagram).
  Not added to egress-cloudflared.mdx, which already has its own
  scenario-specific mermaid diagram for the AWS/egress example
@nikitacano
nikitacano requested review from a team and kodster28 as code owners August 5, 2026 12:22
nikitacano added a commit that referenced this pull request Aug 6, 2026
…agram

Review findings:
- Fix remaining hardcoded 100.80.0.0/16 in MeshHostnameRoutingDiagram.astro
  (CR-0248079a6e48)
- Remove contraction, use root-relative internal link, remove directional
  words (above/below), split semicolon-joined clauses into separate
  sentences, and rewrite passive voice as active voice in reserved-ips.mdx
  and the changelog entry (SG-3dfd068375a0, SG-e45dffc72174,
  SG-344e30d2eb64, SG-5c7af6376962, SG-5b986e4edf2f, SG-983f7d771c3b,
  SG-29585027da84, SG-e7bfde642a70, SG-486f00ad5738, SG-261ff277316f,
  SG-01bc9aa619e4)
- Skipping SG-6f7fe6807916 (2-item bullet list to prose) per PR comment

New diagram:
- Add TunnelHostnameRoutingDiagram.astro, modeled on the existing
  MeshHostnameRoutingDiagram.astro, showing the same generic flow
  (client -> Gateway -> connector -> destination) adapted for Cloudflare
  Tunnel and its dual private/public hostname destinations
- Place it on connect-private-hostname.mdx (previously had no diagram).
  Not added to egress-cloudflared.mdx, which already has its own
  scenario-specific mermaid diagram for the AWS/egress example
@nikitacano
nikitacano force-pushed the ncano/hostname-routing-public-ip-ga branch from b74b02f to f683f97 Compare August 6, 2026 11:17
nikitacano added a commit that referenced this pull request Aug 6, 2026
…agram

Review findings:
- Fix remaining hardcoded 100.80.0.0/16 in MeshHostnameRoutingDiagram.astro
  (CR-0248079a6e48)
- Remove contraction, use root-relative internal link, remove directional
  words (above/below), split semicolon-joined clauses into separate
  sentences, and rewrite passive voice as active voice in reserved-ips.mdx
  and the changelog entry (SG-3dfd068375a0, SG-e45dffc72174,
  SG-344e30d2eb64, SG-5c7af6376962, SG-5b986e4edf2f, SG-983f7d771c3b,
  SG-29585027da84, SG-e7bfde642a70, SG-486f00ad5738, SG-261ff277316f,
  SG-01bc9aa619e4)
- Skipping SG-6f7fe6807916 (2-item bullet list to prose) per PR comment

New diagram:
- Add TunnelHostnameRoutingDiagram.astro, modeled on the existing
  MeshHostnameRoutingDiagram.astro, showing the same generic flow
  (client -> Gateway -> connector -> destination) adapted for Cloudflare
  Tunnel and its dual private/public hostname destinations
- Place it on connect-private-hostname.mdx (previously had no diagram).
  Not added to egress-cloudflared.mdx, which already has its own
  scenario-specific mermaid diagram for the AWS/egress example
@nikitacano
nikitacano force-pushed the ncano/hostname-routing-public-ip-ga branch from f683f97 to dbd0aeb Compare August 6, 2026 11:30
@nikitacano

Copy link
Copy Markdown
Contributor Author

Triaged this review round — fixing 7 of 10, skipping 3:

CR-75191d26a991 & CR-2e38a631e947 (skipping — factually incorrect): Both claim the initial resolved IP glossary entry still says 100.80.0.0/16. Checked src/content/glossary/cloudflare-one.yaml directly on this branch right now — it already reads 172.64.128.0/20 by default, configurable per account. This was fixed earlier in this PR's history; looks like the bot reviewed a stale diff snapshot rather than the current branch head.

SG-1d1e92a91815 (skipping): Same reasoning as the earlier skipped finding on this PR (SG-6f7fe6807916) — the "Non-HTTPS applications" bullet in self-hosted-private-app.mdx contains a nested <Render> component and a follow-up link, so converting the 2-item list to prose would hurt scannability rather than help it, given that structural complexity.

Also fixing CR-5357f89feae6, CR-16b1138e86f9, CR-92354eddb752, CV-438909ac299b, SG-f9a01b8c897a, and SG-30ddbd747707 in the next push. One note on CR-5357f89feae6: MeshHostnameRoutingDiagram.astro has the exact same list-style: none accessibility gap, but it predates this PR (I only touched one hardcoded IP there) — leaving it as a follow-up rather than expanding scope here.

@@ -0,0 +1,39 @@
---
title: Hostname routing is now generally available, with a new public IP range for initial resolved IPs

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you want it to be Tunnel Hostname? or something that calls out what kind of routing it is.

Just thinking about when your changelog gets posted on twitter and stuff like that, might need one extra identifier.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It works for both Tunnel and Mesh, so trying to go generic here :)


import { DashButton, Render, GlossaryTooltip } from "~/components";

[Hostname routing](https://blog.cloudflare.com/tunnel-hostname-routing/) is now generally available. Instead of managing static IP lists and routes, you can route traffic by hostname across multiple Cloudflare One connectors:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not clear what "route traffic by hostname across multiple connectors means"

I would be more explicit here maybe. like:

Tunnel hostname routing now supports routing traffic across multiple Cloudflare One Connectors with a dynamic set of IPs (? or something). Previously, you had to manage static IP address lists.


<Render file="gateway/egress-selector-cgnat-ips" product="cloudflare-one" />

**Why this is changing:** Starting with [Chrome 142](https://developer.chrome.com/release-notes/142), Google Chrome's Local Network Access restrictions block background requests to CGNAT addresses (`100.64.0.0/10`), which included the previous initial resolved IP default (`100.80.0.0/16`). This could silently break hostname-based Gateway features for Chrome users, and required Chrome Enterprise policy workarounds. The new default range is public Cloudflare address space, so it is not affected by this restriction.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this all Chromium browsers or just chrome?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nikitacano added a commit that referenced this pull request Aug 6, 2026
…agram

Review findings:
- Fix remaining hardcoded 100.80.0.0/16 in MeshHostnameRoutingDiagram.astro
  (CR-0248079a6e48)
- Remove contraction, use root-relative internal link, remove directional
  words (above/below), split semicolon-joined clauses into separate
  sentences, and rewrite passive voice as active voice in reserved-ips.mdx
  and the changelog entry (SG-3dfd068375a0, SG-e45dffc72174,
  SG-344e30d2eb64, SG-5c7af6376962, SG-5b986e4edf2f, SG-983f7d771c3b,
  SG-29585027da84, SG-e7bfde642a70, SG-486f00ad5738, SG-261ff277316f,
  SG-01bc9aa619e4)
- Skipping SG-6f7fe6807916 (2-item bullet list to prose) per PR comment

New diagram:
- Add TunnelHostnameRoutingDiagram.astro, modeled on the existing
  MeshHostnameRoutingDiagram.astro, showing the same generic flow
  (client -> Gateway -> connector -> destination) adapted for Cloudflare
  Tunnel and its dual private/public hostname destinations
- Place it on connect-private-hostname.mdx (previously had no diagram).
  Not added to egress-cloudflared.mdx, which already has its own
  scenario-specific mermaid diagram for the AWS/egress example
@nikitacano
nikitacano force-pushed the ncano/hostname-routing-public-ip-ga branch from dbd0aeb to 0f69bce Compare August 6, 2026 15:14
class="tunnel-hostname-diagram not-content"
aria-label="How hostname routing works with Cloudflare Tunnel: a client requests a hostname, Cloudflare Gateway assigns a token IP and rewrites the destination, and the tunnel delivers the traffic to a private host on your network or egresses it to the public Internet"
>
<ol class="flow" role="list">

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚫 [eslint] <eslint.rules.astro/jsx-a11y/no-redundant-roles> reported by reviewdog 🐶
The element ol has an implicit role of list. Defining this explicitly is redundant and should be avoided. (astro/jsx-a11y/no-redundant-roles)

@gofish gofish removed their assignment Aug 6, 2026
nikitacano added a commit that referenced this pull request Aug 6, 2026
…agram

Review findings:
- Fix remaining hardcoded 100.80.0.0/16 in MeshHostnameRoutingDiagram.astro
  (CR-0248079a6e48)
- Remove contraction, use root-relative internal link, remove directional
  words (above/below), split semicolon-joined clauses into separate
  sentences, and rewrite passive voice as active voice in reserved-ips.mdx
  and the changelog entry (SG-3dfd068375a0, SG-e45dffc72174,
  SG-344e30d2eb64, SG-5c7af6376962, SG-5b986e4edf2f, SG-983f7d771c3b,
  SG-29585027da84, SG-e7bfde642a70, SG-486f00ad5738, SG-261ff277316f,
  SG-01bc9aa619e4)
- Skipping SG-6f7fe6807916 (2-item bullet list to prose) per PR comment

New diagram:
- Add TunnelHostnameRoutingDiagram.astro, modeled on the existing
  MeshHostnameRoutingDiagram.astro, showing the same generic flow
  (client -> Gateway -> connector -> destination) adapted for Cloudflare
  Tunnel and its dual private/public hostname destinations
- Place it on connect-private-hostname.mdx (previously had no diagram).
  Not added to egress-cloudflared.mdx, which already has its own
  scenario-specific mermaid diagram for the AWS/egress example
@nikitacano
nikitacano force-pushed the ncano/hostname-routing-public-ip-ga branch from 0f69bce to 414c96d Compare August 6, 2026 15:49
nikitacano and others added 4 commits August 6, 2026 18:06
Hostname routing (Cloudflare Tunnel and Cloudflare Mesh) is now
generally available. Alongside GA, the default IPv4 range used for
Gateway initial resolved IPs (token IPs) is changing from a CGNAT
range (100.80.0.0/16) to a public Cloudflare-owned range
(172.64.128.0/20), resolving a conflict with Google Chrome's Local
Network Access restrictions (Chrome 142+).

- Update all docs referencing the initial resolved IP default across
  private/public hostname routing, Cloudflare Mesh hostname routes,
  egress policy host selectors, Access private apps, reserved IP
  reference, and related partials/glossary
- Remove Beta badges from "Connect a private hostname" and "Egress
  through Cloudflare Tunnel" (GA)
- Add new how-to page: Configure initial resolved IPs (Dashboard +
  API instructions, using CURL pending upstream OpenAPI schema pin
  update for APIRequest support)
- Fix reserved-ips.mdx Split Tunnel Exclude-mode math now that the
  default range sits outside CGNAT space
- Add changelog entry
…agram

Review findings:
- Fix remaining hardcoded 100.80.0.0/16 in MeshHostnameRoutingDiagram.astro
  (CR-0248079a6e48)
- Remove contraction, use root-relative internal link, remove directional
  words (above/below), split semicolon-joined clauses into separate
  sentences, and rewrite passive voice as active voice in reserved-ips.mdx
  and the changelog entry (SG-3dfd068375a0, SG-e45dffc72174,
  SG-344e30d2eb64, SG-5c7af6376962, SG-5b986e4edf2f, SG-983f7d771c3b,
  SG-29585027da84, SG-e7bfde642a70, SG-486f00ad5738, SG-261ff277316f,
  SG-01bc9aa619e4)
- Skipping SG-6f7fe6807916 (2-item bullet list to prose) per PR comment

New diagram:
- Add TunnelHostnameRoutingDiagram.astro, modeled on the existing
  MeshHostnameRoutingDiagram.astro, showing the same generic flow
  (client -> Gateway -> connector -> destination) adapted for Cloudflare
  Tunnel and its dual private/public hostname destinations
- Place it on connect-private-hostname.mdx (previously had no diagram).
  Not added to egress-cloudflared.mdx, which already has its own
  scenario-specific mermaid diagram for the AWS/egress example
Networking > IP addresses > Address space > Custom IPs is the
designated place to view and change the initial resolved IP range
(the dashboard now supports editing it there). Update the how-to page
and changelog to only reference that UI, dropping the Device profiles
and Routes mentions.

Also move the changelog entry to Wednesday, 2026-08-12.
@nikitacano
nikitacano force-pushed the ncano/hostname-routing-public-ip-ga branch from 414c96d to 669917d Compare August 6, 2026 17:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.