PROXYTUNNEL(1)
π
PROXYTUNNEL β the proxytunnel(1) glow-up π
okay bestie, so picture this: you're stuck behind a corporate HTTPS proxy and it's giving hostile, and you just want to get a connection out. that's literally what proxytunnel is for. it's a program that tunnels any connection through a standard HTTPS proxy, circumventing standard HTTP filtering mechanisms. it's mostly used as a backend for OpenSSH's ProxyCommand, and as a proxy backend for Putty. it can also be used for other proxy-traversing purposes like proxy bouncing. no cap, it's iconic. π
β¨ SYNOPSIS β¨
proxytunnel [OPTION...]
that's it. that's the whole vibe. options go in, tunnel comes out. π¦
π DESCRIPTION π
so like β proxytunnel is a program that tunnels any connection through a standard HTTPS proxy, circumventing standard HTTP filtering mechanisms. it's mostly used as a backend for OpenSSH's ProxyCommand, and as a proxy backend for Putty. it can also be used for other proxy-traversing purposes like proxy bouncing. yes, it said proxy bouncing twice-ish, because that's a whole thing you can do. periodt. π
πΈ OPTIONS πΈ
-i,--inetdβ run from inetd (default: off). classic old-school energy, we respect it.-a,--standalone=[address:]portβ run as standalone daemon on specified address and port. the address may be a IPv4 address, a bracket-enclosed IPv6 address or a bracket-enclosed combination of IPv6 address, '%' and interface name. that last format is only required with link-local IPv6 addresses. the daemon listens on any address if address is not given.
Examples, so you don't have to guess π«Ά:
22, 123.45.67.89:22, [2001:db8::123:4567:89ab:cdef]:22,
[2001:db8::123:4567:89ab:cdef%eth0]:22
-p,--proxy=host:portβ use host and port as the local (primary) proxy to connect to. if not specified theHTTP_PROXYenvironment variable, if set, will be used instead. bestie this option or the environment variable are mandatory β you literally can't skip both. π-r,--remproxy=host:portβ use host and port as the remote (secondary) proxy to connect to. the double-proxy era has arrived. π₯-d,--dest=host:portβ use host and port as the destination for the tunnel. this is a mandatory option. like, no destination, no tunnel, no nothing. π-e,--encryptβ SSL encrypt data between local proxy and destination. π-E,--encrypt-proxyβ SSL encrypt data between client and local proxy. π-X,--encrypt-remproxyβ SSL encrypt data between local and remote (secondary) proxy. π
π ADDITIONAL OPTIONS π
the extra-sparkle section, honestly:
-z,--no-check-certificateβ do not verify server SSL certificate when establishing an SSL connection. by default, the server SSL certificate is verified and the target host name is checked against the server certificate's subject alternative names if any are present, or common name if there are no subject alternative names. so like, flipping this off is a choice. π-C,--cacert=filename/directoryβ specify a CA certificate file (or directory containing CA certificate(s)) to trust when verifying a server SSL certificate. if a directory is provided, it must be prepared with OpenSSL'sc_rehashtool (default, unless changed at compile time usingDEFAULT_CA_FILEorDEFAULT_CA_DIRoptions:/etc/ssl/certs). trust issues? not on our watch. π«Ά-4,--ipv4β enforce the use of IPv4 when connecting to the local proxy. old reliable. β-6,--ipv6β enforce the use of IPv6 when connecting to the local proxy. futuristic slay. π-F,--passfile=filenameβ use filename for reading username and password for HTTPS proxy authentication. the file uses the same format as.wgetrcand can be shared with wget. use this option, or environment variables, to hide the password from other users. lowkey the responsible thing to do. π-P,--proxyauth=username:passwordβ use username and password as credentials to authenticate against a local HTTPS proxy. the username and password can also be specified in thePROXYUSERandPROXYPASSenvironment variables to hide them from other users. if the password is omitted and noPROXYPASSenvironment variable is set, proxytunnel will prompt for a password. so you don't have to type it into your shell history, bestie, please don't. π-R,--remproxyauth=username:passwordβ use username and password as credentials to authenticate against a remote (secondary) HTTPS proxy. the username and password can also be specified in theREMPROXYUSERandREMPROXYPASSenvironment variables to hide them from other users. if the password is omitted and noREMPROXYPASSenvironment variable is set, proxytunnel will prompt for a password.-c,--cert=filenameβ provide the name of the file containing the SSL client certificate to authenticate by client certificate against local proxy, remote proxy or destination. the file must be in PEM format. on top of this it may contain one or more intermediary certificates missing at the servers's end, effectively forming a certificate chain. requires specification of-k,--keyin addition. ignored if neither-e,--encryptnor-E,--encrypt-proxynor-X,--encrypt-remproxyis given. so like, don't bring a cert to a no-encryption party. π-k,--key=filenameβ provide the name of the file containing the SSL client key to authenticate by client certificate against local proxy, remote proxy or destination. the file must be in PEM format. requires specification of-c,--certin addition. ignored if neither-e,--encryptnor-E,--encrypt-proxynor-X,--encrypt-remproxyis given. they're a matched set, your honor. π-N,--ntlmβ use NTLM based authentication. corporate-core. π’-t,--domain=STRINGβ specify NTLM domain (default: autodetect). let it figure itself out, or tell it. your call.-H,--header=STRINGβ add additional HTTP headers to send to proxy. custom flair for your packets. β¨-o,--host=host[:port]β send a custom Host header. with SSL connections host is also sent as SNI. multitasking icon.-x,--proctitle=STRINGβ use a different process title. incognito mode but make it system administration. π΅οΈ-I,--no-sniβ disable SNI. simply off. π
π§ MISCELLANEOUS OPTIONS π§
the little odds and ends:
-v,--verboseβ turn on verbosity. she's chatty now. π¬-q,--quietβ suppress messages. she's mysterious now. π€«-h,--helpβ print help and exit. π«Ά-V,--versionβ print version and exit. π
π USAGE π
depending on your situation you might want to do any of the following things (and honestly, iconic choices all around):
- connect through a local proxy to your home system on port 22:
$ proxytunnel -v -p proxy.company.com:8080 -d system.home.nl:22
- connect through a local proxy (with authentication) to your home system:
$ proxytunnel -v -p proxy.company.com:8080 -P username:password -d system.home.nl:22
- connect through a local proxy (with authentication) hiding your password β yes bestie, this one, do this one:
$ export PROXYPASS=password
$ proxytunnel -v -p proxy.company.com:8080 -P username -d system.home.nl:22
- connect through a local proxy to a remote proxy and bounce to any system:
$ proxytunnel -v -p proxy.company.com:8080 -r proxy.athome.nl:443 -d system.friend.nl:22
- connect using SSL through a local proxy to your home system:
$ proxytunnel -v -E -p proxy.company.com:8080 -d system.home.nl:22
π OPENSSH CONFIGURATION π
to use this program with OpenSSH to connect to a host somewhere, create a ~/.ssh/config file with the following content:
Host system.athome.nl
ProxyCommand proxytunnel -p proxy.company.com:8080 -d %h:%p
ServerAliveInterval 30
Note π«Ά the ServerAliveInterval directive makes sure that idle connections are not being dropped by intermediate firewalls that remove active sessions aggressively. if you see your connection dropping out, try to lower the value even more. yes, even more. she said what she said. π€
to use the dynamic (SOCKS) portforwarding capability of the SSH client, you can specify the DynamicForward directive in your ssh_config file like:
Host system.athome.nl
DynamicForward 1080
ProxyCommand proxytunnel -p proxy.company.com:8080 -d %h:%p
ServerAliveInterval 30
β οΈ NOTES β οΈ
Important π¨ most HTTPS proxies do not allow access to ports other than HTTPS (tcp/443) and SNEWS (tcp/563). in this case you need to make sure the SSH daemon or remote proxy on the destination system is listening on eithertcp/443ortcp/563to get through. like, the proxy said "443 or 563 or nothing," and she meant it. π
πΏ ENVIRONMENT πΏ
proxytunnel can be influenced by setting one of the following environment variables:
HTTP_PROXYβ if this environment variable is set, proxytunnel will use it as the local proxy if-por--proxyis not provided.PROXYUSERβ if this environment variable is set, proxytunnel will use it as the username for proxy authentication, unless specified using the-Por--proxyauthoption.PROXYPASSβ if this environment variable is set, proxytunnel will use it as the password for proxy authentication, unless specified using the-Por--proxyauthoption.REMPROXYUSERβ if this environment variable is set, proxytunnel will use it as the username for remote (secondary) proxy authentication, unless specified using the-Ror--remproxyauthoption.REMPROXYPASSβ if this environment variable is set, proxytunnel will use it as the password for remote (secondary) proxy authentication, unless specified using the-Ror--remproxyauthoption.
π SEE ALSO π
ssh(1), ssh_config(8) β go read those too, iykyk. π
π BUGS π
this software is bug-free, at least we'd like to think so. π
if you do not agree with us, please provide the proof with your friendly report at https://github.com/proxytunnel/proxytunnel/issues :) β friendly being the operative word, be nice to the maintainers, they're doing their best. π«Ά
π AUTHOR π
this manpage was initially written by LoΓ―c Le Guyader <loic.leguyader@laposte.net[1]> for the Debian GNU/Linux system, revamped in asciidoc by Dag WieΓ«rs <dag@wieers.com[2]> and is now maintained by the Proxytunnel developers. legends, all of them. π
homepages at https://proxytunnel.sourceforge.io and https://github.com/proxytunnel/proxytunnel π¦
π NOTES π
loic.leguyader@laposte.netmailto:loic.leguyader@laposte.netdag@wieers.commailto:dag@wieers.com
and that's the whole page, bestie!! π this was version 1.13.0, dated 2026-05-31 β go forth and tunnel responsibly, mwah πβ¨
π¦ where this page comes from
- arch rolling: proxytunnel 1.13.0-1 Β· GPL-2.0-only WITH cryptsetup-OpenSSL-exception AND BSD-3-Clause
- nixpkgs unstable: proxytunnel 1.13.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms