make tun config compatible with premium
This commit is contained in:
parent
b1ce65f78c
commit
3fe8a4777d
2 changed files with 32 additions and 37 deletions
|
@ -80,8 +80,8 @@ func ApplyConfig(cfg *config.Config, force bool) {
|
||||||
updateProfile(cfg)
|
updateProfile(cfg)
|
||||||
updateIPTables(cfg.DNS, cfg.General, cfg.Tun)
|
updateIPTables(cfg.DNS, cfg.General, cfg.Tun)
|
||||||
updateDNS(cfg.DNS, cfg.Tun)
|
updateDNS(cfg.DNS, cfg.Tun)
|
||||||
updateGeneral(cfg.General, force)
|
updateGeneral(cfg.General, cfg.Tun, force)
|
||||||
updateTun(cfg.General, cfg.Tun)
|
updateTun(cfg.Tun)
|
||||||
updateExperimental(cfg)
|
updateExperimental(cfg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -175,10 +175,24 @@ func updateRules(rules []C.Rule, ruleProviders map[string]*provider.RuleProvider
|
||||||
tunnel.UpdateRules(rules, ruleProviders)
|
tunnel.UpdateRules(rules, ruleProviders)
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateGeneral(general *config.General, force bool) {
|
func updateGeneral(general *config.General, Tun *config.Tun, force bool) {
|
||||||
tunnel.SetMode(general.Mode)
|
tunnel.SetMode(general.Mode)
|
||||||
resolver.DisableIPv6 = !general.IPv6
|
resolver.DisableIPv6 = !general.IPv6
|
||||||
adapter.UnifiedDelay.Store(general.UnifiedDelay)
|
adapter.UnifiedDelay.Store(general.UnifiedDelay)
|
||||||
|
|
||||||
|
if (Tun.Enable || general.TProxyPort != 0) && general.Interface == "" {
|
||||||
|
autoDetectInterfaceName, err := dev.GetAutoDetectInterface()
|
||||||
|
if err == nil {
|
||||||
|
if autoDetectInterfaceName != "" && autoDetectInterfaceName != "<nil>" {
|
||||||
|
general.Interface = autoDetectInterfaceName
|
||||||
|
} else {
|
||||||
|
log.Debugln("Auto detect interface name is empty.")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Debugln("Can not find auto detect interface. %s", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
dialer.DefaultInterface.Store(general.Interface)
|
dialer.DefaultInterface.Store(general.Interface)
|
||||||
|
|
||||||
log.Infoln("Use interface name: %s", general.Interface)
|
log.Infoln("Use interface name: %s", general.Interface)
|
||||||
|
@ -208,29 +222,17 @@ func updateGeneral(general *config.General, force bool) {
|
||||||
log.SetLevel(general.LogLevel)
|
log.SetLevel(general.LogLevel)
|
||||||
}
|
}
|
||||||
|
|
||||||
func updateTun(General *config.General, Tun *config.Tun) {
|
func updateTun(Tun *config.Tun) {
|
||||||
if Tun == nil {
|
if Tun == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Tun.Enable || General.TProxyPort != 0) && General.Interface == "" {
|
|
||||||
autoDetectInterfaceName, err := dev.GetAutoDetectInterface()
|
|
||||||
if err == nil {
|
|
||||||
if autoDetectInterfaceName != "" && autoDetectInterfaceName != "<nil>" {
|
|
||||||
General.Interface = autoDetectInterfaceName
|
|
||||||
} else {
|
|
||||||
log.Debugln("Auto detect interface name is empty.")
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Debugln("Can not find auto detect interface. %s", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tcpIn := tunnel.TCPIn()
|
tcpIn := tunnel.TCPIn()
|
||||||
udpIn := tunnel.UDPIn()
|
udpIn := tunnel.UDPIn()
|
||||||
|
|
||||||
if err := P.ReCreateTun(*Tun, tcpIn, udpIn); err != nil {
|
if err := P.ReCreateTun(*Tun, tcpIn, udpIn); err != nil {
|
||||||
log.Errorln("Start Tun interface error: %s", err.Error())
|
log.Errorln("Start Tun interface error: %s", err.Error())
|
||||||
|
os.Exit(2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -158,7 +158,7 @@ func preHandleMetadata(metadata *C.Metadata) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveMetadata(ctx C.PlainContext, metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err error) {
|
func resolveMetadata(metadata *C.Metadata) (proxy C.Proxy, rule C.Rule, err error) {
|
||||||
switch mode {
|
switch mode {
|
||||||
case Direct:
|
case Direct:
|
||||||
proxy = proxies["DIRECT"]
|
proxy = proxies["DIRECT"]
|
||||||
|
@ -222,7 +222,7 @@ func handleUDPConn(packet *inbound.PacketAdapter) {
|
||||||
}()
|
}()
|
||||||
|
|
||||||
pCtx := icontext.NewPacketConnContext(metadata)
|
pCtx := icontext.NewPacketConnContext(metadata)
|
||||||
proxy, rule, err := resolveMetadata(pCtx, metadata)
|
proxy, rule, err := resolveMetadata(metadata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnln("[UDP] Parse metadata failed: %s", err.Error())
|
log.Warnln("[UDP] Parse metadata failed: %s", err.Error())
|
||||||
return
|
return
|
||||||
|
@ -242,16 +242,13 @@ func handleUDPConn(packet *inbound.PacketAdapter) {
|
||||||
pCtx.InjectPacketConn(rawPc)
|
pCtx.InjectPacketConn(rawPc)
|
||||||
pc := statistic.NewUDPTracker(rawPc, statistic.DefaultManager, metadata, rule)
|
pc := statistic.NewUDPTracker(rawPc, statistic.DefaultManager, metadata, rule)
|
||||||
|
|
||||||
var ruleDetail string
|
|
||||||
if rule.Payload() != "" {
|
|
||||||
ruleDetail = fmt.Sprintf("%s(%s)", rule.RuleType().String(), rule.Payload())
|
|
||||||
} else {
|
|
||||||
ruleDetail = rule.RuleType().String()
|
|
||||||
}
|
|
||||||
|
|
||||||
switch true {
|
switch true {
|
||||||
case rule != nil:
|
case rule != nil:
|
||||||
log.Infoln("[UDP] %s --> %s match %s using %s", metadata.SourceDetail(), metadata.RemoteAddress(), ruleDetail, rawPc.Chains().String())
|
if rule.Payload() != "" {
|
||||||
|
log.Infoln("[UDP] %s --> %s match %s using %s", metadata.SourceDetail(), metadata.RemoteAddress(), fmt.Sprintf("%s(%s)", rule.RuleType().String(), rule.Payload()), rawPc.Chains().String())
|
||||||
|
} else {
|
||||||
|
log.Infoln("[UDP] %s --> %s match %s using %s", metadata.SourceDetail(), metadata.RemoteAddress(), rule.Payload(), rawPc.Chains().String())
|
||||||
|
}
|
||||||
case mode == Script:
|
case mode == Script:
|
||||||
log.Infoln("[UDP] %s --> %s using SCRIPT %s", metadata.SourceDetail(), metadata.RemoteAddress(), rawPc.Chains().String())
|
log.Infoln("[UDP] %s --> %s using SCRIPT %s", metadata.SourceDetail(), metadata.RemoteAddress(), rawPc.Chains().String())
|
||||||
case mode == Global:
|
case mode == Global:
|
||||||
|
@ -283,7 +280,7 @@ func handleTCPConn(connCtx C.ConnContext) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
proxy, rule, err := resolveMetadata(connCtx, metadata)
|
proxy, rule, err := resolveMetadata(metadata)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnln("[Metadata] parse failed: %s", err.Error())
|
log.Warnln("[Metadata] parse failed: %s", err.Error())
|
||||||
return
|
return
|
||||||
|
@ -303,17 +300,13 @@ func handleTCPConn(connCtx C.ConnContext) {
|
||||||
remoteConn = statistic.NewTCPTracker(remoteConn, statistic.DefaultManager, metadata, rule)
|
remoteConn = statistic.NewTCPTracker(remoteConn, statistic.DefaultManager, metadata, rule)
|
||||||
defer remoteConn.Close()
|
defer remoteConn.Close()
|
||||||
|
|
||||||
var ruleDetail string
|
|
||||||
|
|
||||||
if rule.Payload() != "" {
|
|
||||||
ruleDetail = fmt.Sprintf("%s(%s)", rule.RuleType().String(), rule.Payload())
|
|
||||||
} else {
|
|
||||||
ruleDetail = rule.RuleType().String()
|
|
||||||
}
|
|
||||||
|
|
||||||
switch true {
|
switch true {
|
||||||
case rule != nil:
|
case rule != nil:
|
||||||
log.Infoln("[TCP] %s --> %s match %s using %s", metadata.SourceDetail(), metadata.RemoteAddress(), ruleDetail, remoteConn.Chains().String())
|
if rule.Payload() != "" {
|
||||||
|
log.Infoln("[TCP] %s --> %s match %s using %s", metadata.SourceDetail(), metadata.RemoteAddress(), fmt.Sprintf("%s(%s)", rule.RuleType().String(), rule.Payload()), remoteConn.Chains().String())
|
||||||
|
} else {
|
||||||
|
log.Infoln("[TCP] %s --> %s match %s using %s", metadata.SourceDetail(), metadata.RemoteAddress(), rule.RuleType().String(), remoteConn.Chains().String())
|
||||||
|
}
|
||||||
case mode == Script:
|
case mode == Script:
|
||||||
log.Infoln("[TCP] %s --> %s using SCRIPT %s", metadata.SourceDetail(), metadata.RemoteAddress(), remoteConn.Chains().String())
|
log.Infoln("[TCP] %s --> %s using SCRIPT %s", metadata.SourceDetail(), metadata.RemoteAddress(), remoteConn.Chains().String())
|
||||||
case mode == Global:
|
case mode == Global:
|
||||||
|
|
Loading…
Reference in a new issue