diff --git a/src/main/res/values-zh-rCN/strings.xml b/src/main/res/values-zh-rCN/strings.xml index 4beaa3c9..e8a90333 100644 --- a/src/main/res/values-zh-rCN/strings.xml +++ b/src/main/res/values-zh-rCN/strings.xml @@ -68,6 +68,8 @@ NAT 模式 (仅限调试) 从 VPN 模式切换为 NAT 模式,需要 ROOT 权限 + 远程 DNS + 用于远程域名解析的 DNS 服务器 (默认为 8.8.8.8) UDP 转发 由远程服务器转发 UDP 协议的数据包 diff --git a/src/main/res/values-zh-rTW/strings.xml b/src/main/res/values-zh-rTW/strings.xml index 0d1d7e26..434e5f7f 100644 --- a/src/main/res/values-zh-rTW/strings.xml +++ b/src/main/res/values-zh-rTW/strings.xml @@ -69,6 +69,8 @@ NAT 模式 (已過時) 使用 NAT 模式代替 VPN 模式,需要 ROOT 權限 + 遠程 DNS + 用於遠程域名解析的 DNS 伺服器 (默認為 8.8.8.8) UDP 轉送 向遠端轉送 UDP 封包 diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 8d896677..937e00fe 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -10,6 +10,8 @@ Switch to another profile or add new profiles NAT mode (deprecated) Use NAT mode instead of VPN mode. Requires ROOT permission. + Remote DNS + DNS server for remote hostname resolution. (Default 8.8.8.8) Network Traffic Sent: \t\t\t\t\t%3$s\t↑\t%1$s/s\nReceived: \t%4$s\t↓\t%2$s/s \n%1$s↑\t%2$s↓ diff --git a/src/main/res/xml/pref_all.xml b/src/main/res/xml/pref_all.xml index d4df4e23..0efe9261 100644 --- a/src/main/res/xml/pref_all.xml +++ b/src/main/res/xml/pref_all.xml @@ -60,6 +60,10 @@ android:entryValues="@array/route_value" android:summary="%s" android:title="@string/route_list"/> + + + diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala index 6fd24209..2d372e25 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksNatService.scala @@ -123,10 +123,11 @@ class ShadowsocksNatService extends BaseService { , "-c" , getApplicationInfo.dataDir + "/ss-tunnel-nat.conf") cmd += "-L" - if (profile.route == Route.CHINALIST) - cmd += "114.114.114.114:53" - else + + if (profile.remoteDns == null) cmd += "8.8.8.8:53" + else + cmd += profile.remoteDns + ":53" if (profile.auth) cmd += "-A" diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala index d858e44e..97e9f2af 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksSettings.scala @@ -42,7 +42,7 @@ object ShadowsocksSettings { private final val TAG = "ShadowsocksSettings" private val PROXY_PREFS = Array(Key.name, Key.host, Key.remotePort, Key.localPort, Key.password, Key.method, Key.auth, Key.kcp, Key.kcpPort, Key.kcpcli) - private val FEATURE_PREFS = Array(Key.route, Key.proxyApps, Key.udpdns, Key.ipv6) + private val FEATURE_PREFS = Array(Key.route, Key.remoteDns, Key.proxyApps, Key.udpdns, Key.ipv6) // Helper functions def updateDropDownPreference(pref: Preference, value: String) { @@ -76,6 +76,10 @@ object ShadowsocksSettings { case Key.password => updateEditTextPreference(pref, profile.password) pref.setSummary(if (demo) "\u2022" * 32 else "%s") + case Key.remoteDns => + updateEditTextPreference(pref, profile.remoteDns) + if (profile.remoteDns != null) + pref.setSummary(if (demo) "8.8.8.8" else "%s") case Key.method => updateDropDownPreference(pref, profile.method) case Key.route => updateDropDownPreference(pref, profile.route) case Key.proxyApps => updateSwitchPreference(pref, profile.proxyApps) @@ -129,6 +133,10 @@ class ShadowsocksSettings extends PreferenceFragment with OnSharedPreferenceChan profile.route = value.asInstanceOf[String] app.profileManager.updateProfile(profile) }) + findPreference(Key.remoteDns).setOnPreferenceChangeListener((_, value) => { + profile.remoteDns = value.asInstanceOf[String] + app.profileManager.updateProfile(profile) + }) findPreference(Key.kcp).setOnPreferenceChangeListener((_, value) => { profile.kcp = value.asInstanceOf[Boolean] diff --git a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala index 9b7e4c03..e035f235 100644 --- a/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala +++ b/src/main/scala/com/github/shadowsocks/ShadowsocksVpnService.scala @@ -274,10 +274,11 @@ class ShadowsocksVpnService extends VpnService with BaseService { , "-c", getApplicationInfo.dataDir + "/ss-tunnel-vpn.conf") cmd += "-L" - if (profile.route == Route.CHINALIST) - cmd += "114.114.114.114:53" - else + + if (profile.remoteDns == null) cmd += "8.8.8.8:53" + else + cmd += profile.remoteDns + ":53" if (profile.auth) cmd += "-A" diff --git a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala index a7c73dca..145a18a9 100644 --- a/src/main/scala/com/github/shadowsocks/database/DBHelper.scala +++ b/src/main/scala/com/github/shadowsocks/database/DBHelper.scala @@ -46,7 +46,7 @@ object DBHelper { } class DBHelper(val context: Context) - extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 20) { + extends OrmLiteSqliteOpenHelper(context, DBHelper.PROFILE, null, 21) { import DBHelper._ lazy val profileDao: Dao[Profile, Int] = getDao(classOf[Profile]) @@ -125,6 +125,10 @@ class DBHelper(val context: Context) } else if (oldVersion < 19) { profileDao.executeRawNoArgs("UPDATE `profile` SET kcpPort = 8399 WHERE kcpPort = 0;") } + + if (oldVersion < 21) { + profileDao.executeRawNoArgs("ALTER TABLE `profile` ADD COLUMN remoteDns VARCHAR DEFAULT '8.8.8.8';") + } } catch { case ex: Exception => app.track(ex) diff --git a/src/main/scala/com/github/shadowsocks/database/Profile.scala b/src/main/scala/com/github/shadowsocks/database/Profile.scala index 74d5e487..585f59f5 100644 --- a/src/main/scala/com/github/shadowsocks/database/Profile.scala +++ b/src/main/scala/com/github/shadowsocks/database/Profile.scala @@ -52,6 +52,9 @@ class Profile { @DatabaseField var route: String = "all" + @DatabaseField + var remoteDns: String = "8.8.8.8" + @DatabaseField var proxyApps: Boolean = false diff --git a/src/main/scala/com/github/shadowsocks/utils/Constants.scala b/src/main/scala/com/github/shadowsocks/utils/Constants.scala index cc11dd7b..31fb551c 100644 --- a/src/main/scala/com/github/shadowsocks/utils/Constants.scala +++ b/src/main/scala/com/github/shadowsocks/utils/Constants.scala @@ -149,6 +149,7 @@ object Key { val method = "encMethod" val remotePort = "remotePortNum" val localPort = "localPortNum" + val remoteDns = "remoteDns" val profileTip = "profileTip"