mirror of
https://github.com/e1732a364fed/v2ray_simple.git
synced 2025-12-24 13:27:56 +08:00
修订代码;将fallback的from从string改为[]string
这样可以支持从多个listen fallback到相同的目标,又不至于使用默认回落, 更灵活.
This commit is contained in:
@@ -690,11 +690,11 @@ func interactively_hotRemoveServerOrClient() {
|
||||
allClients = utils.TrimSlice(allClients, will_delete_index)
|
||||
}
|
||||
if will_delete_listen {
|
||||
listenCloserArray[will_delete_index].Close()
|
||||
listenCloserList[will_delete_index].Close()
|
||||
allServers[will_delete_index].Stop()
|
||||
|
||||
allServers = utils.TrimSlice(allServers, will_delete_index)
|
||||
listenCloserArray = utils.TrimSlice(listenCloserArray, will_delete_index)
|
||||
listenCloserList = utils.TrimSlice(listenCloserList, will_delete_index)
|
||||
|
||||
}
|
||||
|
||||
@@ -778,7 +778,7 @@ func interactively_hotLoadConfigFile() {
|
||||
|
||||
lis := vs.ListenSer(ser, cli, &routingEnv)
|
||||
if lis != nil {
|
||||
listenCloserArray = append(listenCloserArray, lis)
|
||||
listenCloserList = append(listenCloserList, lis)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -251,7 +251,7 @@ func hotLoadListenConfForRuntime(conf []*proxy.ListenConf) {
|
||||
}
|
||||
lis := vs.ListenSer(inServer, defaultOutClient, &routingEnv)
|
||||
if lis != nil {
|
||||
listenCloserArray = append(listenCloserArray, lis)
|
||||
listenCloserList = append(listenCloserList, lis)
|
||||
allServers = append(allServers, inServer)
|
||||
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ var (
|
||||
|
||||
tproxyList []*tproxy.Machine //储存所有 tproxy的监听.(一般就一个, 但不排除极特殊情况)
|
||||
|
||||
listenCloserArray []io.Closer //储存除tproxy之外 所有运行的 inServer 的 Listener 的 Closer
|
||||
listenCloserList []io.Closer //储存除tproxy之外 所有运行的 inServer 的 Listener 的 Closer
|
||||
|
||||
defaultOutClient proxy.Client
|
||||
|
||||
@@ -86,7 +86,7 @@ func cleanup() {
|
||||
}
|
||||
}
|
||||
|
||||
for _, listener := range listenCloserArray {
|
||||
for _, listener := range listenCloserList {
|
||||
if listener != nil {
|
||||
listener.Close()
|
||||
}
|
||||
@@ -364,14 +364,14 @@ func mainFunc() (result int) {
|
||||
if mode == proxy.SimpleMode {
|
||||
lis := vs.ListenSer(defaultInServer, defaultOutClient, &routingEnv)
|
||||
if lis != nil {
|
||||
listenCloserArray = append(listenCloserArray, lis)
|
||||
listenCloserList = append(listenCloserList, lis)
|
||||
}
|
||||
} else {
|
||||
for _, inServer := range allServers {
|
||||
lis := vs.ListenSer(inServer, defaultOutClient, &routingEnv)
|
||||
|
||||
if lis != nil {
|
||||
listenCloserArray = append(listenCloserArray, lis)
|
||||
listenCloserList = append(listenCloserList, lis)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -440,7 +440,7 @@ func mainFunc() (result int) {
|
||||
}
|
||||
|
||||
func hasProxyRunning() bool {
|
||||
return len(listenCloserArray) > 0 || len(tproxyList) > 0
|
||||
return len(listenCloserList) > 0 || len(tproxyList) > 0
|
||||
}
|
||||
|
||||
//是否可以在运行时动态修改配置。如果没有开启 apiServer 开关 也没有 动态修改配置的功能,则当前模式不灵活,无法动态修改
|
||||
|
||||
@@ -43,7 +43,7 @@ path = "ohmygod_verysimple_is_very_simple"
|
||||
|
||||
|
||||
[[fallback]]
|
||||
from = "my_ws1" # 可选, 标明该fallback用于 哪个tag的 listen。 如果未给出,则所有listen都会用到该fallback。
|
||||
from = ["my_ws1"] # 可选, 标明该fallback用于 哪个tag的 listen。 如果未给出,则所有listen都会用到该fallback。
|
||||
|
||||
dest = 6060 # 必填,回落到本机端口 6060
|
||||
|
||||
|
||||
@@ -15,13 +15,13 @@ key = "cert.key"
|
||||
|
||||
[[fallback]]
|
||||
|
||||
from = "vlesstls"
|
||||
from = ["vlesstls"]
|
||||
alpn = ["http/1.1"]
|
||||
dest = "@vlessws" # dest 也可以写成 这种形式, 直接匹配tag, 可防止笔误。
|
||||
|
||||
[[fallback]]
|
||||
|
||||
from = "vlesstls"
|
||||
from = ["vlesstls"]
|
||||
alpn = ["h2"]
|
||||
dest = "@vlessgrpc"
|
||||
|
||||
@@ -36,7 +36,7 @@ path = "/simple"
|
||||
|
||||
[[fallback]]
|
||||
|
||||
from = "vlessws"
|
||||
from = ["vlessws"]
|
||||
dest = "/dev/shm/h1.sock" # 回落到 nginx的 h1 服务,你要配置nginx监听这个文件
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ path = "very"
|
||||
|
||||
[[fallback]]
|
||||
|
||||
from = "vlessgrpc"
|
||||
from = ["vlessgrpc"]
|
||||
dest = "/dev/shm/h2c.sock" # 回落到 nginx的 h2c 服务,你要配置nginx监听这个文件
|
||||
|
||||
|
||||
|
||||
@@ -66,24 +66,27 @@ func NewClassicFallbackFromConfList(fcl []*FallbackConf) *ClassicFallback {
|
||||
return cfb
|
||||
}
|
||||
|
||||
func (cfb *ClassicFallback) InsertFallbackConditionSet(condition FallbackConditionSet, forServerTag string, addr netLayer.Addr, xver int) {
|
||||
func (cfb *ClassicFallback) InsertFallbackConditionSet(condition FallbackConditionSet, forServerTags []string, addr netLayer.Addr, xver int) {
|
||||
|
||||
ftype := condition.GetType()
|
||||
|
||||
if ftype == FallBack_default && forServerTag == "" {
|
||||
if ftype == FallBack_default && len(forServerTags) == 0 {
|
||||
cfb.Default = &FallbackResult{Addr: addr, Xver: xver}
|
||||
return
|
||||
}
|
||||
|
||||
cfb.supportedTypeMask |= ftype
|
||||
|
||||
realMap := cfb.Map[forServerTag]
|
||||
if realMap == nil {
|
||||
realMap = make(map[FallbackConditionSet]*FallbackResult)
|
||||
cfb.Map[forServerTag] = realMap
|
||||
}
|
||||
for _, forServerTag := range forServerTags {
|
||||
|
||||
realMap[condition] = &FallbackResult{Addr: addr, Xver: xver}
|
||||
realMap := cfb.Map[forServerTag]
|
||||
if realMap == nil {
|
||||
realMap = make(map[FallbackConditionSet]*FallbackResult)
|
||||
cfb.Map[forServerTag] = realMap
|
||||
}
|
||||
|
||||
realMap[condition] = &FallbackResult{Addr: addr, Xver: xver}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@ func (FallbackResult) SupportType() byte {
|
||||
|
||||
type FallbackConf struct {
|
||||
//可选
|
||||
FromTag string `toml:"from" json:"from"` //which inServer triggered this fallback
|
||||
FromTag []string `toml:"from" json:"from"` //which inServer triggered this fallback
|
||||
|
||||
Xver int `toml:"xver" json:"xver"` //use PROXY protocol or not, and which version
|
||||
|
||||
|
||||
13
iics.go
13
iics.go
@@ -145,16 +145,12 @@ func checkfallback(iics incomingInserverConnState) (targetAddr netLayer.Addr, re
|
||||
fbResult = mf.GetFallback("", thisFallbackType, fallback_params...)
|
||||
}
|
||||
|
||||
if ce := utils.CanLogDebug("Fallback check"); ce != nil {
|
||||
if ce := utils.CanLogDebug("Fallback to"); ce != nil {
|
||||
if fbResult != nil {
|
||||
ce.Write(
|
||||
zap.String("matched", fbResult.Addr.String()),
|
||||
zap.String("addr", fbResult.Addr.String()),
|
||||
zap.Any("params", fallback_params),
|
||||
)
|
||||
} else {
|
||||
ce.Write(
|
||||
zap.String("no match", ""),
|
||||
)
|
||||
}
|
||||
}
|
||||
if fbResult != nil {
|
||||
@@ -172,6 +168,11 @@ func checkfallback(iics incomingInserverConnState) (targetAddr netLayer.Addr, re
|
||||
|
||||
if defaultFallbackAddr := iics.inServer.GetFallback(); defaultFallbackAddr != nil {
|
||||
|
||||
if ce := utils.CanLogDebug("Fallback to default setting"); ce != nil {
|
||||
ce.Write(
|
||||
zap.String("addr", defaultFallbackAddr.String()),
|
||||
)
|
||||
}
|
||||
targetAddr = *defaultFallbackAddr
|
||||
result = 0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user