Commit 7356eded authored by Max Lv's avatar Max Lv

Fix #1197

parent 1268376b
......@@ -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()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment