You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/deployment/split-horizon.md
+3Lines changed: 3 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -54,6 +54,9 @@ When container `app.example.com` starts:
54
54
- Internal DNS → `A` record → `192.0.2.100`
55
55
- External DNS → `CNAME` record → `tunnel.example.com`
56
56
57
+
!!! tip "Companion HTTPS Records"
58
+
When using Technitium for internal DNS, dnsweaver automatically creates companion HTTPS (SVCB) records alongside A/CNAME records. This prevents ECH (Encrypted Client Hello) fallback errors that commonly occur in split-horizon setups where external DNS (e.g., Cloudflare) provides HTTPS records but internal DNS doesn't. See [Technitium — Companion HTTPS Records](../providers/technitium.md#companion-https-records) for details.
59
+
57
60
## Internal-Only Services
58
61
59
62
Some services should only be accessible internally. Use exclusion patterns:
Copy file name to clipboardExpand all lines: docs/faq.md
+12Lines changed: 12 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -173,6 +173,18 @@ Changes are logged but not applied to DNS providers.
173
173
174
174
## Troubleshooting
175
175
176
+
### Firefox or Chrome fails to connect to internal services (ECH errors)
177
+
178
+
Modern browsers use ECH (Encrypted Client Hello) when HTTPS records exist in public DNS. If your internal DNS zone lacks matching HTTPS records, browsers may fail with connection errors or experience delays.
179
+
180
+
**Solution:** dnsweaver's Technitium provider automatically creates companion HTTPS records by default. If you've disabled this, re-enable it:
181
+
182
+
```yaml
183
+
- DNSWEAVER_TECHNITIUM_AUTO_HTTPS_RECORDS=true
184
+
```
185
+
186
+
See [Technitium — Companion HTTPS Records](providers/technitium.md#companion-https-records) for details.
187
+
176
188
### "No matching providers for hostname"
177
189
178
190
The extracted hostname doesn't match any provider's domain patterns. Check:
| `AUTO_HTTPS_RECORDS` | No | `true` | Auto-create companion HTTPS records (see below) |
41
+
| `AUTO_HTTPS_ALPN` | No | `h2` | ALPN protocol for companion HTTPS records |
40
42
41
43
## Getting an API Token
42
44
@@ -144,3 +146,48 @@ For self-signed certificates, either:
144
146
```yaml
145
147
- DNSWEAVER_TECHNITIUM_INSECURE_SKIP_VERIFY=true
146
148
```
149
+
150
+
## Companion HTTPS Records
151
+
152
+
By default, dnsweaver automatically creates companion HTTPS (SVCB Type 65) records whenever it creates an A, AAAA, or CNAME record in Technitium. This prevents **ECH (Encrypted Client Hello) fallback errors** that commonly affect split-horizon DNS environments.
153
+
154
+
### Why This Exists
155
+
156
+
Modern browsers (Firefox 128+, Chrome 131+) use ECH to encrypt the SNI during TLS handshakes. When a public domain has HTTPS records (provided by CDNs like Cloudflare), but your internal DNS zone doesn't, browsers may fail to connect or experience delays trying to use ECH parameters that don't apply internally.
157
+
158
+
The companion HTTPS record tells browsers "this host speaks HTTP/2 over TLS" without ECH, preventing the fallback error.
159
+
160
+
### What Gets Created
161
+
162
+
For each A/AAAA/CNAME record, dnsweaver creates:
163
+
164
+
```
165
+
app.example.com 300 IN HTTPS 1 . alpn="h2"
166
+
```
167
+
168
+
- **Priority 1** (ServiceMode) — overrides any inherited ECH parameters
169
+
- **Target `.`** (self) — the record's own hostname, per RFC 9460
170
+
- **ALPN `h2`** — HTTP/2 over TLS (configurable)
171
+
172
+
### Behavior
173
+
174
+
- **Enabled by default** — no configuration needed
175
+
- **Safe** — skips creation if an HTTPS record already exists (won't overwrite manual records)
176
+
- **Lifecycle-managed** — companion records are deleted when the parent record is removed
177
+
- **Idempotent** — duplicate creation attempts are handled gracefully
178
+
179
+
### Configuration
180
+
181
+
```yaml
182
+
# Disable companion HTTPS records (not recommended for split-horizon setups)
183
+
- DNSWEAVER_TECHNITIUM_AUTO_HTTPS_RECORDS=false
184
+
185
+
# Change the ALPN protocol (default: h2)
186
+
- DNSWEAVER_TECHNITIUM_AUTO_HTTPS_ALPN=h2,h3
187
+
```
188
+
189
+
!!! tip
190
+
If you use Cloudflare for external DNS and Technitium for internal DNS (a common split-horizon setup), companion HTTPS records are essential. Cloudflare provides HTTPS records automatically on their side — Technitium needs them too.
191
+
192
+
!!! note
193
+
This feature only applies to the Technitium provider. Other providers either handle HTTPS records automatically (Cloudflare) or don't support them (Pi-hole, dnsmasq).
0 commit comments