v2.0.0-rc10

tashfeenahmed/freellmapiv2.0.0-rc10Dec 22, 2025by qdm12

AI Summary

This release focuses on enhancing the performance, stability, and observability of the DNS API. It introduces connection pooling for DNS over TLS, new configuration options for health checks and re-binding protection, and refines logging strategies for common network errors.

Key Highlights

  • DNS over TLS now uses a connection pool to re-use TCP connections.
  • New `HEALTH_SERVER_ADDRESS` configuration option (defaulting to 127.0.0.1:9999).
  • New `REBINDING_PROTECTION_EXEMPT_HOSTNAMES` configuration option.
  • Logging I/O timeout errors at debug level to reduce noise.
  • Grafana dashboard updated to a newer schema version.

Breaking Changes

  • pkg/nameserver: `GetDNSServers` now returns `[]netip.Addr` instead of `[]netip.AddrPort`.
  • pkg/nameserver: `GetDNSServers` now returns an eventual error.
  • pkg/nameserver: `GetDNSServers` no longer returns localhost IPs if no nameserver is found.

New Features

  • DNS over TLS connection pooling.
  • Configurable health server address.
  • Configurable re-binding protection exempt hostnames.
  • Filter middleware logs blocked elements with a reason.

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