71
71
- [ End-to-End Encryption] ( #end-to-end-encryption )
72
72
- [ TLS Interception] ( #tls-interception )
73
73
- [ 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 )
74
77
- [ Proxy Over SSH Tunnel] ( #proxy-over-ssh-tunnel )
75
78
- [ Proxy Remote Requests Locally] ( #proxy-remote-requests-locally )
76
79
- [ Proxy Local Requests Remotely] ( #proxy-local-requests-remotely )
138
141
[ // ] : # ( DO-NOT-REMOVE-docs-badges-END )
139
142
140
143
# Features
144
+ - [ A drop-in alternative to ` ngrok ` ] ( #grout-ngrok-alternative )
141
145
- Fast & Scalable
142
146
143
147
- Scale up by using all available cores on the system
@@ -1290,6 +1294,76 @@ with TLS Interception:
1290
1294
}
1291
1295
```
1292
1296
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
+ Write to us at support@jaxl.com
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 [ support@jaxl.com ] ( mailto:support@jaxl.com ) to get started.
1366
+
1293
1367
# Proxy Over SSH Tunnel
1294
1368
1295
1369
** 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
2340
2414
2341
2415
``` console
2342
2416
❯ 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]
2344
2424
[--tunnel-username TUNNEL_USERNAME]
2345
2425
[--tunnel-ssh-key TUNNEL_SSH_KEY]
2346
2426
[--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]
2349
2428
[--local-executor LOCAL_EXECUTOR] [--backlog BACKLOG]
2350
2429
[--hostname HOSTNAME] [--hostnames HOSTNAMES [HOSTNAMES ...]]
2351
2430
[--port PORT] [--ports PORTS [PORTS ...]] [--port-file PORT_FILE]
@@ -2357,10 +2436,6 @@ usage: -m [-h] [--tunnel-hostname TUNNEL_HOSTNAME] [--tunnel-port TUNNEL_PORT]
2357
2436
[--basic-auth BASIC_AUTH] [--enable-ssh-tunnel]
2358
2437
[--work-klass WORK_KLASS] [--pid-file PID_FILE] [--openssl OPENSSL]
2359
2438
[--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]
2364
2439
[--disable-http-proxy] [--disable-headers DISABLE_HEADERS]
2365
2440
[--ca-key-file CA_KEY_FILE] [--ca-cert-dir CA_CERT_DIR]
2366
2441
[--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]
2378
2453
[--filtered-client-ips FILTERED_CLIENT_IPS]
2379
2454
[--filtered-url-regex-config FILTERED_URL_REGEX_CONFIG]
2380
2455
2381
- proxy.py v2.4.4rc6.dev172+ge1879403.d20240425
2456
+ proxy.py v2.4.4rc6.dev191+gef5a8922
2382
2457
2383
2458
options:
2384
2459
-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.
2385
2495
--tunnel-hostname TUNNEL_HOSTNAME
2386
2496
Default: None. Remote hostname or IP address to which
2387
2497
SSH tunnel will be established.
@@ -2397,17 +2507,6 @@ options:
2397
2507
--tunnel-remote-port TUNNEL_REMOTE_PORT
2398
2508
Default: 8899. Remote port which will be forwarded
2399
2509
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.
2411
2510
--local-executor LOCAL_EXECUTOR
2412
2511
Default: 1. Enabled by default. Use 0 to disable. When
2413
2512
enabled acceptors will make use of local (same
@@ -2463,30 +2562,6 @@ options:
2463
2562
--ssh-listener-klass SSH_LISTENER_KLASS
2464
2563
Default: proxy.core.ssh.listener.SshTunnelListener. An
2465
2564
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.
2490
2565
--disable-http-proxy Default: False. Whether to disable
2491
2566
proxy.HttpProxyPlugin.
2492
2567
--disable-headers DISABLE_HEADERS
0 commit comments