merge ss and ssu

This commit is contained in:
ginuerzh
2021-11-12 16:44:31 +08:00
parent cae199dbd9
commit 3fe5084629
26 changed files with 545 additions and 393 deletions

View File

@ -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))
}

View File

@ -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:

View File

@ -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"