Skip to content

Add PROXY protocol v1/v2 support for TCP-based listeners#512

Draft
folbricht wants to merge 1 commit intomasterfrom
proxy-protocol-support
Draft

Add PROXY protocol v1/v2 support for TCP-based listeners#512
folbricht wants to merge 1 commit intomasterfrom
proxy-protocol-support

Conversation

@folbricht
Copy link
Owner

Summary

  • Adds opt-in PROXY protocol v1/v2 support for TCP-based listeners (tcp, dot, doh, admin, odoh) using go-proxyproto
  • When proxy-protocol = true is set on a listener, the real client IP from the PROXY header (sent by an upstream load balancer) is used throughout the pipeline — logging, ACLs, routing, and all other components
  • Fixes a pre-existing bug where ODoH listener was not passing ListenOptions (including netns, fwmark, bind-if, allowed-net) through to its inner DoH listener

Configuration

[listeners.tcp-behind-lb]
address = ":53"
protocol = "tcp"
resolver = "upstream"
proxy-protocol = true

Closes #511

When routedns is deployed behind a load balancer (HAProxy, NGINX, cloud
LBs), the real client IP is lost. This adds opt-in PROXY protocol
support using github.com/pires/go-proxyproto, enabling listeners to
parse PROXY protocol headers and use the real client IP throughout the
pipeline.

A new `proxy-protocol = true` config option can be set on any TCP-based
listener (tcp, dot, doh, admin, odoh). The PROXY protocol header is
parsed on the raw TCP connection before TLS, so the real client IP is
available for logging, ACLs, routing, and all other pipeline components.

Also fixes a pre-existing bug where ODoH listener was not passing
ListenOptions through to its inner DoH listener.

Closes #511
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Add Proxy Protocol v1 and v2 Support

1 participant