From 6464f3748bdbe061d22f5bd1307c30f83c0d2ea4 Mon Sep 17 00:00:00 2001 From: spyophobia <76800505+spyophobia@users.noreply.github.com> Date: Thu, 31 Aug 2023 17:39:24 +0800 Subject: [PATCH] local DNS uses mode `tcp_and_udp` by default - Fixes #1281 --- crates/shadowsocks-service/src/config.rs | 29 ++++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/crates/shadowsocks-service/src/config.rs b/crates/shadowsocks-service/src/config.rs index 4112a8d1f706..e44a9e9d504b 100644 --- a/crates/shadowsocks-service/src/config.rs +++ b/crates/shadowsocks-service/src/config.rs @@ -66,14 +66,7 @@ use serde::{Deserialize, Serialize}; use shadowsocks::relay::socks5::Address; use shadowsocks::{ config::{ - ManagerAddr, - Mode, - ReplayAttackPolicy, - ServerAddr, - ServerConfig, - ServerUser, - ServerUserManager, - ServerWeight, + ManagerAddr, Mode, ReplayAttackPolicy, ServerAddr, ServerConfig, ServerUser, ServerUserManager, ServerWeight, }, crypto::CipherKind, plugin::PluginConfig, @@ -891,12 +884,20 @@ pub struct LocalConfig { impl LocalConfig { /// Create a new `LocalConfig` pub fn new(protocol: ProtocolType) -> LocalConfig { + // DNS server runs in `TcpAndUdp` mode by default to maintain backwards compatibility + // see https://github.com/shadowsocks/shadowsocks-rust/issues/1281 + let mode = match protocol { + #[cfg(feature = "local-dns")] + ProtocolType::Dns => Mode::TcpAndUdp, + _ => Mode::TcpOnly, + }; + LocalConfig { addr: None, protocol, - mode: Mode::TcpOnly, + mode, udp_addr: None, #[cfg(feature = "local-tunnel")] @@ -1456,7 +1457,15 @@ impl Config { } }, None => { - local_config.mode = global_mode; + // DNS server runs in `TcpAndUdp` mode by default to maintain backwards compatibility + // see https://github.com/shadowsocks/shadowsocks-rust/issues/1281 + let mode = match protocol { + #[cfg(feature = "local-dns")] + ProtocolType::Dns => Mode::TcpAndUdp, + _ => global_mode, + }; + + local_config.mode = mode; } }