From 8dd075a7f468612266f7bab0d820b3c88016ce55 Mon Sep 17 00:00:00 2001 From: "B. Blechschmidt" Date: Wed, 22 Mar 2023 12:08:07 +0100 Subject: [PATCH] Adapt README to new interface --- README.md | 55 ++++++++++++++++++----------------------------------- src/main.rs | 4 ++-- 2 files changed, 20 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 62205dc..fdc6dbb 100644 --- a/README.md +++ b/README.md @@ -12,22 +12,25 @@ cargo build --release ## Setup A standard setup, which would route all traffic from your system through the tunnel interface, could look as follows: ```shell -# Define the proxy endpoint. +# The proxy type can be either SOCKS5 or HTTP. +PROXY_TYPE=SOCKS5 PROXY_IP=1.2.3.4 PROXY_PORT=1080 -# Create a tunnel interface named tun0 which your user can bind to, so we don't need to run tun2proxy as root. +# Create a tunnel interface named tun0 which your user can bind to, +# so we don't need to run tun2proxy as root. sudo ip tuntap add name tun0 mode tun user $USER sudo ip link set tun0 up -# To prevent a routing loop, we add a route to the proxy server that behaves like the default route. +# To prevent a routing loop, we add a route to the proxy server that behaves +# like the default route. sudo ip route add "$PROXY_IP" $(ip route | grep '^default' | cut -d ' ' -f 2-) # Route all your traffic through tun0 without interfering with the default route. sudo ip route add 128.0.0.0/1 dev tun0 sudo ip route add 0.0.0.0/1 dev tun0 -./target/release/tun2proxy --tun tun0 --proxy socks5 --addr "$PROXY_IP:$PROXY_PORT" +./target/release/tun2proxy --tun tun0 --proxy "$PROXY_TYPE://$PROXY_IP:$PROXY_PORT" ``` Note that if you paste these commands into a shell script, which you then run with `sudo`, you might want to replace @@ -36,49 +39,27 @@ Note that if you paste these commands into a shell script, which you then run wi For DNS to work, you might need an additional tool like [dnsproxy](https://github.com/AdguardTeam/dnsproxy) that is configured to listen on a local UDP port and communicates with the upstream DNS server via TCP. -## CLI -======= -When you end the running of this program and want to eliminate the impact caused by the above several commands, -you can execute the following commands. +When you terminate this program and want to eliminate the impact caused by the above several commands, +you can execute the following command. The routes will be automatically deleted with the tunnel device. ```shell -sudo ip route del 0.0.0.0/1 dev tun0 -sudo ip route del 128.0.0.0/1 dev tun0 -sudo ip link set tun0 down -sudo ip tuntap del tun0 mode tun +sudo ip link del tun0 ``` ## CLI ``` Tunnel interface to proxy. -Usage: tun2proxy [OPTIONS] --tun --proxy --addr +Usage: tun2proxy [OPTIONS] --proxy Options: - -t, --tun - Name of the tun interface - - -p, --proxy - What proxy type to run - - Possible values: - - socks5: SOCKS5 server to use - - http: HTTP server to use - - -a, --addr - Server address with format ip:port - - --username - Username for authentication - - --password - Password for authentication - - -h, --help - Print help (see a summary with '-h') - - -V, --version - Print version + -t, --tun Name of the tun interface [default: tun0] + -p, --proxy The proxy URL in the form proto://[username[:password]@]host:port + -h, --help Print help + -V, --version Print version ``` +Currently, tun2proxy supports two proxy protocols: HTTP and SOCKS5. A proxy is supplied to the `--proxy` argument in the +URL format. For example, an HTTP proxy at 1.2.3.4:1080 with a username of `john.doe` and a password of `secret` is +supplied as `--proxy http://john.doe:secret@1.2.3.4:1080`. This works analogously to curl's `--proxy` argument. ## TODO - UDP support for SOCKS diff --git a/src/main.rs b/src/main.rs index e1bca13..ff7dcec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,8 +14,8 @@ struct Args { #[arg(short, long, value_name = "name", default_value = "tun0")] tun: String, - /// What proxy type to run - #[arg(short, long = "proxy", value_parser = proxy_url_parser)] + /// The proxy URL in the form proto://[username[:password]@]host:port + #[arg(short, long = "proxy", value_parser = proxy_url_parser, value_name = "URL")] proxy: ArgProxy, }