Skip to content

docs(tcp): document forward-proxy behavior for pomerium-cli tcp#2218

Closed
desimone wants to merge 1 commit into
mainfrom
bdd/docs-tcp-forward-proxy
Closed

docs(tcp): document forward-proxy behavior for pomerium-cli tcp#2218
desimone wants to merge 1 commit into
mainfrom
bdd/docs-tcp-forward-proxy

Conversation

@desimone

Copy link
Copy Markdown
Contributor

Summary

Adds a Connecting through an HTTP forward proxy section to the TCP capabilities page (/docs/capabilities/non-http/tcp#forward-proxy).

It documents that pomerium-cli tcp does not route the tunnel through an HTTP/HTTPS forward proxy (e.g. Squid): only the authentication/token requests honor HTTP_PROXY/HTTPS_PROXY, while the tunnel's initial connection check and the CONNECT are dialed directly. It distinguishes this from the existing Bastion host feature (Pomerium-as-bastion, not an arbitrary proxy) and gives two workarounds: a narrow direct-egress allowlist for the Pomerium endpoint, or a jump host with direct egress reached over SSH -L.

Why

Recurring question from PoC/enterprise customers whose client networks have no direct outbound HTTPS and must egress through a forward proxy. The behavior was undocumented, leading to confusion (e.g. attempts to use Squid as a bastion). Complements the existing "Two ports, one transport" / L4-edge guidance for egress-restricted environments. Relates to ENG-4040.

Verification

Behavior verified end-to-end in a Squid + Pomerium docker-compose lab (Pomerium server v0.32.0; pomerium-cli built from v0.32.1-rc.1 source). With the client restricted to proxy-only egress and HTTPS_PROXY set, the tunnel's probe and CONNECT dial the Pomerium endpoint directly and the proxy logs nothing for the tunnel; a control request through the same proxy is logged. Both documented workarounds were exercised and returned the upstream payload. yarn format-check, yarn cspell, and yarn build pass.

AI assistance

Drafted with Claude Code (Opus). Claude built the docker-compose proof lab, ran the tests, and wrote this docs section. The behavior and the proofs were then independently re-run and verified by a human (clean docker compose up, all checks green), and the wording was corrected for precision (the auth-helper fetch is what honors the proxy; the 302 comes from the direct tunnel attempt).

The TCP tunnel does not traverse an HTTP/HTTPS forward proxy: only the
auth/token requests honor HTTP_PROXY/HTTPS_PROXY, while the tunnel's
connection check and CONNECT are dialed directly. Document this on the
TCP capabilities page, distinguish it from the bastion-host feature,
and give two workarounds (narrow direct-egress allowlist, jump host).
@desimone desimone requested a review from a team as a code owner May 29, 2026 16:49
@desimone desimone requested review from kenjenkins and removed request for a team May 29, 2026 16:49
@netlify

netlify Bot commented May 29, 2026

Copy link
Copy Markdown

Deploy Preview for pomerium-docs ready!

Name Link
🔨 Latest commit 701cb36
🔍 Latest deploy log https://app.netlify.com/projects/pomerium-docs/deploys/6a19c3b1e3941900080962c0
😎 Deploy Preview https://deploy-preview-2218--pomerium-docs.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@CLAassistant

Copy link
Copy Markdown

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you sign our Contributor License Agreement before we can accept your contribution.


Bobby DeSimone seems not to be a GitHub user. You need a GitHub account to be able to sign the CLA. If you have already a GitHub account, please add the email address used for this commit to your account.
You have signed the CLA already but the status is still pending? Let us recheck it.

@desimone desimone closed this May 29, 2026
@desimone

Copy link
Copy Markdown
Contributor Author

Hopefully do-able pomerium/cli#691

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.

2 participants