diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..acb07f96f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "core/src/main/golang/clash"] + path = core/src/main/golang/clash + url = https://github.com/Kr328/Clash diff --git a/core/src/main/golang/clash b/core/src/main/golang/clash new file mode 160000 index 000000000..791a7cd64 --- /dev/null +++ b/core/src/main/golang/clash @@ -0,0 +1 @@ +Subproject commit 791a7cd647b3792459d553ffb68e0415e42367e1 diff --git a/core/src/main/golang/go.mod b/core/src/main/golang/go.mod index 8ef9038b0..694435d63 100644 --- a/core/src/main/golang/go.mod +++ b/core/src/main/golang/go.mod @@ -1,11 +1,11 @@ -module github.com/kr328/clash +module github.com/kr328/cfa go 1.13 require ( - github.com/Dreamacro/clash v0.16.1-0.20191112020912-8e10e67b8925 - github.com/google/btree v1.0.0 // indirect - github.com/google/netstack v0.0.0-20191116005144-95bf25ab4723 - golang.org/x/sys v0.0.0-20191118133127-cf1e2d577169 - golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect + github.com/Dreamacro/clash v0.0.0 // local + github.com/google/netstack v0.0.0-20191031000057-4787376a6744 + golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe ) + +replace github.com/Dreamacro/clash v0.0.0 => ./clash diff --git a/core/src/main/golang/go.sum b/core/src/main/golang/go.sum index f5c0f531c..07afdfa59 100644 --- a/core/src/main/golang/go.sum +++ b/core/src/main/golang/go.sum @@ -1,6 +1,3 @@ -github.com/Dreamacro/clash v0.16.0 h1:ZvV9apOrDHC0s5ff4YCHTRANd/XyOuLWvpyLWOkwS6U= -github.com/Dreamacro/clash v0.16.1-0.20191112020912-8e10e67b8925 h1:MukeaV6O94OWvqzcd3C635+xQNa8spHqKEI0E+ovXnA= -github.com/Dreamacro/clash v0.16.1-0.20191112020912-8e10e67b8925/go.mod h1:4ZBtABBmIGqISniBtu9fpYORrE5mKqIP8SMCTrNNVNY= github.com/Dreamacro/go-shadowsocks2 v0.1.5-0.20191012162057-46254afc8b68 h1:UBDLpj1IGVkUcUBuZWE6DmZApPTZcnmcV6AfyDN/yhg= github.com/Dreamacro/go-shadowsocks2 v0.1.5-0.20191012162057-46254afc8b68/go.mod h1:Y8obOtHDOqxMGHjPglfCiXZBKExOA9VL6I6sJagOwYM= github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da h1:KjTM2ks9d14ZYCvmHS9iAKVt9AyzRSqNU1qabPih5BY= @@ -9,21 +6,17 @@ github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSs github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/go-chi/chi v4.0.2+incompatible h1:maB6vn6FqCxrpz4FqWdh4+lwpyZIQS7YEAUcHlgXVRs= github.com/go-chi/chi v4.0.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-chi/cors v1.0.0 h1:e6x8k7uWbUwYs+aXDoiUzeQFT6l0cygBYyNhD7/1Tg0= github.com/go-chi/cors v1.0.0/go.mod h1:K2Yje0VW/SJzxiyMYu6iPQYa7hMjQX2i/F491VChg1I= -github.com/go-chi/render v1.0.1 h1:4/5tis2cKaNdnv9zFLfXzcquC9HbeZgCnxGnKrltBS8= github.com/go-chi/render v1.0.1/go.mod h1:pq4Rr7HbnsdaeHagklXub+p6Wd16Af5l9koip1OvJns= github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE= github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/netstack v0.0.0-20191116005144-95bf25ab4723 h1:z92yYpQg57ql9n96PBLFhT+N5X44uQ2f3+CNp9Osmu8= -github.com/google/netstack v0.0.0-20191116005144-95bf25ab4723/go.mod h1:r/rILWg3r1Qy9G1IFMhsqWLq2GjwuYoTuPgG7ckMAjk= +github.com/google/netstack v0.0.0-20191031000057-4787376a6744 h1:wKeh74w+ydKcE1Eo44WDzIOcPHWmxxmtAzkAL0Mlspc= +github.com/google/netstack v0.0.0-20191031000057-4787376a6744/go.mod h1:r/rILWg3r1Qy9G1IFMhsqWLq2GjwuYoTuPgG7ckMAjk= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/miekg/dns v1.1.22 h1:Jm64b3bO9kP43ddLjL2EY3Io6bmy1qGb9Xxz6TqS6rc= github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= @@ -56,8 +49,6 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe h1:6fAMxZRR6sl1Uq8U61gxU+kPTs2tR8uOySCbBP7BN/M= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191118133127-cf1e2d577169 h1:LPLFLulk2vyM7yI3CwNW64O6e8AxBmr9opfv14yI7HI= -golang.org/x/sys v0.0.0-20191118133127-cf1e2d577169/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs= diff --git a/core/src/main/golang/main.go b/core/src/main/golang/main.go index 1ae3141cc..68c3f662d 100644 --- a/core/src/main/golang/main.go +++ b/core/src/main/golang/main.go @@ -8,8 +8,8 @@ import ( "github.com/Dreamacro/clash/constant" - "github.com/kr328/clash/profile" - "github.com/kr328/clash/server" + "github.com/kr328/cfa/profile" + "github.com/kr328/cfa/server" ) func main() { diff --git a/core/src/main/golang/profile/load.go b/core/src/main/golang/profile/load.go index d714281aa..a1d013e5c 100644 --- a/core/src/main/golang/profile/load.go +++ b/core/src/main/golang/profile/load.go @@ -7,7 +7,6 @@ import ( adapters "github.com/Dreamacro/clash/adapters/outbound" "github.com/Dreamacro/clash/component/auth" trie "github.com/Dreamacro/clash/component/domain-trie" - "github.com/Dreamacro/clash/component/socks5" "github.com/Dreamacro/clash/config" "github.com/Dreamacro/clash/constant" "github.com/Dreamacro/clash/dns" @@ -15,7 +14,7 @@ import ( "github.com/Dreamacro/clash/log" "github.com/Dreamacro/clash/tunnel" - "github.com/kr328/clash/tun" + "github.com/kr328/cfa/tun" ) // LoadDefault - load default configure @@ -83,10 +82,12 @@ func LoadFromFile(path string) error { addr = strings.ReplaceAll(addr, "0.0.0.0", "127.0.0.1") addr = strings.ReplaceAll(addr, "::", "::1") - if err == nil { - listen := socks5.ParseAddr(addr) - tun.SetDNSRedirect(&listen) + listen, err := net.ResolveUDPAddr("udp", addr) + if err != nil { + log.Errorln("Unable to parse dns address" + err.Error()) } + + tun.SetDNSRedirect(listen) } else { tun.SetDNSRedirect(nil) } diff --git a/core/src/main/golang/server/profile.go b/core/src/main/golang/server/profile.go index b5336ce3f..ac4a2f41f 100644 --- a/core/src/main/golang/server/profile.go +++ b/core/src/main/golang/server/profile.go @@ -6,7 +6,7 @@ import ( "net" "github.com/Dreamacro/clash/log" - "github.com/kr328/clash/profile" + "github.com/kr328/cfa/profile" ) func handleProfileDefault(client *net.UnixConn) { diff --git a/core/src/main/golang/server/tun.go b/core/src/main/golang/server/tun.go index 9137679cf..7999b91a1 100644 --- a/core/src/main/golang/server/tun.go +++ b/core/src/main/golang/server/tun.go @@ -5,7 +5,7 @@ import ( "net" "github.com/Dreamacro/clash/log" - "github.com/kr328/clash/tun" + "github.com/kr328/cfa/tun" "golang.org/x/sys/unix" ) @@ -45,7 +45,9 @@ func handleTunStart(client *net.UnixConn) { return } - tun.StartTunProxy(fds[0], int(mtu)) + if err := tun.StartTunProxy(fds[0], int(mtu)); err != nil { + log.Errorln("Open tun device failure" + err.Error()) + } } func handleTunStop(client *net.UnixConn) { diff --git a/core/src/main/golang/tun/dev.go b/core/src/main/golang/tun/dev.go deleted file mode 100644 index ecac29736..000000000 --- a/core/src/main/golang/tun/dev.go +++ /dev/null @@ -1,66 +0,0 @@ -package tun - -import ( - "errors" - "syscall" - "unsafe" - - "github.com/google/netstack/tcpip/link/fdbased" - "github.com/google/netstack/tcpip/stack" - - "github.com/Dreamacro/clash/log" -) - -type tunDevice struct { - mtu int - fd int - linkCache *stack.LinkEndpoint -} - -func openTunDevice(fd int, mtu int) (*tunDevice, error) { - var ifr struct { - name [16]byte - flags uint16 - _ [22]byte - } - - _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, uintptr(fd), syscall.TUNGETIFF, uintptr(unsafe.Pointer(&ifr))) - if errno != 0 { - return nil, errno - } - - if ifr.flags&syscall.IFF_TUN == 0 || ifr.flags&syscall.IFF_NO_PI == 0 { - return nil, errors.New("Only tun device and no pi mode supported") - } - - log.Infoln("Open tun fd = %d mtu = %d", fd, mtu) - - return &tunDevice{ - fd: fd, - mtu: mtu, - }, nil -} - -func (t tunDevice) asLinkEndpoint() (result stack.LinkEndpoint, err error) { - if t.linkCache != nil { - return *t.linkCache, nil - } - - if err != nil { - return nil, errors.New("Unable to get device mtu") - } - - result, err = fdbased.New(&fdbased.Options{ - FDs: []int{t.fd}, - MTU: uint32(t.mtu), - EthernetHeader: false, - }) - - t.linkCache = &result - - return result, nil -} - -func (t tunDevice) close() { - syscall.Close(t.fd) -} diff --git a/core/src/main/golang/tun/dnsredirect.go b/core/src/main/golang/tun/dnsredirect.go new file mode 100644 index 000000000..6a5d0cbce --- /dev/null +++ b/core/src/main/golang/tun/dnsredirect.go @@ -0,0 +1,115 @@ +package tun + +import ( + "net" + "time" + + "github.com/google/netstack/tcpip/adapters/gonet" + "github.com/google/netstack/tcpip/buffer" + "github.com/google/netstack/tcpip/stack" + "github.com/google/netstack/tcpip/transport/udp" + "github.com/google/netstack/waiter" +) + +const defaultTimeout = 5 +const defaultDNS = "8.8.8.8" + +type DnsRedirectEndpoint struct { + stack *stack.Stack + udpForwarder *udp.Forwarder + targetAddr *net.UDPAddr +} + +func NewDnsRedirect(s *stack.Stack) *DnsRedirectEndpoint { + result := &DnsRedirectEndpoint{ + stack: s, + udpForwarder: nil, + targetAddr: &net.UDPAddr{IP: net.ParseIP("8.8.8.8"), Port: 53}, + } + + result.udpForwarder = udp.NewForwarder(s, func(request *udp.ForwarderRequest) { + var wq waiter.Queue + ep, err := request.CreateEndpoint(&wq) + if err != nil { + return + } + + conn := gonet.NewConn(&wq, ep) + + targetConn, udpErr := net.DialUDP("udp", &net.UDPAddr{IP: net.IPv4zero, Port: 0}, result.targetAddr) + if udpErr != nil { + conn.Close() + return + } + + // send + go func() { + var buffer [128]byte + + defer targetConn.Close() + defer conn.Close() + + for { + conn.SetDeadline(time.Now().Add(defaultTimeout * time.Second)) + + n, err := conn.Read(buffer[:]) + if err != nil { + return + } + + _, err = targetConn.Write(buffer[:n]) + if err != nil { + return + } + } + }() + + // recive + go func() { + var buffer [128]byte + + defer targetConn.Close() + defer conn.Close() + + for { + conn.SetDeadline(time.Now().Add(defaultTimeout * time.Second)) + + n, err := targetConn.Read(buffer[:]) + if err != nil { + return + } + + _, err = conn.Write(buffer[:n]) + if err != nil { + return + } + } + }() + }) + + return result +} + +func (d *DnsRedirectEndpoint) SetTargetAddress(addr *net.UDPAddr) { + d.targetAddr = addr +} + +func (d *DnsRedirectEndpoint) UniqueID() uint64 { + return 999 +} + +func (d *DnsRedirectEndpoint) HandlePacket(r *stack.Route, id stack.TransportEndpointID, pkt buffer.VectorisedView) { + d.udpForwarder.HandlePacket(r, id, nil, pkt) +} + +func (d *DnsRedirectEndpoint) HandleControlPacket(id stack.TransportEndpointID, typ stack.ControlType, extra uint32, pkt buffer.VectorisedView) { + // Unsupported +} + +func (d *DnsRedirectEndpoint) Close() { + // Unsupported +} + +func (d *DnsRedirectEndpoint) Wait() { + // Unsupported +} diff --git a/core/src/main/golang/tun/tun.go b/core/src/main/golang/tun/tun.go index c7133cf88..923338ed9 100644 --- a/core/src/main/golang/tun/tun.go +++ b/core/src/main/golang/tun/tun.go @@ -1,166 +1,81 @@ -// Package tun from https://github.com/comzyh/clash/tree/add-water/proxy/tun package tun import ( - "fmt" "net" - "strings" + "strconv" - adapters "github.com/Dreamacro/clash/adapters/inbound" - "github.com/Dreamacro/clash/component/socks5" - C "github.com/Dreamacro/clash/constant" "github.com/Dreamacro/clash/log" - T "github.com/Dreamacro/clash/tunnel" - - "encoding/binary" + "github.com/Dreamacro/clash/proxy/tun" "github.com/google/netstack/tcpip" - "github.com/google/netstack/tcpip/adapters/gonet" "github.com/google/netstack/tcpip/network/ipv4" - "github.com/google/netstack/tcpip/network/ipv6" "github.com/google/netstack/tcpip/stack" - "github.com/google/netstack/tcpip/transport/tcp" "github.com/google/netstack/tcpip/transport/udp" - "github.com/google/netstack/waiter" ) -type tun struct { - device *tunDevice - ipstack *stack.Stack +type handler struct { + tunAdapter *tun.TunAdapter + dnsRedirect *DnsRedirectEndpoint } var ( - tunnel = T.Instance() - instance *tun - dnsRedirectAddr *socks5.Addr + instance *handler + dnsRedirectAddr *net.UDPAddr ) // StartTunProxy - start func StartTunProxy(fd, mtu int) error { - if instance != nil { - instance.close() - } + StopTunProxy() - var err error - instance, err = newTunProxy(fd, mtu) + adapter, err := tun.NewTunProxy("fd://" + strconv.Itoa(fd) + "?mtu=" + strconv.Itoa(mtu)) if err != nil { return err } - return nil -} - -// StopTunProxy - stop -func StopTunProxy() { - log.Infoln("Tun Device Stopped") - - instance.close() - instance = nil -} - -// SetDNSRedirect - set dns -func SetDNSRedirect(addr *socks5.Addr) { - dnsRedirectAddr = addr -} - -func newTunProxy(fd int, mtu int) (*tun, error) { - tundev, err := openTunDevice(fd, mtu) - if err != nil { - return nil, fmt.Errorf("Can't open tun: %v", err) - } + s := adapter.Stack() - ipstack := stack.New(stack.Options{ - NetworkProtocols: []stack.NetworkProtocol{ipv4.NewProtocol(), ipv6.NewProtocol()}, - TransportProtocols: []stack.TransportProtocol{tcp.NewProtocol(), udp.NewProtocol()}, - }) + endpoint := NewDnsRedirect(s) - linkEP, err := tundev.asLinkEndpoint() - if err != nil { - return nil, fmt.Errorf("Unable to create virtual endpoint: %v", err) + id := &stack.TransportEndpointID{ + LocalAddress: "", + LocalPort: 53, + RemotePort: 0, + RemoteAddress: "", } - if err := ipstack.CreateNIC(1, linkEP); err != nil { - return nil, fmt.Errorf("Fail to create NIC in ipstack: %v", err) + if err := s.RegisterTransportEndpoint(1, + []tcpip.NetworkProtocolNumber{ + ipv4.ProtocolNumber, + }, + udp.ProtocolNumber, + *id, + endpoint, + true, + 1); err != nil { + log.Errorln("Unable to set dns redirect" + err.String()) } - // IPv4 0.0.0.0/0 - subnet, _ := tcpip.NewSubnet(tcpip.Address(strings.Repeat("\x00", 4)), tcpip.AddressMask(strings.Repeat("\x00", 4))) - ipstack.AddAddressRange(1, ipv4.ProtocolNumber, subnet) - - // IPv6 [::]/0 - subnet, _ = tcpip.NewSubnet(tcpip.Address(strings.Repeat("\x00", 16)), tcpip.AddressMask(strings.Repeat("\x00", 16))) - ipstack.AddAddressRange(1, ipv6.ProtocolNumber, subnet) - - // TCP handler - tcpFwd := tcp.NewForwarder(ipstack, 0, 16, func(r *tcp.ForwarderRequest) { - var wq waiter.Queue - ep, err := r.CreateEndpoint(&wq) - if err != nil { - log.Warnln("Can't create TCP Endpoint in ipstack: %v", err) - return - } - r.Complete(false) - - conn := gonet.NewConn(&wq, ep) - target := getAddr(ep.Info().(*tcp.EndpointInfo).ID, false) - tunnel.Add(adapters.NewSocket(target, conn, C.REDIR, C.TCP)) - - }) - ipstack.SetTransportProtocolHandler(tcp.ProtocolNumber, tcpFwd.HandlePacket) - - // UDP handler - udpFwd := udp.NewForwarder(ipstack, func(r *udp.ForwarderRequest) { - var wq waiter.Queue - ep, err := r.CreateEndpoint(&wq) - if err != nil { - log.Warnln("Can't create UDP Endpoint in ipstack: %v", err) - } - - conn := gonet.NewConn(&wq, ep) - target := getAddr(ep.Info().(*stack.TransportEndpointInfo).ID, true) - tunnel.Add(adapters.NewSocket(target, conn, C.REDIR, C.UDP)) - - }) - ipstack.SetTransportProtocolHandler(udp.ProtocolNumber, udpFwd.HandlePacket) - - tl := &tun{ - device: tundev, - ipstack: ipstack, + instance = &handler{ + tunAdapter: &adapter, + dnsRedirect: endpoint, } - log.Infoln("Tun Adapter ready", fd, mtu) - - return tl, nil -} - -// Close close the TunAdapter -func (t *tun) close() { - t.device.close() - t.ipstack.Close() + return nil } -func getAddr(id stack.TransportEndpointID, dnsRedirect bool) socks5.Addr { - ipv4 := id.LocalAddress.To4() - - if id.LocalPort == 53 && dnsRedirectAddr != nil && dnsRedirect { - return *dnsRedirectAddr +// StopTunProxy - stop +func StopTunProxy() { + if instance != nil { + (*instance.tunAdapter).Close() + instance = nil } +} - // get the big-endian binary represent of port - port := make([]byte, 2) - binary.BigEndian.PutUint16(port, id.LocalPort) - - if ipv4 != "" { - addr := make([]byte, 1+net.IPv4len+2) - addr[0] = socks5.AtypIPv4 - copy(addr[1:1+net.IPv4len], []byte(ipv4)) - addr[1+net.IPv4len], addr[1+net.IPv4len+1] = port[0], port[1] - return addr +// SetDNSRedirect - set dns +func SetDNSRedirect(addr *net.UDPAddr) { + if instance == nil { + return } - addr := make([]byte, 1+net.IPv6len+2) - addr[0] = socks5.AtypIPv6 - copy(addr[1:1+net.IPv6len], []byte(id.LocalAddress)) - addr[1+net.IPv6len], addr[1+net.IPv6len+1] = port[0], port[1] - return addr + instance.dnsRedirect.SetTargetAddress(addr) } 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 caf8eee13..fae7e29f3 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,9 @@ class TunService : VpnService(), IClashEventObserver { // 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_VLAN4_CLIENT = "172.19.0.1" + private const val PRIVATE_VLAN4_DNS = "172.19.0.2" private const val PRIVATE_VLAN6_CLIENT = "fdfe:dcba:9876::1" + private const val PRIVATE_VLAN6_DNS = "fdfe:dcba:9876::2" } private var start = true @@ -56,7 +58,8 @@ class TunService : VpnService(), IClashEventObserver { fileDescriptor = Builder() .addAddress(PRIVATE_VLAN4_CLIENT, 30) .addAddress(PRIVATE_VLAN6_CLIENT, 126) - .addDefaultDns() + .addDnsServer(PRIVATE_VLAN4_DNS) + .addDnsServer(PRIVATE_VLAN6_DNS) .addBypassApplications() .addBypassPrivateRoute() .setMtu(VPN_MTU) @@ -128,13 +131,6 @@ class TunService : VpnService(), IClashEventObserver { return this } - private fun Builder.addDefaultDns(): Builder { - resources.getStringArray(R.array.default_dns).forEach { - addDnsServer(it) - } - return this - } - private fun Builder.addBypassApplications(): Builder { resources.getStringArray(R.array.default_bypass_application) .forEach { diff --git a/service/src/main/res/values/arrays.xml b/service/src/main/res/values/arrays.xml index 51a6a6f7a..9632e4330 100644 --- a/service/src/main/res/values/arrays.xml +++ b/service/src/main/res/values/arrays.xml @@ -160,13 +160,6 @@ 208.0.0.0/4 - - 119.29.29.29 - 223.5.5.5 - 1.1.1.1 - 8.8.8.8 - - com.github.kr328.clash com.android.networkstack