From 85072e45203ff8d8111883af13ba1ab876f16eed Mon Sep 17 00:00:00 2001 From: Kr328 <39107975+Kr328@users.noreply.github.com> Date: Thu, 19 Dec 2019 21:02:13 +0800 Subject: [PATCH] fix broadcast on sysstack --- app/build.gradle | 4 +-- .../github/kr328/clash/ClashStartService.kt | 2 ++ core/src/main/golang/tun/tun.go | 12 +++---- .../java/com/github/kr328/clash/core/Clash.kt | 9 ++++-- .../github/kr328/clash/service/TunService.kt | 8 +++-- service/src/main/res/values/arrays.xml | 31 +++++++++++++++++-- 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 204b135..08b5184 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -13,8 +13,8 @@ android { applicationId "com.github.kr328.clash" minSdkVersion 24 targetSdkVersion 29 - versionCode 10021 - versionName "1.0.21-alpha" + versionCode 10025 + versionName "1.0.25-alpha" } buildTypes { release { diff --git a/app/src/main/java/com/github/kr328/clash/ClashStartService.kt b/app/src/main/java/com/github/kr328/clash/ClashStartService.kt index 6997842..092200e 100644 --- a/app/src/main/java/com/github/kr328/clash/ClashStartService.kt +++ b/app/src/main/java/com/github/kr328/clash/ClashStartService.kt @@ -40,6 +40,8 @@ class ClashStartService : Service() { startForeground(NOTIFICATION_ID, notification) thread { + Thread.sleep(5000) + ServiceUtils.startProxyService(this) stopSelf() diff --git a/core/src/main/golang/tun/tun.go b/core/src/main/golang/tun/tun.go index 414fb1f..64a8b68 100644 --- a/core/src/main/golang/tun/tun.go +++ b/core/src/main/golang/tun/tun.go @@ -5,7 +5,6 @@ import ( "strconv" "syscall" - "github.com/Dreamacro/clash/dns" "github.com/Dreamacro/clash/global" "github.com/Dreamacro/clash/log" "github.com/Dreamacro/clash/proxy/tun" @@ -16,9 +15,8 @@ type Callback interface { } var tunInstance *tun.TUN -var dnsGateway net.IP -func StartTunDevice(fd, mtu int, gateway string, dns string, callback Callback) error { +func StartTunDevice(fd, mtu int, gateway string, dnsGateway string, callback Callback) error { if tunInstance != nil { return nil } @@ -41,7 +39,9 @@ func StartTunDevice(fd, mtu int, gateway string, dns string, callback Callback) }) } - t, err := tun.NewTunProxy("fd://"+strconv.Itoa(fd)+"?mtu="+strconv.Itoa(mtu), *n) + dnsGatewayIP := net.ParseIP(dnsGateway) + + t, err := tun.NewTunProxy("fd://"+strconv.Itoa(fd)+"?mtu="+strconv.Itoa(mtu), *n, dnsGatewayIP) if err != nil { global.DefaultDialer.Control = nil @@ -51,8 +51,6 @@ func StartTunDevice(fd, mtu int, gateway string, dns string, callback Callback) } tunInstance = t - dnsGateway = net.ParseIP(dns) - ResetDnsRedirect() log.Infoln("Android tun started") @@ -79,5 +77,5 @@ func ResetDnsRedirect() { return } - tunInstance.ReCreateDNSServer(dns.DefaultResolver, dnsGateway) + tunInstance.ResetDnsServer() } diff --git a/core/src/main/java/com/github/kr328/clash/core/Clash.kt b/core/src/main/java/com/github/kr328/clash/core/Clash.kt index 021fbd0..2aa0d1e 100644 --- a/core/src/main/java/com/github/kr328/clash/core/Clash.kt +++ b/core/src/main/java/com/github/kr328/clash/core/Clash.kt @@ -3,7 +3,6 @@ package com.github.kr328.clash.core import android.content.Context import bridge.Bridge import bridge.EventPoll -import bridge.Logs import com.github.kr328.clash.core.event.BandwidthEvent import com.github.kr328.clash.core.event.LogEvent import com.github.kr328.clash.core.event.ProcessEvent @@ -77,7 +76,13 @@ class Clash( loadDefault() } - fun startTunDevice(fd: Int, mtu: Int, gateway: String, dns: String, onSocket: (Int) -> Unit) { + fun startTunDevice( + fd: Int, + mtu: Int, + gateway: String, + dns: String, + onSocket: (Int) -> Unit + ) { enforceStarted() Bridge.startTunDevice(fd.toLong(), mtu.toLong(), gateway, dns) { diff --git a/service/src/main/java/com/github/kr328/clash/service/TunService.kt b/service/src/main/java/com/github/kr328/clash/service/TunService.kt index 52ded3a..5f4a348 100644 --- a/service/src/main/java/com/github/kr328/clash/service/TunService.kt +++ b/service/src/main/java/com/github/kr328/clash/service/TunService.kt @@ -15,7 +15,7 @@ class TunService : VpnService(), IClashEventObserver { companion object { // from https://github.com/shadowsocks/shadowsocks-android/blob/master/core/src/main/java/com/github/shadowsocks/bg/VpnService.kt private const val VPN_MTU = 1500 - private const val PRIVATE_VLAN_DNS = "172.19.0.2" // sync with tun/tun.go/dnsServerAddress + private const val PRIVATE_VLAN_DNS = "172.19.0.2" private const val PRIVATE_VLAN4_CLIENT = "172.19.0.1" } @@ -112,14 +112,16 @@ class TunService : VpnService(), IClashEventObserver { start = false if ( settings.isDnsHijackingEnabled ) { - clash.clash.startTunDevice(fileDescriptor.fd, VPN_MTU, + clash.clash.startTunDevice( + fileDescriptor.fd, VPN_MTU, "$PRIVATE_VLAN4_CLIENT/30", "0.0.0.0" ) { protect(it.toInt()) } } else { - clash.clash.startTunDevice(fileDescriptor.fd, VPN_MTU, + clash.clash.startTunDevice( + fileDescriptor.fd, VPN_MTU, "$PRIVATE_VLAN4_CLIENT/30", PRIVATE_VLAN_DNS ) { protect(it.toInt()) diff --git a/service/src/main/res/values/arrays.xml b/service/src/main/res/values/arrays.xml index 7777245..67aaa82 100644 --- a/service/src/main/res/values/arrays.xml +++ b/service/src/main/res/values/arrays.xml @@ -18,7 +18,6 @@ 160.0.0.0/5 168.0.0.0/6 172.0.0.0/12 - 172.19.0.0/30 172.32.0.0/11 172.64.0.0/10 172.128.0.0/9 @@ -38,7 +37,35 @@ 196.0.0.0/6 200.0.0.0/5 208.0.0.0/4 - 224.0.0.0/3 + 224.0.0.0/4 + 240.0.0.0/5 + 248.0.0.0/6 + 252.0.0.0/7 + 254.0.0.0/8 + 255.0.0.0/9 + 255.128.0.0/10 + 255.192.0.0/11 + 255.224.0.0/12 + 255.240.0.0/13 + 255.248.0.0/14 + 255.252.0.0/15 + 255.254.0.0/16 + 255.255.0.0/17 + 255.255.128.0/18 + 255.255.192.0/19 + 255.255.224.0/20 + 255.255.240.0/21 + 255.255.248.0/22 + 255.255.252.0/23 + 255.255.254.0/24 + 255.255.255.0/25 + 255.255.255.128/26 + 255.255.255.192/27 + 255.255.255.224/28 + 255.255.255.240/29 + 255.255.255.248/30 + 255.255.255.252/31 + 255.255.255.254/32