Update On Fri Jun 7 01:07:23 CEST 2024

This commit is contained in:
github-action[bot]
2024-06-07 01:07:23 +02:00
parent 4f1b1f52e1
commit 4a8fb7903d
1383 changed files with 36790 additions and 15275 deletions

View File

@@ -15,7 +15,7 @@ After=network.target
[Service]
LimitNOFILE=65535
ExecStart=/root/ehco -c ""
ExecStart=ehco -c ""
Restart=always
[Install]

View File

@@ -7,7 +7,7 @@ import (
"time"
"github.com/Ehco1996/ehco/internal/conn"
"github.com/Ehco1996/ehco/pkg/node_metric"
"github.com/Ehco1996/ehco/pkg/metric_reader"
"go.uber.org/zap"
)
@@ -39,7 +39,7 @@ type cmgrImpl struct {
lock sync.RWMutex
cfg *Config
l *zap.SugaredLogger
mr node_metric.Reader
mr metric_reader.Reader
// k: relay label, v: connection list
activeConnectionsMap map[string][]conn.RelayConn
@@ -54,7 +54,7 @@ func NewCmgr(cfg *Config) Cmgr {
closedConnectionsMap: make(map[string][]conn.RelayConn),
}
if cfg.NeedMetrics() {
cmgr.mr = node_metric.NewReader(cfg.MetricsURL)
cmgr.mr = metric_reader.NewReader(cfg.MetricsURL)
}
return cmgr
}

View File

@@ -3,9 +3,9 @@ package cmgr
var DummyConfig = &Config{}
type Config struct {
SyncURL string `json:"sync_url,omitempty"`
MetricsURL string `json:"metrics_url,omitempty"`
SyncInterval int `json:"sync_interval,omitempty"` // in seconds
SyncURL string
MetricsURL string
SyncInterval int // in seconds
}
func (c *Config) NeedSync() bool {

View File

@@ -7,7 +7,7 @@ import (
"github.com/Ehco1996/ehco/internal/conn"
"github.com/Ehco1996/ehco/internal/constant"
myhttp "github.com/Ehco1996/ehco/pkg/http"
"github.com/Ehco1996/ehco/pkg/node_metric"
"github.com/Ehco1996/ehco/pkg/metric_reader"
"go.uber.org/zap"
)
@@ -26,9 +26,9 @@ type VersionInfo struct {
}
type syncReq struct {
Version VersionInfo `json:"version"`
Node node_metric.NodeMetrics `json:"node"`
Stats []StatsPerRule `json:"stats"`
Version VersionInfo `json:"version"`
Node metric_reader.NodeMetrics `json:"node"`
Stats []StatsPerRule `json:"stats"`
}
func (cm *cmgrImpl) syncOnce(ctx context.Context) error {

View File

@@ -3,6 +3,7 @@ package conf
import (
"errors"
"fmt"
"net/url"
"github.com/Ehco1996/ehco/internal/constant"
@@ -11,10 +12,17 @@ import (
)
const (
ProtocolHTTP = "http"
ProtocolTLS = "tls"
ProtocolHTTP = "http"
ProtocolTLS = "tls"
WS_HANDSHAKE_PATH = "handshake"
WS_QUERY_REMOTE_ADDR = "remote_addr"
)
type WSConfig struct {
Path string `json:"path,omitempty"`
RemoteAddr string `json:"remote_addr,omitempty"`
}
type Config struct {
Listen string `json:"listen"`
ListenType string `json:"listen_type"`
@@ -22,9 +30,28 @@ type Config struct {
TCPRemotes []string `json:"tcp_remotes"`
UDPRemotes []string `json:"udp_remotes"`
Label string `json:"label,omitempty"`
MaxConnection int `json:"max_connection,omitempty"`
BlockedProtocols []string `json:"blocked_protocols,omitempty"`
Label string `json:"label,omitempty"`
MaxConnection int `json:"max_connection,omitempty"`
BlockedProtocols []string `json:"blocked_protocols,omitempty"`
WSConfig *WSConfig `json:"ws_config,omitempty"`
}
func (r *Config) GetWSHandShakePath() string {
if r.WSConfig != nil && r.WSConfig.Path != "" {
return r.WSConfig.Path
}
return WS_HANDSHAKE_PATH
}
func (r *Config) GetWSRemoteAddr(baseAddr string) (string, error) {
addr, err := url.JoinPath(baseAddr, r.GetWSHandShakePath())
if err != nil {
return "", err
}
if r.WSConfig != nil && r.WSConfig.RemoteAddr != "" {
addr += fmt.Sprintf("?%s=%s", WS_QUERY_REMOTE_ADDR, r.WSConfig.RemoteAddr)
}
return addr, nil
}
func (r *Config) Validate() error {

View File

@@ -19,12 +19,12 @@ func (r *Relay) UniqueID() string {
return r.cfg.Label
}
func NewRelay(cfg *conf.Config, connMgr cmgr.Cmgr) (*Relay, error) {
base := transporter.NewBaseTransporter(cfg, connMgr)
s, err := transporter.NewRelayServer(cfg.ListenType, base)
func NewRelay(cfg *conf.Config, cmgr cmgr.Cmgr) (*Relay, error) {
s, err := transporter.NewRelayServer(cfg, cmgr)
if err != nil {
return nil, err
}
r := &Relay{
relayServer: s,
cfg: cfg,

View File

@@ -19,10 +19,11 @@ import (
)
type baseTransporter struct {
cfg *conf.Config
l *zap.SugaredLogger
cmgr cmgr.Cmgr
cfg *conf.Config
tCPRemotes lb.RoundRobin
l *zap.SugaredLogger
}
func NewBaseTransporter(cfg *conf.Config, cmgr cmgr.Cmgr) *baseTransporter {

View File

@@ -3,7 +3,9 @@ package transporter
import (
"net"
"github.com/Ehco1996/ehco/internal/cmgr"
"github.com/Ehco1996/ehco/internal/constant"
"github.com/Ehco1996/ehco/internal/relay/conf"
"github.com/Ehco1996/ehco/pkg/lb"
)
@@ -14,8 +16,8 @@ type RelayClient interface {
RelayTCPConn(c net.Conn, handshakeF TCPHandShakeF) error
}
func NewRelayClient(relayType string, base *baseTransporter) (RelayClient, error) {
switch relayType {
func newRelayClient(base *baseTransporter) (RelayClient, error) {
switch base.cfg.TransportType {
case constant.RelayTypeRaw:
return newRawClient(base)
case constant.RelayTypeWS:
@@ -27,7 +29,7 @@ func NewRelayClient(relayType string, base *baseTransporter) (RelayClient, error
case constant.RelayTypeMTCP:
return newMtcpClient(base)
default:
panic("unsupported transport type")
panic("unsupported transport type" + base.cfg.TransportType)
}
}
@@ -36,8 +38,9 @@ type RelayServer interface {
Close() error
}
func NewRelayServer(relayType string, base *baseTransporter) (RelayServer, error) {
switch relayType {
func NewRelayServer(cfg *conf.Config, cmgr cmgr.Cmgr) (RelayServer, error) {
base := NewBaseTransporter(cfg, cmgr)
switch cfg.ListenType {
case constant.RelayTypeRaw:
return newRawServer(base)
case constant.RelayTypeWS:
@@ -49,6 +52,6 @@ func NewRelayServer(relayType string, base *baseTransporter) (RelayServer, error
case constant.RelayTypeMTCP:
return newMtcpServer(base)
default:
panic("unsupported transport type")
panic("unsupported transport type" + cfg.ListenType)
}
}

View File

@@ -57,7 +57,7 @@ func newRawServer(base *baseTransporter) (*RawServer, error) {
if err != nil {
return nil, err
}
relayer, err := NewRelayClient(base.cfg.TransportType, base)
relayer, err := newRelayClient(base)
if err != nil {
return nil, err
}
@@ -80,6 +80,7 @@ func (s *RawServer) ListenAndServe() error {
return err
}
go func(c net.Conn) {
defer c.Close()
if err := s.RelayTCPConn(c, s.relayer.TCPHandShake); err != nil {
s.l.Errorf("RelayTCPConn error: %s", err.Error())
}

View File

@@ -8,6 +8,7 @@ import (
"github.com/gobwas/ws"
"github.com/labstack/echo/v4"
"go.uber.org/zap"
"github.com/Ehco1996/ehco/internal/conn"
"github.com/Ehco1996/ehco/internal/constant"
@@ -37,7 +38,11 @@ func newWsClient(base *baseTransporter) (*WsClient, error) {
func (s *WsClient) TCPHandShake(remote *lb.Node) (net.Conn, error) {
t1 := time.Now()
wsc, _, _, err := s.dialer.Dial(context.TODO(), remote.Address+"/handshake/")
addr, err := s.cfg.GetWSRemoteAddr(remote.Address)
if err != nil {
return nil, err
}
wsc, _, _, err := s.dialer.Dial(context.TODO(), addr)
if err != nil {
return nil, err
}
@@ -68,10 +73,13 @@ func newWsServer(base *baseTransporter) (*WsServer, error) {
},
}
e := web.NewEchoServer()
e.Use(web.NginxLogMiddleware(zap.S().Named("ws-server")))
e.GET("/", echo.WrapHandler(web.MakeIndexF()))
e.GET("/handshake/", echo.WrapHandler(http.HandlerFunc(s.HandleRequest)))
e.GET(base.cfg.GetWSHandShakePath(), echo.WrapHandler(http.HandlerFunc(s.HandleRequest)))
s.e = e
relayer, err := NewRelayClient(base.cfg.TransportType, base)
relayer, err := newRelayClient(base)
if err != nil {
return nil, err
}

View File

@@ -57,7 +57,11 @@ func (c *MwssClient) initNewSession(ctx context.Context, addr string) (*smux.Ses
func (s *MwssClient) TCPHandShake(remote *lb.Node) (net.Conn, error) {
t1 := time.Now()
mwssc, err := s.muxTP.Dial(context.TODO(), remote.Address+"/handshake/")
addr, err := s.cfg.GetWSRemoteAddr(remote.Address)
if err != nil {
return nil, err
}
mwssc, err := s.muxTP.Dial(context.TODO(), addr)
if err != nil {
return nil, err
}
@@ -81,7 +85,7 @@ func newMwssServer(base *baseTransporter) (*MwssServer, error) {
WssServer: wssServer,
muxServerImpl: newMuxServer(base.cfg.Listen, base.l.Named("mwss")),
}
s.e.GET("/handshake/", echo.WrapHandler(http.HandlerFunc(s.HandleRequest)))
s.e.GET(base.cfg.GetWSHandShakePath(), echo.WrapHandler(http.HandlerFunc(s.HandleRequest)))
return s, nil
}