7171- [ End-to-End Encryption] ( #end-to-end-encryption )
7272- [ TLS Interception] ( #tls-interception )
7373 - [ TLS Interception With Docker] ( #tls-interception-with-docker )
74+ - [ GROUT (NGROK Alternative)] ( #grout-ngrok-alternative )
75+ - [ How Grout works] ( #how-grout-works )
76+ - [ Self-hosted Grout] ( #self-hosted-grout )
7477- [ Proxy Over SSH Tunnel] ( #proxy-over-ssh-tunnel )
7578 - [ Proxy Remote Requests Locally] ( #proxy-remote-requests-locally )
7679 - [ Proxy Local Requests Remotely] ( #proxy-local-requests-remotely )
138141[ // ] : # ( DO-NOT-REMOVE-docs-badges-END )
139142
140143# Features
144+ - [ A drop-in alternative to ` ngrok ` ] ( #grout-ngrok-alternative )
141145- Fast & Scalable
142146
143147 - Scale up by using all available cores on the system
@@ -1290,6 +1294,76 @@ with TLS Interception:
12901294 }
12911295 ```
12921296
1297+ # GROUT (NGROK Alternative)
1298+
1299+ ` grout ` is a drop-in alternative to ` ngrok ` that comes packaged within ` proxy.py `
1300+
1301+ ``` console
1302+ ❯ grout
1303+ NAME:
1304+ grout - securely tunnel local files, folders and services to public URLs
1305+
1306+ USAGE:
1307+ grout route [name]
1308+
1309+ DESCRIPTION:
1310+ grout exposes local networked services behinds NATs and firewalls to the
1311+ public internet over a secure tunnel. Share local folders, directories and websites,
1312+ build/test webhook consumers and self-host personal services to public URLs.
1313+
1314+ EXAMPLES:
1315+ Share Files and Folders:
1316+ grout C:\path\to\folder # Share a folder on your system
1317+ grout /path/to/folder # Share a folder on your system
1318+ grout /path/to/folder --basic-auth user:pass # Add authentication for shared folder
1319+ grout /path/to/photo.jpg # Share a specific file on your system
1320+
1321+ Expose HTTP, HTTPS and Websockets:
1322+ grout http://localhost:9090 # Expose HTTP service running on port 9090
1323+ grout https://localhost:8080 # Expose HTTPS service running on port 8080
1324+ grout https://localhost:8080 --path /worker/ # Expose only certain paths of HTTPS service on port 8080
1325+ grout https://localhost:8080 --basic-auth u:p # Add authentication for exposed HTTPS service on port 8080
1326+
1327+ Expose TCP Services:
1328+ grout tcp://:6379 # Expose Redis service running locally on port 6379
1329+ grout tcp://:22 # Expose SSH service running locally on port 22
1330+
1331+ Custom URLs:
1332+ grout https://localhost:8080 abhinavsingh # Custom URL for HTTPS service running on port 8080
1333+ grout tcp://:22 abhinavsingh # Custom URL for SSH service running locally on port 22
1334+
1335+ Custom Domains:
1336+ grout tcp://:5432 abhinavsingh.domain.tld # Custom URL for Postgres service running locally on port 5432
1337+
1338+ Self-hosted solutions:
1339+ grout tcp://:5432 abhinavsingh.my.server # Custom URL for Postgres service running locally on port 5432
1340+
1341+ SUPPORT:
1342+ 1343+
1344+ Privacy policy and Terms & conditions
1345+ https://jaxl.com/privacy/
1346+
1347+ Created by Jaxl™
1348+ https://jaxl.io
1349+ ```
1350+
1351+ ## How Grout works
1352+
1353+ - ` grout ` infrastructure has 2 components: client and server
1354+ - ` grout ` client has 2 components: a thin and a thick client
1355+ - ` grout ` thin client is part of open source ` proxy.py ` (BSD 3-Clause License)
1356+ - ` grout ` thick client and servers are hosted at [ jaxl.io] ( https://jaxl.io )
1357+ and a copyright of [ Jaxl Innovations Private Limited] ( https://jaxl.com )
1358+ - ` grout ` server has 3 components: a registry server, a reverse proxy server and a tunnel server
1359+
1360+ ## Self-Hosted ` grout `
1361+
1362+ - ` grout ` thick client and servers can also be hosted on your GCP, AWS, Cloud infrastructures
1363+ - With a self-hosted version, your traffic flows through the network you control and trust
1364+ - ` grout ` developers at [ jaxl.io] ( https://jaxl.io ) provides GCP, AWS, Docker images for self-hosted solutions
1365+ - Please drop an email at
[ [email protected] ] ( mailto:[email protected] ) to get started.
1366+
12931367# Proxy Over SSH Tunnel
12941368
12951369** This is a WIP and may not work as documented**
@@ -2340,12 +2414,17 @@ To run standalone benchmark for `proxy.py`, use the following command from repo
23402414
23412415``` console
23422416❯ proxy -h
2343- usage: -m [-h] [--tunnel-hostname TUNNEL_HOSTNAME] [--tunnel-port TUNNEL_PORT]
2417+ usage: -m [-h] [--enable-proxy-protocol] [--threadless] [--threaded]
2418+ [--num-workers NUM_WORKERS] [--enable-events] [--enable-conn-pool]
2419+ [--key-file KEY_FILE] [--cert-file CERT_FILE]
2420+ [--client-recvbuf-size CLIENT_RECVBUF_SIZE]
2421+ [--server-recvbuf-size SERVER_RECVBUF_SIZE]
2422+ [--max-sendbuf-size MAX_SENDBUF_SIZE] [--timeout TIMEOUT]
2423+ [--tunnel-hostname TUNNEL_HOSTNAME] [--tunnel-port TUNNEL_PORT]
23442424 [--tunnel-username TUNNEL_USERNAME]
23452425 [--tunnel-ssh-key TUNNEL_SSH_KEY]
23462426 [--tunnel-ssh-key-passphrase TUNNEL_SSH_KEY_PASSPHRASE]
2347- [--tunnel-remote-port TUNNEL_REMOTE_PORT] [--threadless]
2348- [--threaded] [--num-workers NUM_WORKERS] [--enable-events]
2427+ [--tunnel-remote-port TUNNEL_REMOTE_PORT]
23492428 [--local-executor LOCAL_EXECUTOR] [--backlog BACKLOG]
23502429 [--hostname HOSTNAME] [--hostnames HOSTNAMES [HOSTNAMES ...]]
23512430 [--port PORT] [--ports PORTS [PORTS ...]] [--port-file PORT_FILE]
@@ -2357,10 +2436,6 @@ usage: -m [-h] [--tunnel-hostname TUNNEL_HOSTNAME] [--tunnel-port TUNNEL_PORT]
23572436 [--basic-auth BASIC_AUTH] [--enable-ssh-tunnel]
23582437 [--work-klass WORK_KLASS] [--pid-file PID_FILE] [--openssl OPENSSL]
23592438 [--data-dir DATA_DIR] [--ssh-listener-klass SSH_LISTENER_KLASS]
2360- [--enable-proxy-protocol] [--enable-conn-pool] [--key-file KEY_FILE]
2361- [--cert-file CERT_FILE] [--client-recvbuf-size CLIENT_RECVBUF_SIZE]
2362- [--server-recvbuf-size SERVER_RECVBUF_SIZE]
2363- [--max-sendbuf-size MAX_SENDBUF_SIZE] [--timeout TIMEOUT]
23642439 [--disable-http-proxy] [--disable-headers DISABLE_HEADERS]
23652440 [--ca-key-file CA_KEY_FILE] [--ca-cert-dir CA_CERT_DIR]
23662441 [--ca-cert-file CA_CERT_FILE] [--ca-file CA_FILE]
@@ -2378,10 +2453,45 @@ usage: -m [-h] [--tunnel-hostname TUNNEL_HOSTNAME] [--tunnel-port TUNNEL_PORT]
23782453 [--filtered-client-ips FILTERED_CLIENT_IPS]
23792454 [--filtered-url-regex-config FILTERED_URL_REGEX_CONFIG]
23802455
2381- proxy.py v2.4.4rc6.dev172+ge1879403.d20240425
2456+ proxy.py v2.4.4rc6.dev191+gef5a8922
23822457
23832458options:
23842459 -h, --help show this help message and exit
2460+ --enable-proxy-protocol
2461+ Default: False. If used, will enable proxy protocol.
2462+ Only version 1 is currently supported.
2463+ --threadless Default: True. Enabled by default on Python 3.8+ (mac,
2464+ linux). When disabled a new thread is spawned to
2465+ handle each client connection.
2466+ --threaded Default: False. Disabled by default on Python < 3.8
2467+ and windows. When enabled a new thread is spawned to
2468+ handle each client connection.
2469+ --num-workers NUM_WORKERS
2470+ Defaults to number of CPU cores.
2471+ --enable-events Default: False. Enables core to dispatch lifecycle
2472+ events. Plugins can be used to subscribe for core
2473+ events.
2474+ --enable-conn-pool Default: False. (WIP) Enable upstream connection
2475+ pooling.
2476+ --key-file KEY_FILE Default: None. Server key file to enable end-to-end
2477+ TLS encryption with clients. If used, must also pass
2478+ --cert-file.
2479+ --cert-file CERT_FILE
2480+ Default: None. Server certificate to enable end-to-end
2481+ TLS encryption with clients. If used, must also pass
2482+ --key-file.
2483+ --client-recvbuf-size CLIENT_RECVBUF_SIZE
2484+ Default: 128 KB. Maximum amount of data received from
2485+ the client in a single recv() operation.
2486+ --server-recvbuf-size SERVER_RECVBUF_SIZE
2487+ Default: 128 KB. Maximum amount of data received from
2488+ the server in a single recv() operation.
2489+ --max-sendbuf-size MAX_SENDBUF_SIZE
2490+ Default: 64 KB. Maximum amount of data to flush in a
2491+ single send() operation.
2492+ --timeout TIMEOUT Default: 10.0. Number of seconds after which an
2493+ inactive connection must be dropped. Inactivity is
2494+ defined by no data sent or received by the client.
23852495 --tunnel-hostname TUNNEL_HOSTNAME
23862496 Default: None. Remote hostname or IP address to which
23872497 SSH tunnel will be established.
@@ -2397,17 +2507,6 @@ options:
23972507 --tunnel-remote-port TUNNEL_REMOTE_PORT
23982508 Default: 8899. Remote port which will be forwarded
23992509 locally for proxy.
2400- --threadless Default: True. Enabled by default on Python 3.8+ (mac,
2401- linux). When disabled a new thread is spawned to
2402- handle each client connection.
2403- --threaded Default: False. Disabled by default on Python < 3.8
2404- and windows. When enabled a new thread is spawned to
2405- handle each client connection.
2406- --num-workers NUM_WORKERS
2407- Defaults to number of CPU cores.
2408- --enable-events Default: False. Enables core to dispatch lifecycle
2409- events. Plugins can be used to subscribe for core
2410- events.
24112510 --local-executor LOCAL_EXECUTOR
24122511 Default: 1. Enabled by default. Use 0 to disable. When
24132512 enabled acceptors will make use of local (same
@@ -2463,30 +2562,6 @@ options:
24632562 --ssh-listener-klass SSH_LISTENER_KLASS
24642563 Default: proxy.core.ssh.listener.SshTunnelListener. An
24652564 implementation of BaseSshTunnelListener
2466- --enable-proxy-protocol
2467- Default: False. If used, will enable proxy protocol.
2468- Only version 1 is currently supported.
2469- --enable-conn-pool Default: False. (WIP) Enable upstream connection
2470- pooling.
2471- --key-file KEY_FILE Default: None. Server key file to enable end-to-end
2472- TLS encryption with clients. If used, must also pass
2473- --cert-file.
2474- --cert-file CERT_FILE
2475- Default: None. Server certificate to enable end-to-end
2476- TLS encryption with clients. If used, must also pass
2477- --key-file.
2478- --client-recvbuf-size CLIENT_RECVBUF_SIZE
2479- Default: 128 KB. Maximum amount of data received from
2480- the client in a single recv() operation.
2481- --server-recvbuf-size SERVER_RECVBUF_SIZE
2482- Default: 128 KB. Maximum amount of data received from
2483- the server in a single recv() operation.
2484- --max-sendbuf-size MAX_SENDBUF_SIZE
2485- Default: 64 KB. Maximum amount of data to flush in a
2486- single send() operation.
2487- --timeout TIMEOUT Default: 10.0. Number of seconds after which an
2488- inactive connection must be dropped. Inactivity is
2489- defined by no data sent or received by the client.
24902565 --disable-http-proxy Default: False. Whether to disable
24912566 proxy.HttpProxyPlugin.
24922567 --disable-headers DISABLE_HEADERS
0 commit comments