renner.uno and www.renner.uno were pinned to 159.69.42.237 — the VM that hosted WordPress before the migration in #492.
Neither record is live on the UDM any more (verified: a LAN query for www.renner.uno returns the public answer, proxy.renner.uno), so this block was drift waiting to be re-applied. A tofu apply would have pointed the house at a host that is being decommissioned, while the rest of the world already reaches the cluster — a split-brain that does not exist today and should not be re-created.
Their absence is the correct end state, not an omission: www.renner.uno carries dns.renner.uno/public, so external-dns-unifi deliberately writes no UDM record and LAN clients follow the public path (wildcard → proxy) and hairpin back in.
Known gap, not in this PR: the redirect rule drops the query string, so renner.uno/?p=67 lands on the homepage instead of the post. Fixed by enabling Preserve query string on the rule.
`renner.uno` and `www.renner.uno` were pinned to `159.69.42.237` — the VM that hosted WordPress before the migration in #492.
Neither record is live on the UDM any more (verified: a LAN query for `www.renner.uno` returns the public answer, `proxy.renner.uno`), so this block was drift waiting to be re-applied. A `tofu apply` would have pointed the house at a host that is being decommissioned, while the rest of the world already reaches the cluster — a split-brain that does not exist today and should not be re-created.
Their absence is the correct end state, not an omission: `www.renner.uno` carries `dns.renner.uno/public`, so external-dns-unifi deliberately writes no UDM record and LAN clients follow the public path (wildcard → proxy) and hairpin back in.
## Cutover state, measured
| | |
|---|---|
| `www.renner.uno` (authoritative) | CNAME → `proxy.renner.uno` → 45.157.177.26 + IPv6 |
| via the proxy | HTTP 200, cert `CN=www.renner.uno`, Let's Encrypt |
| unlisted SNI (negative control) | `CN=TRAEFIK DEFAULT CERT`, self-signed |
| `renner.uno` | 301 → `https://www.renner.uno/` (Cloudflare redirect rule) |
| `/wp-admin` | 302 → Authentik, login form reachable (4 hops) |
**Known gap, not in this PR:** the redirect rule drops the query string, so `renner.uno/?p=67` lands on the homepage instead of the post. Fixed by enabling *Preserve query string* on the rule.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_014giKN9N6e5J2DF8QZmVh98
renner.uno and www.renner.uno were pinned to 159.69.42.237, the VM that hosted
WordPress before it moved into the cluster. Neither record is live on the UDM
any more (verified: a LAN query for www.renner.uno returns the public answer,
proxy.renner.uno), so the file was drift waiting to be re-applied — a tofu
apply would have pointed the house at a host that is being decommissioned,
while the rest of the world already reaches the cluster.
Their absence is the correct end state, not an omission: www.renner.uno
carries dns.renner.uno/public, so external-dns-unifi writes no UDM record by
design and LAN clients take the public path and hairpin back in. The apex
stays with Cloudflare, which now redirects renner.uno/* to www.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014giKN9N6e5J2DF8QZmVh98
🤖Automated review — model claude-sonnet-5 (complexity: normal), commit 0211269b9109566762e7fc8fd44976b100af9d24.
Advisory review by the review-bot pipeline. It never approves; a human merges. Push new commits to get a fresh review.
Summary
This PR removes the "@" (apex) and "www" A records from opentofu/dns_renner_uno.tf (local.renner_uno_records), which pinned renner.uno/www.renner.uno to 159.69.42.237, the retired Hetzner VM. It's a one-file, comment-heavy terraform change with no logic beyond deleting a map entry and no blocking issues.
I verified the supporting claims against the rest of the repo rather than taking them on faith:
kubernetes/apps/wordpress/ingress.yaml:18 confirms www.renner.uno is served by an Ingress labeled dns.renner.uno/public: "true".
kubernetes/infrastructure/external-dns-unifi/helmrelease.yaml:103 confirms external-dns-unifi runs with labelFilter: dns.renner.uno/public!=true, i.e. it deliberately skips writing a UDM record for anything labeled public — consistent with the "external-dns-unifi writes no UDM record for www" claim.
opentofu/unifi_nat_hairpin.tf implements the hairpin DNAT that lets LAN clients on the Default network (idx 0, included in hairpin_networks) reach proxy.renner.uno's public addresses without leaving the LAN — this is what makes "LAN clients follow the public path and hairpin back in" true rather than just plausible, and matches the AAAA-fallback comments already in the same file for udm/captive.
No other file in the repo references 159.69.42.237 or otherwise depends on the removed "@"/"www" map keys (opentofu/scripts/import_dns.py's renner_uno_records hit is a generic resource-address regex, not tied to specific keys).
The one claim I could not verify from the checkout is the apex behavior ("renner.uno → 301 → https://www.renner.uno/ via a Cloudflare redirect rule") — that configuration lives outside this repo. The PR body states it was measured directly, which is reasonable for a repo that has no Cloudflare IaC to check against.
🟡 Suggestions
The comment block (opentofu/dns_renner_uno.tf:3-17) is fairly long for a "why this is absent" note, but it's consistent with this file's existing style (the udm/captive AAAA comments a few lines down are similarly long), so I wouldn't ask for a trim.
Tests
No automated test covers this repo's opentofu/ DNS records (ci-manifests-test.yml is path-filtered to kubernetes/** and .woodpecker/**, so it doesn't run on this diff), and a tofu plan/apply isn't something I can execute here. That's consistent with how the rest of this file is maintained — the correctness case rests on the LAN queries described in the PR body, which I can't reproduce from this checkout. Nothing about that gap is specific to this PR.
Recommendation
Looks reasonable — no blocking issues; comments above are optional.
🤖 **Automated review** — model `claude-sonnet-5` (complexity: normal), commit `0211269b9109566762e7fc8fd44976b100af9d24`.
> Advisory review by the `review-bot` pipeline. It never approves; a human merges. Push new commits to get a fresh review.
---
## Summary
This PR removes the `"@"` (apex) and `"www"` A records from `opentofu/dns_renner_uno.tf` (`local.renner_uno_records`), which pinned `renner.uno`/`www.renner.uno` to `159.69.42.237`, the retired Hetzner VM. It's a one-file, comment-heavy terraform change with no logic beyond deleting a map entry and no blocking issues.
I verified the supporting claims against the rest of the repo rather than taking them on faith:
- `kubernetes/apps/wordpress/ingress.yaml:18` confirms `www.renner.uno` is served by an Ingress labeled `dns.renner.uno/public: "true"`.
- `kubernetes/infrastructure/external-dns-unifi/helmrelease.yaml:103` confirms `external-dns-unifi` runs with `labelFilter: dns.renner.uno/public!=true`, i.e. it deliberately skips writing a UDM record for anything labeled public — consistent with the "external-dns-unifi writes no UDM record for www" claim.
- `opentofu/unifi_nat_hairpin.tf` implements the hairpin DNAT that lets LAN clients on the `Default` network (idx 0, included in `hairpin_networks`) reach `proxy.renner.uno`'s public addresses without leaving the LAN — this is what makes "LAN clients follow the public path and hairpin back in" true rather than just plausible, and matches the AAAA-fallback comments already in the same file for `udm`/`captive`.
- No other file in the repo references `159.69.42.237` or otherwise depends on the removed `"@"`/`"www"` map keys (`opentofu/scripts/import_dns.py`'s `renner_uno_records` hit is a generic resource-address regex, not tied to specific keys).
The one claim I could *not* verify from the checkout is the apex behavior ("`renner.uno` → 301 → `https://www.renner.uno/` via a Cloudflare redirect rule") — that configuration lives outside this repo. The PR body states it was measured directly, which is reasonable for a repo that has no Cloudflare IaC to check against.
## 🟡 Suggestions
- The comment block (`opentofu/dns_renner_uno.tf:3-17`) is fairly long for a "why this is absent" note, but it's consistent with this file's existing style (the `udm`/`captive` AAAA comments a few lines down are similarly long), so I wouldn't ask for a trim.
## Tests
No automated test covers this repo's `opentofu/` DNS records (`ci-manifests-test.yml` is path-filtered to `kubernetes/**` and `.woodpecker/**`, so it doesn't run on this diff), and a `tofu plan`/`apply` isn't something I can execute here. That's consistent with how the rest of this file is maintained — the correctness case rests on the LAN queries described in the PR body, which I can't reproduce from this checkout. Nothing about that gap is specific to this PR.
## Recommendation
Looks reasonable — no blocking issues; comments above are optional.
<!-- pr-review:sha=0211269b9109566762e7fc8fd44976b100af9d24 -->
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
renner.unoandwww.renner.unowere pinned to159.69.42.237— the VM that hosted WordPress before the migration in #492.Neither record is live on the UDM any more (verified: a LAN query for
www.renner.unoreturns the public answer,proxy.renner.uno), so this block was drift waiting to be re-applied. Atofu applywould have pointed the house at a host that is being decommissioned, while the rest of the world already reaches the cluster — a split-brain that does not exist today and should not be re-created.Their absence is the correct end state, not an omission:
www.renner.unocarriesdns.renner.uno/public, so external-dns-unifi deliberately writes no UDM record and LAN clients follow the public path (wildcard → proxy) and hairpin back in.Cutover state, measured
www.renner.uno(authoritative)proxy.renner.uno→ 45.157.177.26 + IPv6CN=www.renner.uno, Let's EncryptCN=TRAEFIK DEFAULT CERT, self-signedrenner.unohttps://www.renner.uno/(Cloudflare redirect rule)/wp-adminKnown gap, not in this PR: the redirect rule drops the query string, so
renner.uno/?p=67lands on the homepage instead of the post. Fixed by enabling Preserve query string on the rule.🤖 Generated with Claude Code
https://claude.ai/code/session_014giKN9N6e5J2DF8QZmVh98
🤖 Automated review — model
claude-sonnet-5(complexity: normal), commit0211269b9109566762e7fc8fd44976b100af9d24.Summary
This PR removes the
"@"(apex) and"www"A records fromopentofu/dns_renner_uno.tf(local.renner_uno_records), which pinnedrenner.uno/www.renner.unoto159.69.42.237, the retired Hetzner VM. It's a one-file, comment-heavy terraform change with no logic beyond deleting a map entry and no blocking issues.I verified the supporting claims against the rest of the repo rather than taking them on faith:
kubernetes/apps/wordpress/ingress.yaml:18confirmswww.renner.unois served by an Ingress labeleddns.renner.uno/public: "true".kubernetes/infrastructure/external-dns-unifi/helmrelease.yaml:103confirmsexternal-dns-unifiruns withlabelFilter: dns.renner.uno/public!=true, i.e. it deliberately skips writing a UDM record for anything labeled public — consistent with the "external-dns-unifi writes no UDM record for www" claim.opentofu/unifi_nat_hairpin.tfimplements the hairpin DNAT that lets LAN clients on theDefaultnetwork (idx 0, included inhairpin_networks) reachproxy.renner.uno's public addresses without leaving the LAN — this is what makes "LAN clients follow the public path and hairpin back in" true rather than just plausible, and matches the AAAA-fallback comments already in the same file forudm/captive.159.69.42.237or otherwise depends on the removed"@"/"www"map keys (opentofu/scripts/import_dns.py'srenner_uno_recordshit is a generic resource-address regex, not tied to specific keys).The one claim I could not verify from the checkout is the apex behavior ("
renner.uno→ 301 →https://www.renner.uno/via a Cloudflare redirect rule") — that configuration lives outside this repo. The PR body states it was measured directly, which is reasonable for a repo that has no Cloudflare IaC to check against.🟡 Suggestions
opentofu/dns_renner_uno.tf:3-17) is fairly long for a "why this is absent" note, but it's consistent with this file's existing style (theudm/captiveAAAA comments a few lines down are similarly long), so I wouldn't ask for a trim.Tests
No automated test covers this repo's
opentofu/DNS records (ci-manifests-test.ymlis path-filtered tokubernetes/**and.woodpecker/**, so it doesn't run on this diff), and atofu plan/applyisn't something I can execute here. That's consistent with how the rest of this file is maintained — the correctness case rests on the LAN queries described in the PR body, which I can't reproduce from this checkout. Nothing about that gap is specific to this PR.Recommendation
Looks reasonable — no blocking issues; comments above are optional.