Skip to content

feat: Add PROXY protocol#44

Open
donovanhubbard wants to merge 3 commits into
charmbracelet:masterfrom
donovanhubbard:charm-proxy-protocol
Open

feat: Add PROXY protocol#44
donovanhubbard wants to merge 3 commits into
charmbracelet:masterfrom
donovanhubbard:charm-proxy-protocol

Conversation

@donovanhubbard
Copy link
Copy Markdown

  • I have read CONTRIBUTING.md.
  • I have created a discussion that was approved by a maintainer (for new features).

In 2011 the people working on HA Proxy developed what would be known as the PROXY protocol. This solved the problem of how upstream load balancers and proxies could pass information about the original client's IP address and port to the backend server.

In order to take advantage of the PROXY protocol, the load balancer must send the PROXY header and the backend server needs to be able to read the header. The protocol is supported by a wide variety of load balancers including:

HA Proxy
nginx
Amazon Application Load Balancers
Traefik
Envoy
Cloudflare

This pull request adds support for the PROXY protocol to the ssh server via a new option called EnableProxyProtocol. An example has been included in the _examples directory.

This is accomplished through the https://github.com/pires/go-proxyproto library. It replaces the information returned by the ssh.Session object's RemoteAdd() function with the requestor's original IP address and port and not the load balancer's load balancer and port which is what would be displayed without this protocol.

This was discussed in #43

It's a fairly simple code change. I've been running my own fork of this for several weeks with no problems.

However, the package I'm using has a minimum supported go version of 1.25 which is a change from the forks current version of 1.23. For reference go 1.24 ended support in Feb 11, 2026. I don't know if that will be a problem for you or not.

@donovanhubbard donovanhubbard changed the title Charm proxy protocol feat: Add PROXY protocol Jun 1, 2026
@donovanhubbard
Copy link
Copy Markdown
Author

The CI isn't going to work with this because of the go version upgrade, and I'm not sure how you want to handle that.

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.

1 participant