From 8438eddc952ce1ec59c927cee8c37954eca4dfbc Mon Sep 17 00:00:00 2001 From: ssrlive <30760636+ssrlive@users.noreply.github.com> Date: Fri, 19 Apr 2024 22:17:36 +0800 Subject: [PATCH] The bypass value is IP/CIDR now --- Cargo.toml | 2 +- README.md | 5 +++-- src/args.rs | 11 +++++++---- src/desktop_api.rs | 2 +- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 940c2c4..e8ea745 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,7 +31,7 @@ socks5-impl = { version = "0.5" } thiserror = "1.0" tokio = { version = "1", features = ["full"] } tokio-util = "0.7" -tproxy-config = { version = "4.0.2", features = ["log"] } +tproxy-config = { version = "5.0.0", features = ["log"] } trust-dns-proto = "0.23" tun2 = { version = "1.3", features = ["async"] } udp-stream = { version = "0.0", default-features = false } diff --git a/README.md b/README.md index ea290a4..543f7c6 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Apart from SOCKS5, SOCKS4 and HTTP are supported. Note that if your proxy is a non-global IP address (e.g. because the proxy is provided by some tunneling tool running locally), you will additionally need to provide the public IP address of the server through which the traffic is -actually tunneled. In such a case, the tool will tell you to specify the address through `--bypass ` if you +actually tunneled. In such a case, the tool will tell you to specify the address through `--bypass ` if you wish to make use of the automated setup feature. ## Manual Setup @@ -134,7 +134,8 @@ Options: See `capabilities(7)` -d, --dns DNS handling strategy [default: direct] [possible values: virtual, over-tcp, direct] --dns-addr DNS resolver address [default: 8.8.8.8] - -b, --bypass IPs used in routing setup which should bypass the tunnel + -b, --bypass IPs used in routing setup which should bypass the tunnel, in the form of IP or IP/CIDR. + Multiple IPs can be specified, e.g. --bypass 3.4.5.0/24 --bypass 5.6.7.8 --tcp-timeout TCP timeout in seconds [default: 600] --udp-timeout UDP timeout in seconds [default: 10] -v, --verbosity Verbosity level [default: info] [possible values: off, error, warn, info, debug, trace] diff --git a/src/args.rs b/src/args.rs index b37521f..7578e10 100644 --- a/src/args.rs +++ b/src/args.rs @@ -1,5 +1,6 @@ use crate::{Error, Result}; use socks5_impl::protocol::UserKey; +use tproxy_config::IpCidr; #[cfg(target_os = "linux")] use std::ffi::OsString; @@ -62,9 +63,11 @@ pub struct Args { #[arg(long, value_name = "IP", default_value = "8.8.8.8")] pub dns_addr: IpAddr, - /// IPs used in routing setup which should bypass the tunnel - #[arg(short, long, value_name = "IP")] - pub bypass: Vec, + /// IPs used in routing setup which should bypass the tunnel, + /// in the form of IP or IP/CIDR. Multiple IPs can be specified, + /// e.g. --bypass 3.4.5.0/24 --bypass 5.6.7.8 + #[arg(short, long, value_name = "IP/CIDR")] + pub bypass: Vec, /// TCP timeout in seconds #[arg(long, value_name = "seconds", default_value = "600")] @@ -158,7 +161,7 @@ impl Args { self } - pub fn bypass(&mut self, bypass: IpAddr) -> &mut Self { + pub fn bypass(&mut self, bypass: IpCidr) -> &mut Self { self.bypass.push(bypass); self } diff --git a/src/desktop_api.rs b/src/desktop_api.rs index d49a9b0..311f272 100644 --- a/src/desktop_api.rs +++ b/src/desktop_api.rs @@ -16,7 +16,7 @@ static TUN_QUIT: std::sync::Mutex> = /// Parameters: /// - proxy_url: the proxy url, e.g. "socks5://127.0.0.1:1080" /// - tun: the tun device name, e.g. "utun5" -/// - bypass: the bypass ip, e.g. "123.45.67.89" +/// - bypass: the bypass IP/CIDR, e.g. "123.45.67.0/24" /// - dns_strategy: the dns strategy, see ArgDns enum /// - root_privilege: whether to run with root privilege /// - verbosity: the verbosity level, see ArgVerbosity enum