fix: try to support android hotspot when using tun
This commit is contained in:
parent
508e257543
commit
3373b62b02
3 changed files with 31 additions and 1 deletions
|
@ -203,11 +203,14 @@ func New(options config.Tun, tcpIn chan<- C.ConnContext, udpIn chan<- *inbound.P
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
err = l.tunStack.Start()
|
|
||||||
|
|
||||||
|
err = l.tunStack.Start()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
l.openAndroidHotspot(tunOptions)
|
||||||
|
|
||||||
log.Infoln("[TUN] Tun adapter listening at: %s(%s,%s), mtu: %d, auto route: %v, ip stack: %s",
|
log.Infoln("[TUN] Tun adapter listening at: %s(%s,%s), mtu: %d, auto route: %v, ip stack: %s",
|
||||||
tunName, tunOptions.Inet4Address, tunOptions.Inet6Address, tunMTU, options.AutoRoute, options.Stack)
|
tunName, tunOptions.Inet4Address, tunOptions.Inet6Address, tunMTU, options.AutoRoute, options.Stack)
|
||||||
return
|
return
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
package sing_tun
|
package sing_tun
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"github.com/Dreamacro/clash/log"
|
||||||
|
"github.com/sagernet/netlink"
|
||||||
tun "github.com/sagernet/sing-tun"
|
tun "github.com/sagernet/sing-tun"
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
"runtime"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (l *Listener) buildAndroidRules(tunOptions *tun.Options) error {
|
func (l *Listener) buildAndroidRules(tunOptions *tun.Options) error {
|
||||||
|
@ -21,3 +25,25 @@ func (l *Listener) buildAndroidRules(tunOptions *tun.Options) error {
|
||||||
func (h *ListenerHandler) OnPackagesUpdated(packages int, sharedUsers int) {
|
func (h *ListenerHandler) OnPackagesUpdated(packages int, sharedUsers int) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (l *Listener) openAndroidHotspot(tunOptions tun.Options) {
|
||||||
|
if runtime.GOOS == "android" && tunOptions.AutoRoute {
|
||||||
|
priority := 9000
|
||||||
|
if len(tunOptions.ExcludedRanges()) > 0 {
|
||||||
|
priority++
|
||||||
|
}
|
||||||
|
if tunOptions.InterfaceMonitor.AndroidVPNEnabled() {
|
||||||
|
priority++
|
||||||
|
}
|
||||||
|
it := netlink.NewRule()
|
||||||
|
it.Priority = priority
|
||||||
|
it.IifName = tunOptions.Name
|
||||||
|
it.Table = 254 //main
|
||||||
|
it.Family = unix.AF_INET
|
||||||
|
it.SuppressPrefixlen = 0
|
||||||
|
err := netlink.RuleAdd(it)
|
||||||
|
if err != nil {
|
||||||
|
log.Warnln("[TUN] add AndroidHotspot rule error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -9,3 +9,4 @@ import (
|
||||||
func (l *Listener) buildAndroidRules(tunOptions *tun.Options) error {
|
func (l *Listener) buildAndroidRules(tunOptions *tun.Options) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
func (l *Listener) openAndroidHotspot(tunOptions tun.Options) {}
|
||||||
|
|
Loading…
Reference in a new issue