Fix #1197
This commit is contained in:
@@ -25,6 +25,8 @@ import java.net.InetAddress
|
||||
import java.util
|
||||
import java.util.concurrent.TimeUnit
|
||||
import java.util.{Timer, TimerTask}
|
||||
import java.net.InetAddress
|
||||
import java.net.Inet6Address
|
||||
|
||||
import android.app.Service
|
||||
import android.content.{BroadcastReceiver, Context, Intent, IntentFilter}
|
||||
@@ -330,6 +332,13 @@ trait BaseService extends Service {
|
||||
file
|
||||
}
|
||||
|
||||
private final def buildRemoteDns(remoteDns: String): String = {
|
||||
val addr = InetAddress.getByName(remoteDns)
|
||||
if (addr.isInstanceOf[Inet6Address])
|
||||
return "[" + remoteDns + "]"
|
||||
remoteDns
|
||||
}
|
||||
|
||||
protected final def buildOvertureConfig(file: String): String = {
|
||||
val config = new JSONObject()
|
||||
.put("BindAddress", ":" + (profile.localPort + 53))
|
||||
@@ -356,14 +365,17 @@ trait BaseService extends Service {
|
||||
makeDns("Primary-1", "119.29.29.29", edns = false),
|
||||
makeDns("Primary-2", "114.114.114.114", edns = false)
|
||||
)))
|
||||
.put("AlternativeDNS", new JSONArray().put(makeDns("Alternative", profile.remoteDns)))
|
||||
.put("AlternativeDNS", new JSONArray().put(makeDns("Alternative",
|
||||
buildRemoteDns(profile.remoteDns.trim))))
|
||||
.put("IPNetworkFile", "china_ip_list.txt")
|
||||
.put("DomainFile", "gfwlist.txt")
|
||||
case Acl.CHINALIST => config
|
||||
.put("PrimaryDNS", new JSONArray().put(makeDns("Primary", "119.29.29.29")))
|
||||
.put("AlternativeDNS", new JSONArray().put(makeDns("Alternative", profile.remoteDns)))
|
||||
.put("AlternativeDNS", new JSONArray().put(makeDns("Alternative",
|
||||
buildRemoteDns(profile.remoteDns.trim))))
|
||||
case _ => config
|
||||
.put("PrimaryDNS", new JSONArray().put(makeDns("Primary", profile.remoteDns)))
|
||||
.put("PrimaryDNS", new JSONArray().put(makeDns("Primary",
|
||||
buildRemoteDns(profile.remoteDns.trim))))
|
||||
.put("AlternativeDNS", new JSONArray().put(makeDns("Alternative", "208.67.222.222")))
|
||||
}
|
||||
IOUtils.writeString(new File(getFilesDir, file), config.toString)
|
||||
|
||||
@@ -22,6 +22,8 @@ package com.github.shadowsocks
|
||||
|
||||
import java.io.File
|
||||
import java.util.Locale
|
||||
import java.net.InetAddress
|
||||
import java.net.Inet6Address
|
||||
|
||||
import android.content._
|
||||
import android.content.pm.PackageManager.NameNotFoundException
|
||||
@@ -189,7 +191,7 @@ class ShadowsocksVpnService extends VpnService with BaseService {
|
||||
.setMtu(VPN_MTU)
|
||||
.addAddress(PRIVATE_VLAN.formatLocal(Locale.ENGLISH, "1"), 24)
|
||||
|
||||
builder.addDnsServer(profile.remoteDns.trim)
|
||||
builder.addDnsServer("8.8.8.8") // It's fake DNS for tun2socks, not the real remote DNS
|
||||
|
||||
if (profile.ipv6) {
|
||||
builder.addAddress(PRIVATE_VLAN6.formatLocal(Locale.ENGLISH, "1"), 126)
|
||||
@@ -221,7 +223,11 @@ class ShadowsocksVpnService extends VpnService with BaseService {
|
||||
val subnet = Subnet.fromString(cidr)
|
||||
builder.addRoute(subnet.address.getHostAddress, subnet.prefixSize)
|
||||
})
|
||||
builder.addRoute(profile.remoteDns.trim, 32)
|
||||
val addr = InetAddress.getByName(profile.remoteDns.trim)
|
||||
if (addr.isInstanceOf[Inet6Address])
|
||||
builder.addRoute(addr, 128)
|
||||
else if (addr.isInstanceOf[InetAddress])
|
||||
builder.addRoute(addr, 32)
|
||||
}
|
||||
|
||||
conn = builder.establish()
|
||||
|
||||
Reference in New Issue
Block a user