Improve README and do not panic when reading from proxy fails

This commit is contained in:
B. Blechschmidt 2022-08-17 00:04:08 +02:00
parent b3ddf7462c
commit 41c22fa4d4
2 changed files with 29 additions and 12 deletions

View file

@ -11,26 +11,31 @@ cargo build --release
## Setup
A standard setup, which would route all traffic from your system through the tunnel interface, could look as follows:
```
# Create a tunnel interface named tun0 which your user can bind to.
```shell
# Define the proxy endpoint.
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.
sudo ip tuntap add name tun0 mode tun user $USER
sudo ip link set tun0 up
# To prevent a loop, replace 1.2.3.4 with the IP address of the proxy server.
# This will add a route to the proxy server that behaves like the default route.
sudo ip route add 1.2.3.4 $(ip route | grep '^default' | cut -d' ' -f2-)
# 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
# Again, replace 1.2.3.4 with the IP address of the proxy server.
./target/release/tun2proxy --tun tun0 --socks5 1.2.3.4
./target/release/tun2proxy --tun tun0 --socks5 "$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
`$USER` with `$SUDO_USER`.
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
```
tun2proxy 0.1.0
@ -47,4 +52,9 @@ OPTIONS:
-h, --http <IP:PORT> HTTP server to use
-s, --socks5 <IP:PORT> SOCKS5 server to use
-t, --tun <TUN> Name of the tun interface
```
```
## TODO
- Authentication for SOCKS (plain) and HTTP (base64)
- UDP support for SOCKS
- Virtual DNS