v2.0.0-rc10
Hmbown/Codewhalev2.0.0-rc10Dec 22, 2025by qdm12
AI Summary
This release candidate introduces DNS over TLS connection pooling, health server configuration, and enhanced logging features. It includes several fixes for TLD classification, middleware behavior, and IPv6 handling on Windows, along with breaking API changes to the nameserver package.
Key Highlights
- DNS over TLS now uses connection pooling to re-use TCP connections
- New HEALTH_SERVER_ADDRESS option for health monitoring
- Added REBINDING_PROTECTION_EXEMPT_HOSTNAMES option
- Enhanced logging for blocked elements with reasons
- Fixed TLD classification for 'site' and 'network' as public, not local
Breaking Changes
- pkg/nameserver: GetDNSServers no longer returns localhost IPs if no nameserver is found
- pkg/nameserver: GetDNSServers now returns an eventual error
- pkg/nameserver: Returns []netip.Addr instead of []netip.AddrPort
New Features
- DNS over TLS connection pooling
- Health server address configuration
- Rebinding protection exemption for hostnames
- Enhanced logging in filter middleware
- Updated Grafana dashboard for plain DNS section
Full Release Notes
## Features - DNS over TLS now uses a pool of connections to re-use TCP connections when possible (#150) - `HEALTH_SERVER_ADDRESS` option, defaulting to `127.0.0.1:9999` - by default log i/o timeout errors are logged at debug level because these are fairly common - `REBINDING_PROTECTION_EXEMPT_HOSTNAMES` option - `pkg/middlewares/filter`: log blocked elements with a reason ## Fixes - `internal/local`: "site" and "network" TLDs are public, not local - `pkg/middlewares/localdns`: - do not log request twice on errors - do not debug log NXDOMAIN coded responses since these happen often especially with search domains - `internal/support/ipv6`: handle Windows error message - Grafana dashboard plain DNS section updated ## Go API breaking changes - `pkg/nameserver`: `GetDNSServers` - does not return localhost IPs if no nameserver is found - returns an eventual error - returns []netip.Addr instead of []netip.AddrPort since it can only be an ip address without port ## Maintenance - Grafana JSON dashboard upgraded to newer schema version 3 - Fix documentation URLs and CI links check - bump markdownlint from v11 to v21