Skip to content

feat: implement DNS64 support#1933

Merged
0xERR0R merged 10 commits intomainfrom
fb-dns64
Jan 8, 2026
Merged

feat: implement DNS64 support#1933
0xERR0R merged 10 commits intomainfrom
fb-dns64

Conversation

@0xERR0R
Copy link
Copy Markdown
Owner

@0xERR0R 0xERR0R commented Nov 14, 2025

closes #1698

@0xERR0R 0xERR0R requested a review from Copilot November 14, 2025 22:12
@codecov
Copy link
Copy Markdown

codecov bot commented Nov 14, 2025

Codecov Report

❌ Patch coverage is 92.66409% with 19 lines in your changes missing coverage. Please review.
✅ Project coverage is 90.22%. Comparing base (3075c38) to head (3dccdc6).
⚠️ Report is 8 commits behind head on main.

Files with missing lines Patch % Lines
resolver/dns64_resolver.go 91.41% 11 Missing and 6 partials ⚠️
config/config.go 0.00% 1 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #1933      +/-   ##
==========================================
+ Coverage   90.15%   90.22%   +0.06%     
==========================================
  Files          92       94       +2     
  Lines        6575     6813     +238     
==========================================
+ Hits         5928     6147     +219     
- Misses        498      510      +12     
- Partials      149      156       +7     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR implements DNS64 support per RFC 6147, enabling IPv6-only clients to access IPv4-only services by synthesizing AAAA records from A records. The implementation includes a new DNS64 resolver with comprehensive test coverage, configuration validation, and detailed documentation.

Key Changes

  • New DNS64Resolver that intercepts AAAA queries, queries for A records when no native IPv6 exists, and synthesizes AAAA records using configurable IPv6 prefixes
  • Resolver chain reorganization: DNS64 placed after caching (to avoid synthesizing cached responses), ECS moved after DNS64 (to apply client subnet to both AAAA and A queries)
  • Configuration with prefix validation, exclusion set support, and conflict detection (e.g., AAAA filtering)

Reviewed Changes

Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
server/server.go Adds DNS64Resolver to resolver chain after caching, moves ECSResolver after DNS64
resolver/dns64_resolver.go Core DNS64 implementation with IPv4-to-IPv6 embedding per RFC 6052, exclusion set handling, and DNSSEC flag management
resolver/dns64_resolver_test.go Comprehensive unit tests covering synthesis, exclusion sets, TTL handling, DNSSEC flags, and edge cases
e2e/dns64_test.go End-to-end integration tests for DNS64 with caching, CNAME chains, multiple prefixes, and exclusion sets
config/dns64.go Configuration structure with validation for prefix lengths, overlap detection, and conflict checking
config/dns64_test.go Configuration validation tests
config/config.go Integrates DNS64 config into main Config struct with validation
model/models.go Adds ResponseTypeSYNTHESIZED with EDE code mapping
model/models_enum.go Adds SYNTHESIZED enum value to ResponseType
docs/configuration.md Comprehensive DNS64 documentation covering RFC compliance, configuration, exclusion sets, and DNSSEC handling
docs/config.yml Example DNS64 configuration with detailed comments

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

Copilot reviewed 11 out of 11 changed files in this pull request and generated 5 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

…e NXDOMAIN handling

* Updated DNS64 prefix bits mapping in documentation for accuracy.
* Enhanced NXDOMAIN handling in the resolver to include original AAAA query in synthetic responses.
@0xERR0R 0xERR0R marked this pull request as ready for review November 18, 2025 20:49
* Added comprehensive test cases for `ExtractRecords` and `ExtractRecordsFromSlice` methods.
* Refactored record header initialization using `CreateHeader` utility for consistency.
@github-actions
Copy link
Copy Markdown
Contributor

github-actions bot commented Jan 7, 2026

This PR is stale because it has been open 45 days with no activity. Remove stale label or comment or this will be closed in 10 days.

@github-actions github-actions bot added Stale and removed Stale labels Jan 7, 2026
@0xERR0R 0xERR0R added this to the v0.29.0 milestone Jan 8, 2026
@0xERR0R 0xERR0R added the 🔨 enhancement New feature or request label Jan 8, 2026
@0xERR0R 0xERR0R enabled auto-merge (squash) January 8, 2026 07:14
@0xERR0R 0xERR0R disabled auto-merge January 8, 2026 07:14
@0xERR0R 0xERR0R merged commit 011e3eb into main Jan 8, 2026
27 checks passed
@0xERR0R 0xERR0R deleted the fb-dns64 branch January 8, 2026 07:15
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Feb 27, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [0xerr0r/blocky](https://github.com/0xerr0r/blocky) | minor | `v0.28.2` → `v0.29.0` |
| [ghcr.io/0xerr0r/blocky](https://github.com/0xERR0R/blocky) | minor | `v0.28.2` → `v0.29.0` |

---

### Release Notes

<details>
<summary>0xerr0r/blocky (0xerr0r/blocky)</summary>

### [`v0.29.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.29.0)

[Compare Source](0xERR0R/blocky@v0.28.2...v0.29.0)

#### Changelog

##### Features

- [`0c35f21`](0xERR0R/blocky@0c35f21): feat: add RFC 7239 Forwarded header support for client IP parsing ([#&#8203;1941](0xERR0R/blocky#1941)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`011e3eb`](0xERR0R/blocky@011e3eb): feat: implement DNS64 support ([#&#8203;1933](0xERR0R/blocky#1933)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`e199445`](0xERR0R/blocky@e199445): feat: improve IP parsing from X-Forwarded-For header ([#&#8203;1940](0xERR0R/blocky#1940)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Bug fixes

- [`257fe07`](0xERR0R/blocky@257fe07): fix: Incorrect rate data shown on Grafana dashboards ([#&#8203;1948](0xERR0R/blocky#1948)) ([@&#8203;mattdy](https://github.com/mattdy))
- [`1a4d22d`](0xERR0R/blocky@1a4d22d): fix: db automigration with timescaledb ([#&#8203;1975](0xERR0R/blocky#1975)) ([@&#8203;manofthepeace](https://github.com/manofthepeace))
- [`9874212`](0xERR0R/blocky@9874212): fix: use context based versions of net.Listen and net.Dial ([#&#8203;1952](0xERR0R/blocky#1952)) ([@&#8203;sonjek](https://github.com/sonjek))

##### Build and dependencies

- [`fe67404`](0xERR0R/blocky@fe67404): build(deps): bump actions/checkout from 5 to 6 ([#&#8203;1943](0xERR0R/blocky#1943)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4752061`](0xERR0R/blocky@4752061): build(deps): bump actions/download-artifact from 6 to 7 ([#&#8203;1961](0xERR0R/blocky#1961)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`d459311`](0xERR0R/blocky@d459311): build(deps): bump actions/download-artifact from 7 to 8 ([#&#8203;2000](0xERR0R/blocky#2000)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`fa1614b`](0xERR0R/blocky@fa1614b): build(deps): bump actions/upload-artifact from 5 to 6 ([#&#8203;1960](0xERR0R/blocky#1960)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`11b6f92`](0xERR0R/blocky@11b6f92): build(deps): bump actions/upload-artifact from 6 to 7 ([#&#8203;1998](0xERR0R/blocky#1998)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e83805c`](0xERR0R/blocky@e83805c): build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 ([#&#8203;1992](0xERR0R/blocky#1992)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4f62ec8`](0xERR0R/blocky@4f62ec8): build(deps): bump github.com/alicebob/miniredis/v2 from 2.35.0 to 2.36.0 ([#&#8203;1976](0xERR0R/blocky#1976)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`16644c5`](0xERR0R/blocky@16644c5): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.0 to 2.36.1 ([#&#8203;1978](0xERR0R/blocky#1978)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`36ae188`](0xERR0R/blocky@36ae188): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.1 to 2.37.0 ([#&#8203;1996](0xERR0R/blocky#1996)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4733c6b`](0xERR0R/blocky@4733c6b): build(deps): bump github.com/breml/rootcerts from 0.3.3 to 0.3.4 ([#&#8203;1987](0xERR0R/blocky#1987)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e4f7462`](0xERR0R/blocky@e4f7462): build(deps): bump github.com/go-chi/chi/v5 from 5.2.3 to 5.2.4 ([#&#8203;1972](0xERR0R/blocky#1972)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`f9dd4d2`](0xERR0R/blocky@f9dd4d2): build(deps): bump github.com/go-chi/chi/v5 from 5.2.4 to 5.2.5 ([#&#8203;1985](0xERR0R/blocky#1985)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e66a29d`](0xERR0R/blocky@e66a29d): build(deps): bump github.com/miekg/dns from 1.1.68 to 1.1.69 ([#&#8203;1959](0xERR0R/blocky#1959)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`8e69355`](0xERR0R/blocky@8e69355): build(deps): bump github.com/miekg/dns from 1.1.69 to 1.1.70 ([#&#8203;1968](0xERR0R/blocky#1968)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`5e8b555`](0xERR0R/blocky@5e8b555): build(deps): bump github.com/miekg/dns from 1.1.70 to 1.1.72 ([#&#8203;1977](0xERR0R/blocky#1977)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ef5dc97`](0xERR0R/blocky@ef5dc97): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.2 to 2.27.3 ([#&#8203;1956](0xERR0R/blocky#1956)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`670542b`](0xERR0R/blocky@670542b): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.3 to 2.27.4 ([#&#8203;1966](0xERR0R/blocky#1966)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e062742`](0xERR0R/blocky@e062742): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.4 to 2.27.5 ([#&#8203;1970](0xERR0R/blocky#1970)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4926d16`](0xERR0R/blocky@4926d16): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.5 to 2.28.1 ([#&#8203;1981](0xERR0R/blocky#1981)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ca0da10`](0xERR0R/blocky@ca0da10): build(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 ([#&#8203;1955](0xERR0R/blocky#1955)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`567a738`](0xERR0R/blocky@567a738): build(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 ([#&#8203;1967](0xERR0R/blocky#1967)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`c3aab87`](0xERR0R/blocky@c3aab87): build(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 ([#&#8203;1982](0xERR0R/blocky#1982)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ef79a67`](0xERR0R/blocky@ef79a67): build(deps): bump github.com/sirupsen/logrus from 1.9.3 to 1.9.4 ([#&#8203;1974](0xERR0R/blocky#1974)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6775759`](0xERR0R/blocky@6775759): build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 ([#&#8203;1953](0xERR0R/blocky#1953)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`71c39fc`](0xERR0R/blocky@71c39fc): build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 ([#&#8203;1939](0xERR0R/blocky#1939)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`be31648`](0xERR0R/blocky@be31648): build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 ([#&#8203;1957](0xERR0R/blocky#1957)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`a574078`](0xERR0R/blocky@a574078): build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 ([#&#8203;1971](0xERR0R/blocky#1971)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6f3f295`](0xERR0R/blocky@6f3f295): build(deps): bump golang.org/x/net from 0.49.0 to 0.50.0 ([#&#8203;1988](0xERR0R/blocky#1988)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6a75afb`](0xERR0R/blocky@6a75afb): build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 ([#&#8203;1997](0xERR0R/blocky#1997)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])

##### Misc

- [`439e99b`](0xERR0R/blocky@439e99b): Add Blocky Visor to web UIs section in installation.md ([#&#8203;1993](0xERR0R/blocky#1993)) ([@&#8203;JCHHeilmann](https://github.com/JCHHeilmann))
- [`ced469f`](0xERR0R/blocky@ced469f): refactor: centralize DNS response creation logic with helper functions ([#&#8203;1942](0xERR0R/blocky#1942)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`3075c38`](0xERR0R/blocky@3075c38): refactor: clean up obsolete Go syntax ([#&#8203;1951](0xERR0R/blocky#1951)) ([@&#8203;sonjek](https://github.com/sonjek))
- [`9fe42a8`](0xERR0R/blocky@9fe42a8): refactor: simplify code for improved readability and maintainability ([#&#8203;1945](0xERR0R/blocky#1945)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`6581668`](0xERR0R/blocky@6581668): refactor: use mockery for mocks ([#&#8203;1944](0xERR0R/blocky#1944)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`55ab95e`](0xERR0R/blocky@55ab95e): test(metrics): Prometheus metrics ([#&#8203;1868](0xERR0R/blocky#1868)) ([@&#8203;zeilenschubser](https://github.com/zeilenschubser))

</details>

<details>
<summary>0xERR0R/blocky (ghcr.io/0xerr0r/blocky)</summary>

### [`v0.29.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.29.0)

[Compare Source](0xERR0R/blocky@v0.28.2...v0.29.0)

#### Changelog

##### Features

- [`0c35f21`](0xERR0R/blocky@0c35f21): feat: add RFC 7239 Forwarded header support for client IP parsing ([#&#8203;1941](0xERR0R/blocky#1941)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`011e3eb`](0xERR0R/blocky@011e3eb): feat: implement DNS64 support ([#&#8203;1933](0xERR0R/blocky#1933)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`e199445`](0xERR0R/blocky@e199445): feat: improve IP parsing from X-Forwarded-For header ([#&#8203;1940](0xERR0R/blocky#1940)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Bug fixes

- [`257fe07`](0xERR0R/blocky@257fe07): fix: Incorrect rate data shown on Grafana dashboards ([#&#8203;1948](0xERR0R/blocky#1948)) ([@&#8203;mattdy](https://github.com/mattdy))
- [`1a4d22d`](0xERR0R/blocky@1a4d22d): fix: db automigration with timescaledb ([#&#8203;1975](0xERR0R/blocky#1975)) ([@&#8203;manofthepeace](https://github.com/manofthepeace))
- [`9874212`](0xERR0R/blocky@9874212): fix: use context based versions of net.Listen and net.Dial ([#&#8203;1952](0xERR0R/blocky#1952)) ([@&#8203;sonjek](https://github.com/sonjek))

##### Build and dependencies

- [`fe67404`](0xERR0R/blocky@fe67404): build(deps): bump actions/checkout from 5 to 6 ([#&#8203;1943](0xERR0R/blocky#1943)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4752061`](0xERR0R/blocky@4752061): build(deps): bump actions/download-artifact from 6 to 7 ([#&#8203;1961](0xERR0R/blocky#1961)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`d459311`](0xERR0R/blocky@d459311): build(deps): bump actions/download-artifact from 7 to 8 ([#&#8203;2000](0xERR0R/blocky#2000)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`fa1614b`](0xERR0R/blocky@fa1614b): build(deps): bump actions/upload-artifact from 5 to 6 ([#&#8203;1960](0xERR0R/blocky#1960)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`11b6f92`](0xERR0R/blocky@11b6f92): build(deps): bump actions/upload-artifact from 6 to 7 ([#&#8203;1998](0xERR0R/blocky#1998)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e83805c`](0xERR0R/blocky@e83805c): build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 ([#&#8203;1992](0xERR0R/blocky#1992)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4f62ec8`](0xERR0R/blocky@4f62ec8): build(deps): bump github.com/alicebob/miniredis/v2 from 2.35.0 to 2.36.0 ([#&#8203;1976](0xERR0R/blocky#1976)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`16644c5`](0xERR0R/blocky@16644c5): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.0 to 2.36.1 ([#&#8203;1978](0xERR0R/blocky#1978)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`36ae188`](0xERR0R/blocky@36ae188): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.1 to 2.37.0 ([#&#8203;1996](0xERR0R/blocky#1996)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4733c6b`](0xERR0R/blocky@4733c6b): build(deps): bump github.com/breml/rootcerts from 0.3.3 to 0.3.4 ([#&#8203;1987](0xERR0R/blocky#1987)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e4f7462`](0xERR0R/blocky@e4f7462): build(deps): bump github.com/go-chi/chi/v5 from 5.2.3 to 5.2.4 ([#&#8203;1972](0xERR0R/blocky#1972)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`f9dd4d2`](0xERR0R/blocky@f9dd4d2): build(deps): bump github.com/go-chi/chi/v5 from 5.2.4 to 5.2.5 ([#&#8203;1985](0xERR0R/blocky#1985)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e66a29d`](0xERR0R/blocky@e66a29d): build(deps): bump github.com/miekg/dns from 1.1.68 to 1.1.69 ([#&#8203;1959](0xERR0R/blocky#1959)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`8e69355`](0xERR0R/blocky@8e69355): build(deps): bump github.com/miekg/dns from 1.1.69 to 1.1.70 ([#&#8203;1968](0xERR0R/blocky#1968)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`5e8b555`](0xERR0R/blocky@5e8b555): build(deps): bump github.com/miekg/dns from 1.1.70 to 1.1.72 ([#&#8203;1977](0xERR0R/blocky#1977)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ef5dc97`](0xERR0R/blocky@ef5dc97): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.2 to 2.27.3 ([#&#8203;1956](0xERR0R/blocky#1956)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`670542b`](0xERR0R/blocky@670542b): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.3 to 2.27.4 ([#&#8203;1966](0xERR0R/blocky#1966)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e062742`](0xERR0R/blocky@e062742): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.4 to 2.27.5 ([#&#8203;1970](0xERR0R/blocky#1970)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4926d16`](0xERR0R/blocky@4926d16): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.5 to 2.28.1 ([#&#8203;1981](0xERR0R/blocky#1981)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ca0da10`](0xERR0R/blocky@ca0da10): build(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 ([#&#8203;1955](0xERR0R/blocky#1955)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`567a738`](0xERR0R/blocky@567a738): build(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 ([#&#8203;1967](0xERR0R/blocky#1967)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`c3aab87`](0xERR0R/blocky@c3aab87): build(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 ([#&#8203;1982](0xERR0R/blocky#1982)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ef79a67`](0xERR0R/blocky@ef79a67): build(deps): bump github.com/sirupsen/logrus from 1.9.3 to 1.9.4 ([#&#8203;1974](0xERR0R/blocky#1974)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6775759`](0xERR0R/blocky@6775759): build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 ([#&#8203;1953](0xERR0R/blocky#1953)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`71c39fc`](0xERR0R/blocky@71c39fc): build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 ([#&#8203;1939](0xERR0R/blocky#1939)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`be31648`](0xERR0R/blocky@be31648): build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 ([#&#8203;1957](0xERR0R/blocky#1957)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`a574078`](0xERR0R/blocky@a574078): build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 ([#&#8203;1971](0xERR0R/blocky#1971)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6f3f295`](0xERR0R/blocky@6f3f295): build(deps): bump golang.org/x/net from 0.49.0 to 0.50.0 ([#&#8203;1988](0xERR0R/blocky#1988)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6a75afb`](0xERR0R/blocky@6a75afb): build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 ([#&#8203;1997](0xERR0R/blocky#1997)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])

##### Misc

- [`439e99b`](0xERR0R/blocky@439e99b): Add Blocky Visor to web UIs section in installation.md ([#&#8203;1993](0xERR0R/blocky#1993)) ([@&#8203;JCHHeilmann](https://github.com/JCHHeilmann))
- [`ced469f`](0xERR0R/blocky@ced469f): refactor: centralize DNS response creation logic with helper functions ([#&#8203;1942](0xERR0R/blocky#1942)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`3075c38`](0xERR0R/blocky@3075c38): refactor: clean up obsolete Go syntax ([#&#8203;1951](0xERR0R/blocky#1951)) ([@&#8203;sonjek](https://github.com/sonjek))
- [`9fe42a8`](0xERR0R/blocky@9fe42a8): refactor: simplify code for improved readability and maintainability ([#&#8203;1945](0xERR0R/blocky#1945)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`6581668`](0xERR0R/blocky@6581668): refactor: use mockery for mocks ([#&#8203;1944](0xERR0R/blocky#1944)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`55ab95e`](0xERR0R/blocky@55ab95e): test(metrics): Prometheus metrics ([#&#8203;1868](0xERR0R/blocky#1868)) ([@&#8203;zeilenschubser](https://github.com/zeilenschubser))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS44IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4282
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Feb 27, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [ghcr.io/0xerr0r/blocky](https://github.com/0xERR0R/blocky) | minor | `v0.28.2` → `v0.29.0` |

---

### Release Notes

<details>
<summary>0xERR0R/blocky (ghcr.io/0xerr0r/blocky)</summary>

### [`v0.29.0`](https://github.com/0xERR0R/blocky/releases/tag/v0.29.0)

[Compare Source](0xERR0R/blocky@v0.28.2...v0.29.0)

#### Changelog

##### Features

- [`0c35f21`](0xERR0R/blocky@0c35f21): feat: add RFC 7239 Forwarded header support for client IP parsing ([#&#8203;1941](0xERR0R/blocky#1941)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`011e3eb`](0xERR0R/blocky@011e3eb): feat: implement DNS64 support ([#&#8203;1933](0xERR0R/blocky#1933)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`e199445`](0xERR0R/blocky@e199445): feat: improve IP parsing from X-Forwarded-For header ([#&#8203;1940](0xERR0R/blocky#1940)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))

##### Bug fixes

- [`257fe07`](0xERR0R/blocky@257fe07): fix: Incorrect rate data shown on Grafana dashboards ([#&#8203;1948](0xERR0R/blocky#1948)) ([@&#8203;mattdy](https://github.com/mattdy))
- [`1a4d22d`](0xERR0R/blocky@1a4d22d): fix: db automigration with timescaledb ([#&#8203;1975](0xERR0R/blocky#1975)) ([@&#8203;manofthepeace](https://github.com/manofthepeace))
- [`9874212`](0xERR0R/blocky@9874212): fix: use context based versions of net.Listen and net.Dial ([#&#8203;1952](0xERR0R/blocky#1952)) ([@&#8203;sonjek](https://github.com/sonjek))

##### Build and dependencies

- [`fe67404`](0xERR0R/blocky@fe67404): build(deps): bump actions/checkout from 5 to 6 ([#&#8203;1943](0xERR0R/blocky#1943)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4752061`](0xERR0R/blocky@4752061): build(deps): bump actions/download-artifact from 6 to 7 ([#&#8203;1961](0xERR0R/blocky#1961)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`d459311`](0xERR0R/blocky@d459311): build(deps): bump actions/download-artifact from 7 to 8 ([#&#8203;2000](0xERR0R/blocky#2000)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`fa1614b`](0xERR0R/blocky@fa1614b): build(deps): bump actions/upload-artifact from 5 to 6 ([#&#8203;1960](0xERR0R/blocky#1960)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`11b6f92`](0xERR0R/blocky@11b6f92): build(deps): bump actions/upload-artifact from 6 to 7 ([#&#8203;1998](0xERR0R/blocky#1998)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e83805c`](0xERR0R/blocky@e83805c): build(deps): bump filippo.io/edwards25519 from 1.1.0 to 1.1.1 ([#&#8203;1992](0xERR0R/blocky#1992)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4f62ec8`](0xERR0R/blocky@4f62ec8): build(deps): bump github.com/alicebob/miniredis/v2 from 2.35.0 to 2.36.0 ([#&#8203;1976](0xERR0R/blocky#1976)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`16644c5`](0xERR0R/blocky@16644c5): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.0 to 2.36.1 ([#&#8203;1978](0xERR0R/blocky#1978)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`36ae188`](0xERR0R/blocky@36ae188): build(deps): bump github.com/alicebob/miniredis/v2 from 2.36.1 to 2.37.0 ([#&#8203;1996](0xERR0R/blocky#1996)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4733c6b`](0xERR0R/blocky@4733c6b): build(deps): bump github.com/breml/rootcerts from 0.3.3 to 0.3.4 ([#&#8203;1987](0xERR0R/blocky#1987)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e4f7462`](0xERR0R/blocky@e4f7462): build(deps): bump github.com/go-chi/chi/v5 from 5.2.3 to 5.2.4 ([#&#8203;1972](0xERR0R/blocky#1972)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`f9dd4d2`](0xERR0R/blocky@f9dd4d2): build(deps): bump github.com/go-chi/chi/v5 from 5.2.4 to 5.2.5 ([#&#8203;1985](0xERR0R/blocky#1985)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e66a29d`](0xERR0R/blocky@e66a29d): build(deps): bump github.com/miekg/dns from 1.1.68 to 1.1.69 ([#&#8203;1959](0xERR0R/blocky#1959)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`8e69355`](0xERR0R/blocky@8e69355): build(deps): bump github.com/miekg/dns from 1.1.69 to 1.1.70 ([#&#8203;1968](0xERR0R/blocky#1968)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`5e8b555`](0xERR0R/blocky@5e8b555): build(deps): bump github.com/miekg/dns from 1.1.70 to 1.1.72 ([#&#8203;1977](0xERR0R/blocky#1977)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ef5dc97`](0xERR0R/blocky@ef5dc97): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.2 to 2.27.3 ([#&#8203;1956](0xERR0R/blocky#1956)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`670542b`](0xERR0R/blocky@670542b): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.3 to 2.27.4 ([#&#8203;1966](0xERR0R/blocky#1966)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`e062742`](0xERR0R/blocky@e062742): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.4 to 2.27.5 ([#&#8203;1970](0xERR0R/blocky#1970)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`4926d16`](0xERR0R/blocky@4926d16): build(deps): bump github.com/onsi/ginkgo/v2 from 2.27.5 to 2.28.1 ([#&#8203;1981](0xERR0R/blocky#1981)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ca0da10`](0xERR0R/blocky@ca0da10): build(deps): bump github.com/onsi/gomega from 1.38.2 to 1.38.3 ([#&#8203;1955](0xERR0R/blocky#1955)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`567a738`](0xERR0R/blocky@567a738): build(deps): bump github.com/onsi/gomega from 1.38.3 to 1.39.0 ([#&#8203;1967](0xERR0R/blocky#1967)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`c3aab87`](0xERR0R/blocky@c3aab87): build(deps): bump github.com/onsi/gomega from 1.39.0 to 1.39.1 ([#&#8203;1982](0xERR0R/blocky#1982)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`ef79a67`](0xERR0R/blocky@ef79a67): build(deps): bump github.com/sirupsen/logrus from 1.9.3 to 1.9.4 ([#&#8203;1974](0xERR0R/blocky#1974)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6775759`](0xERR0R/blocky@6775759): build(deps): bump github.com/spf13/cobra from 1.10.1 to 1.10.2 ([#&#8203;1953](0xERR0R/blocky#1953)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`71c39fc`](0xERR0R/blocky@71c39fc): build(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 ([#&#8203;1939](0xERR0R/blocky#1939)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`be31648`](0xERR0R/blocky@be31648): build(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 ([#&#8203;1957](0xERR0R/blocky#1957)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`a574078`](0xERR0R/blocky@a574078): build(deps): bump golang.org/x/net from 0.48.0 to 0.49.0 ([#&#8203;1971](0xERR0R/blocky#1971)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6f3f295`](0xERR0R/blocky@6f3f295): build(deps): bump golang.org/x/net from 0.49.0 to 0.50.0 ([#&#8203;1988](0xERR0R/blocky#1988)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])
- [`6a75afb`](0xERR0R/blocky@6a75afb): build(deps): bump golang.org/x/net from 0.50.0 to 0.51.0 ([#&#8203;1997](0xERR0R/blocky#1997)) ([@&#8203;dependabot](https://github.com/dependabot)\[bot])

##### Misc

- [`439e99b`](0xERR0R/blocky@439e99b): Add Blocky Visor to web UIs section in installation.md ([#&#8203;1993](0xERR0R/blocky#1993)) ([@&#8203;JCHHeilmann](https://github.com/JCHHeilmann))
- [`ced469f`](0xERR0R/blocky@ced469f): refactor: centralize DNS response creation logic with helper functions ([#&#8203;1942](0xERR0R/blocky#1942)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`3075c38`](0xERR0R/blocky@3075c38): refactor: clean up obsolete Go syntax ([#&#8203;1951](0xERR0R/blocky#1951)) ([@&#8203;sonjek](https://github.com/sonjek))
- [`9fe42a8`](0xERR0R/blocky@9fe42a8): refactor: simplify code for improved readability and maintainability ([#&#8203;1945](0xERR0R/blocky#1945)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`6581668`](0xERR0R/blocky@6581668): refactor: use mockery for mocks ([#&#8203;1944](0xERR0R/blocky#1944)) ([@&#8203;0xERR0R](https://github.com/0xERR0R))
- [`55ab95e`](0xERR0R/blocky@55ab95e): test(metrics): Prometheus metrics ([#&#8203;1868](0xERR0R/blocky#1868)) ([@&#8203;zeilenschubser](https://github.com/zeilenschubser))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4yNS44IiwidXBkYXRlZEluVmVyIjoiNDMuMjUuOCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/4283
Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net>
Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🔨 enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature Request] DNS64 Support

2 participants