merge ss and ssu
This commit is contained in:
@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/go-gost/gost/pkg/bypass"
|
||||
"github.com/go-gost/gost/pkg/chain"
|
||||
@ -62,6 +63,11 @@ func buildService(cfg *config.Config) (services []*service.Service) {
|
||||
handler.BypassOption(bypasses[svc.Bypass]),
|
||||
handler.LoggerOption(handlerLogger),
|
||||
)
|
||||
|
||||
if forwarder, ok := h.(handler.Forwarder); ok {
|
||||
forwarder.Forward(forwarderFromConfig(svc.Forwarder))
|
||||
}
|
||||
|
||||
if err := h.Init(metadata.MapMetadata(svc.Handler.Metadata)); err != nil {
|
||||
handlerLogger.Fatal("init: ", err)
|
||||
}
|
||||
@ -85,7 +91,7 @@ func chainFromConfig(cfg *config.ChainConfig) *chain.Chain {
|
||||
|
||||
c := &chain.Chain{}
|
||||
|
||||
selector := selectorFromConfig(cfg.LB)
|
||||
selector := selectorFromConfig(cfg.Selector)
|
||||
for _, hop := range cfg.Hops {
|
||||
group := &chain.NodeGroup{}
|
||||
for _, v := range hop.Nodes {
|
||||
@ -127,7 +133,7 @@ func chainFromConfig(cfg *config.ChainConfig) *chain.Chain {
|
||||
}
|
||||
|
||||
sel := selector
|
||||
if s := selectorFromConfig(hop.LB); s != nil {
|
||||
if s := selectorFromConfig(hop.Selector); s != nil {
|
||||
sel = s
|
||||
}
|
||||
group.WithSelector(sel)
|
||||
@ -162,7 +168,7 @@ func logFromConfig(cfg *config.LogConfig) logger.Logger {
|
||||
return logger.NewLogger(opts...)
|
||||
}
|
||||
|
||||
func selectorFromConfig(cfg *config.LoadbalancingConfig) chain.Selector {
|
||||
func selectorFromConfig(cfg *config.SelectorConfig) chain.Selector {
|
||||
if cfg == nil {
|
||||
return nil
|
||||
}
|
||||
@ -173,7 +179,7 @@ func selectorFromConfig(cfg *config.LoadbalancingConfig) chain.Selector {
|
||||
strategy = chain.RoundRobinStrategy()
|
||||
case "random":
|
||||
strategy = chain.RandomStrategy()
|
||||
case "fifio":
|
||||
case "fifo":
|
||||
strategy = chain.FIFOStrategy()
|
||||
default:
|
||||
strategy = chain.RoundRobinStrategy()
|
||||
@ -190,6 +196,19 @@ func bypassFromConfig(cfg *config.BypassConfig) bypass.Bypass {
|
||||
if cfg == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
return bypass.NewBypassPatterns(cfg.Reverse, cfg.Matchers...)
|
||||
}
|
||||
|
||||
func forwarderFromConfig(cfg *config.ForwarderConfig) *chain.NodeGroup {
|
||||
if cfg == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
group := &chain.NodeGroup{}
|
||||
for _, target := range cfg.Targets {
|
||||
if v := strings.TrimSpace(target); v != "" {
|
||||
group.AddNode(chain.NewNode(target, target))
|
||||
}
|
||||
}
|
||||
return group.WithSelector(selectorFromConfig(cfg.Selector))
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ profiling:
|
||||
services:
|
||||
- name: http+tcp
|
||||
url: "http://gost:gost@:8000"
|
||||
addr: ":8000"
|
||||
addr: ":28000"
|
||||
handler:
|
||||
type: http
|
||||
metadata:
|
||||
@ -27,38 +27,27 @@ services:
|
||||
keepAlive: 15s
|
||||
chain: chain01
|
||||
# bypass: bypass01
|
||||
- name: ss+tcp
|
||||
- name: ss
|
||||
url: "ss://chacha20:gost@:8000"
|
||||
addr: ":8338"
|
||||
addr: ":28338"
|
||||
handler:
|
||||
type: ss
|
||||
metadata:
|
||||
method: AES-256-GCM
|
||||
method: chacha20-ietf
|
||||
password: gost
|
||||
readTimeout: 5s
|
||||
retry: 3
|
||||
udp: true
|
||||
bufferSize: 4096
|
||||
listener:
|
||||
type: tcp
|
||||
metadata:
|
||||
keepAlive: 15s
|
||||
chain: chain01
|
||||
# chain: chain01
|
||||
# bypass: bypass01
|
||||
- name: ssu
|
||||
url: "ss://chacha20:gost@:8000"
|
||||
addr: ":8388"
|
||||
handler:
|
||||
type: ssu
|
||||
metadata:
|
||||
# method: AES-256-GCM
|
||||
# password: gost
|
||||
readTimeout: 5s
|
||||
retry: 3
|
||||
listener:
|
||||
type: tcp
|
||||
# chain: chain-ssu
|
||||
- name: socks5+tcp
|
||||
- name: socks5
|
||||
url: "socks5://gost:gost@:1080"
|
||||
addr: ":1080"
|
||||
addr: ":21080"
|
||||
handler:
|
||||
type: socks5
|
||||
metadata:
|
||||
@ -72,11 +61,11 @@ services:
|
||||
type: tcp
|
||||
metadata:
|
||||
keepAlive: 15s
|
||||
chain: chain-socks5
|
||||
chain: chain-ss
|
||||
# bypass: bypass01
|
||||
- name: socks5+tcp
|
||||
url: "socks5://gost:gost@:1080"
|
||||
addr: ":11080"
|
||||
addr: ":21081"
|
||||
handler:
|
||||
type: socks5
|
||||
metadata:
|
||||
@ -90,18 +79,40 @@ services:
|
||||
type: tcp
|
||||
metadata:
|
||||
keepAlive: 15s
|
||||
- name: forward
|
||||
url: "socks5://gost:gost@:1080"
|
||||
addr: ":10053"
|
||||
forwarder:
|
||||
targets:
|
||||
- 192.168.8.8:53
|
||||
- 192.168.8.1:53
|
||||
- 1.1.1.1:53
|
||||
selector:
|
||||
strategy: fifo
|
||||
maxFails: 1
|
||||
failTimeout: 30s
|
||||
handler:
|
||||
type: forward
|
||||
metadata:
|
||||
readTimeout: 5s
|
||||
retry: 3
|
||||
listener:
|
||||
type: udp
|
||||
metadata:
|
||||
keepAlive: 15s
|
||||
chain: chain-ss
|
||||
|
||||
chains:
|
||||
- name: chain01
|
||||
# chain level load balancing
|
||||
lb:
|
||||
# chain level selector
|
||||
selector:
|
||||
strategy: round
|
||||
maxFails: 1
|
||||
failTimeout: 30s
|
||||
hops:
|
||||
- name: hop01
|
||||
# hop level load balancing
|
||||
lb:
|
||||
# hop level selector
|
||||
selector:
|
||||
strategy: round
|
||||
maxFails: 1
|
||||
failTimeout: 30s
|
||||
@ -131,8 +142,8 @@ chains:
|
||||
type: tcp
|
||||
metadata: {}
|
||||
- name: hop02
|
||||
# hop level load balancing
|
||||
lb:
|
||||
# hop level selector
|
||||
selector:
|
||||
strategy: round
|
||||
maxFails: 1
|
||||
failTimeout: 30s
|
||||
@ -179,19 +190,25 @@ chains:
|
||||
dialer:
|
||||
type: tcp
|
||||
metadata: {}
|
||||
- name: chain-ssu
|
||||
- name: chain-ss
|
||||
hops:
|
||||
- name: hop01
|
||||
nodes:
|
||||
- name: node01
|
||||
addr: ":8339"
|
||||
addr: ":28338"
|
||||
url: "http://gost:gost@:8081"
|
||||
# bypass: bypass01
|
||||
connector:
|
||||
type: ssu
|
||||
metadata: {}
|
||||
type: ss
|
||||
metadata:
|
||||
method: chacha20-ietf
|
||||
password: gost
|
||||
readTimeout: 5s
|
||||
nodelay: true
|
||||
udp: true
|
||||
bufferSize: 4096
|
||||
dialer:
|
||||
type: udp
|
||||
type: tcp
|
||||
metadata: {}
|
||||
|
||||
bypasses:
|
||||
|
@ -6,18 +6,17 @@ import (
|
||||
_ "github.com/go-gost/gost/pkg/connector/socks/v4"
|
||||
_ "github.com/go-gost/gost/pkg/connector/socks/v5"
|
||||
_ "github.com/go-gost/gost/pkg/connector/ss"
|
||||
_ "github.com/go-gost/gost/pkg/connector/ssu"
|
||||
|
||||
// Register dialers
|
||||
_ "github.com/go-gost/gost/pkg/dialer/tcp"
|
||||
_ "github.com/go-gost/gost/pkg/dialer/udp"
|
||||
|
||||
// Register handlers
|
||||
_ "github.com/go-gost/gost/pkg/handler/forward/local"
|
||||
_ "github.com/go-gost/gost/pkg/handler/http"
|
||||
_ "github.com/go-gost/gost/pkg/handler/socks/v4"
|
||||
_ "github.com/go-gost/gost/pkg/handler/socks/v5"
|
||||
_ "github.com/go-gost/gost/pkg/handler/ss"
|
||||
_ "github.com/go-gost/gost/pkg/handler/ssu"
|
||||
|
||||
// Register listeners
|
||||
_ "github.com/go-gost/gost/pkg/listener/ftcp"
|
||||
|
Reference in New Issue
Block a user