diff --git a/Cargo.lock b/Cargo.lock index b8c907a5..d26bfe7f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2083,7 +2083,7 @@ dependencies = [ [[package]] name = "shadowsocks-rust" -version = "1.13.4" +version = "1.13.5" dependencies = [ "build-time", "byte_string", @@ -2115,7 +2115,7 @@ dependencies = [ [[package]] name = "shadowsocks-service" -version = "1.13.4" +version = "1.13.5" dependencies = [ "arc-swap 1.5.0", "async-trait", diff --git a/Cargo.toml b/Cargo.toml index 096e2993..5d500ecd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks-rust" -version = "1.13.4" +version = "1.13.5" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" @@ -164,7 +164,7 @@ jemallocator = { version = "0.3", optional = true } snmalloc-rs = { version = "0.2", optional = true } rpmalloc = { version = "0.2", optional = true } -shadowsocks-service = { version = "1.13.4", path = "./crates/shadowsocks-service" } +shadowsocks-service = { version = "1.13.5", path = "./crates/shadowsocks-service" } [target.'cfg(unix)'.dependencies] daemonize = "0.4" diff --git a/README.md b/README.md index 198f2b51..3901bcdd 100644 --- a/README.md +++ b/README.md @@ -662,6 +662,7 @@ Example configuration: ### Environment Variables - `SS_SERVER_PASSWORD`: A default password for servers that created from command line argument (`--server-addr`) +- `SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN`: `"system"` DNS resolver force use system's builtin (`getaddrinfo` in *NIX) ## Supported Ciphers diff --git a/crates/shadowsocks-service/Cargo.toml b/crates/shadowsocks-service/Cargo.toml index 35e3b666..5f967fe7 100644 --- a/crates/shadowsocks-service/Cargo.toml +++ b/crates/shadowsocks-service/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "shadowsocks-service" -version = "1.13.4" +version = "1.13.5" authors = ["Shadowsocks Contributors"] description = "shadowsocks is a fast tunnel proxy that helps you bypass firewalls." repository = "https://github.com/shadowsocks/shadowsocks-rust" diff --git a/crates/shadowsocks-service/src/dns/mod.rs b/crates/shadowsocks-service/src/dns/mod.rs index cd32c71c..d6021ff0 100644 --- a/crates/shadowsocks-service/src/dns/mod.rs +++ b/crates/shadowsocks-service/src/dns/mod.rs @@ -1,5 +1,6 @@ //! DNS resolvers +use log::trace; use shadowsocks::{dns_resolver::DnsResolver, net::ConnectOpts}; use crate::config::DnsConfig; @@ -11,19 +12,32 @@ pub async fn build_dns_resolver(dns: DnsConfig, ipv6_first: bool, connect_opts: #[cfg(feature = "trust-dns")] if crate::hint_support_default_system_resolver() { use log::warn; + use std::env; - return match DnsResolver::trust_dns_system_resolver(ipv6_first).await { - Ok(r) => Some(r), - Err(err) => { - warn!( + let force_system_builtin = match env::var("SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN") { + Ok(mut v) => { + v.make_ascii_lowercase(); + v == "1" || v == "true" + } + Err(..) => false, + }; + + if !force_system_builtin { + return match DnsResolver::trust_dns_system_resolver(ipv6_first).await { + Ok(r) => Some(r), + Err(err) => { + warn!( "initialize trust-dns DNS system resolver failed, fallback to default system resolver, error: {}", err ); - None - } - }; + None + } + }; + } } + trace!("initialized DNS system resolver builtin"); + None } #[cfg(feature = "trust-dns")] @@ -42,7 +56,6 @@ pub async fn build_dns_resolver(dns: DnsConfig, ipv6_first: bool, connect_opts: #[cfg(feature = "local-dns")] DnsConfig::LocalDns(ns) => { use crate::local::dns::dns_resolver::DnsResolver as LocalDnsResolver; - use log::trace; use shadowsocks::config::Mode; trace!("initializing direct DNS resolver for {}", ns); diff --git a/crates/shadowsocks-service/src/lib.rs b/crates/shadowsocks-service/src/lib.rs index a864c0bb..1cba27dd 100644 --- a/crates/shadowsocks-service/src/lib.rs +++ b/crates/shadowsocks-service/src/lib.rs @@ -82,7 +82,7 @@ fn hint_support_default_system_resolver() -> bool { cfg!(all( unix, not(target_os = "android"), - /* not(target_os = "macos"), - * not(target_os = "ios") */ + // not(target_os = "macos"), + // not(target_os = "ios") )) } diff --git a/debian/changelog b/debian/changelog index 9f5340dc..ed7990cd 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +shadowsocks-rust (1.13.5) unstable; urgency=medium + + ## Features + + - #773 Set environment variable `SS_SYSTEM_DNS_RESOLVER_FORCE_BUILTIN` to use system's builtin DNS resolver + shadowsocks-rust (1.13.4) unstable; urgency=medium ## Features