feat(proxy): 新增混合模式和中继直连模式支持
添加 RelayModeMixed、RelayModeAllDirect 和 RelayModeRandomDirect 三种中继模式 修复 README.md 中的拼写错误 更新 JWT 密钥和日志模式配置 优化流量日志查询排序 统一邮件验证码主题格式
This commit is contained in:
@@ -213,6 +213,157 @@ func adapterProxies(servers []*server.Server) ([]proxy.Proxy, []string, map[stri
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
case server.RelayModeMixed:
|
||||
// 生成直连节点
|
||||
n := addNode(node, node.ServerAddr, 0)
|
||||
if n != nil {
|
||||
directName := "直连-" + node.Name
|
||||
n.Name = directName
|
||||
if node.Tags != "" {
|
||||
t := tool.RemoveDuplicateElements(strings.Split(node.Tags, ",")...)
|
||||
for _, tag := range t {
|
||||
if tag != "" {
|
||||
if _, ok := tags[tag]; !ok {
|
||||
tags[tag] = []string{}
|
||||
}
|
||||
tags[tag] = append(tags[tag], n.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
}
|
||||
|
||||
// 生成一个随机中继节点(类似random模式,但和直连共存)
|
||||
var relays []server.NodeRelay
|
||||
if err := json.Unmarshal([]byte(node.RelayNode), &relays); err != nil {
|
||||
logger.Errorw("Unmarshal RelayNode", logger.Field("error", err.Error()), logger.Field("node", node.Name), logger.Field("relayNode", node.RelayNode))
|
||||
continue
|
||||
}
|
||||
if len(relays) > 0 {
|
||||
randNum := random.RandomInRange(0, len(relays)-1)
|
||||
relay := relays[randNum]
|
||||
n := addNode(node, relay.Host, relay.Port)
|
||||
if n == nil {
|
||||
continue
|
||||
}
|
||||
relayName := "中继-" + node.Name
|
||||
if relay.Prefix != "" {
|
||||
relayName = relay.Prefix + node.Name
|
||||
}
|
||||
n.Name = relayName
|
||||
if node.Tags != "" {
|
||||
t := tool.RemoveDuplicateElements(strings.Split(node.Tags, ",")...)
|
||||
for _, tag := range t {
|
||||
if tag != "" {
|
||||
if _, ok := tags[tag]; !ok {
|
||||
tags[tag] = []string{}
|
||||
}
|
||||
tags[tag] = append(tags[tag], n.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
}
|
||||
case server.RelayModeAllDirect:
|
||||
// 生成直连节点
|
||||
n := addNode(node, node.ServerAddr, 0)
|
||||
if n != nil {
|
||||
directName := "直连-" + node.Name
|
||||
n.Name = directName
|
||||
if node.Tags != "" {
|
||||
t := tool.RemoveDuplicateElements(strings.Split(node.Tags, ",")...)
|
||||
for _, tag := range t {
|
||||
if tag != "" {
|
||||
if _, ok := tags[tag]; !ok {
|
||||
tags[tag] = []string{}
|
||||
}
|
||||
tags[tag] = append(tags[tag], n.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
}
|
||||
|
||||
// 生成所有中继节点
|
||||
var relays []server.NodeRelay
|
||||
if err := json.Unmarshal([]byte(node.RelayNode), &relays); err != nil {
|
||||
logger.Errorw("Unmarshal RelayNode", logger.Field("error", err.Error()), logger.Field("node", node.Name), logger.Field("relayNode", node.RelayNode))
|
||||
continue
|
||||
}
|
||||
for _, relay := range relays {
|
||||
n := addNode(node, relay.Host, relay.Port)
|
||||
if n == nil {
|
||||
continue
|
||||
}
|
||||
relayName := "中继-" + node.Name
|
||||
if relay.Prefix != "" {
|
||||
relayName = relay.Prefix + node.Name
|
||||
}
|
||||
n.Name = relayName
|
||||
if node.Tags != "" {
|
||||
t := tool.RemoveDuplicateElements(strings.Split(node.Tags, ",")...)
|
||||
for _, tag := range t {
|
||||
if tag != "" {
|
||||
if _, ok := tags[tag]; !ok {
|
||||
tags[tag] = []string{}
|
||||
}
|
||||
tags[tag] = append(tags[tag], n.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
}
|
||||
case server.RelayModeRandomDirect:
|
||||
// 生成直连节点
|
||||
n := addNode(node, node.ServerAddr, 0)
|
||||
if n != nil {
|
||||
directName := "直连-" + node.Name
|
||||
n.Name = directName
|
||||
if node.Tags != "" {
|
||||
t := tool.RemoveDuplicateElements(strings.Split(node.Tags, ",")...)
|
||||
for _, tag := range t {
|
||||
if tag != "" {
|
||||
if _, ok := tags[tag]; !ok {
|
||||
tags[tag] = []string{}
|
||||
}
|
||||
tags[tag] = append(tags[tag], n.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
}
|
||||
|
||||
// 随机选择一个中继节点
|
||||
var relays []server.NodeRelay
|
||||
if err := json.Unmarshal([]byte(node.RelayNode), &relays); err != nil {
|
||||
logger.Errorw("Unmarshal RelayNode", logger.Field("error", err.Error()), logger.Field("node", node.Name), logger.Field("relayNode", node.RelayNode))
|
||||
continue
|
||||
}
|
||||
if len(relays) > 0 {
|
||||
randNum := random.RandomInRange(0, len(relays)-1)
|
||||
relay := relays[randNum]
|
||||
n := addNode(node, relay.Host, relay.Port)
|
||||
if n == nil {
|
||||
continue
|
||||
}
|
||||
relayName := "中继-" + node.Name
|
||||
if relay.Prefix != "" {
|
||||
relayName = relay.Prefix + node.Name
|
||||
}
|
||||
n.Name = relayName
|
||||
if node.Tags != "" {
|
||||
t := tool.RemoveDuplicateElements(strings.Split(node.Tags, ",")...)
|
||||
for _, tag := range t {
|
||||
if tag != "" {
|
||||
if _, ok := tags[tag]; !ok {
|
||||
tags[tag] = []string{}
|
||||
}
|
||||
tags[tag] = append(tags[tag], n.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
proxies = append(proxies, *n)
|
||||
}
|
||||
default:
|
||||
logger.Info("Not Relay Mode", logger.Field("node", node.Name), logger.Field("relayMode", node.RelayMode))
|
||||
n := addNode(node, node.ServerAddr, 0)
|
||||
|
||||
Reference in New Issue
Block a user