diff --git a/conf/hy.go b/conf/hy.go index 3355b5c..cc42f74 100644 --- a/conf/hy.go +++ b/conf/hy.go @@ -19,12 +19,13 @@ func NewHysteria2Config() *Hysteria2Config { } type Hysteria2Options struct { + Hysteria2ConfigPath string `json:"Hysteria2ConfigPath"` QUICConfig QUICConfig `json:"QUICConfig"` Outbounds []Outbounds `json:"Outbounds"` IgnoreClientBandwidth bool `json:"IgnoreClientBandwidth"` DisableUDP bool `json:"DisableUDP"` UDPIdleTimeout time.Duration `json:"UDPIdleTimeout"` - Masquerade serverConfigMasquerade `json:"masquerade"` + Masquerade serverConfigMasquerade `json:"Masquerade"` } type QUICConfig struct { diff --git a/core/hy2/hook.go b/core/hy2/hook.go index ec0d96b..806b8b0 100644 --- a/core/hy2/hook.go +++ b/core/hy2/hook.go @@ -12,15 +12,19 @@ type HookServer struct { } func (h *HookServer) Log(id string, tx, rx uint64) (ok bool) { - if c, ok := h.Counter.Load(h.Tag); ok { - c.(*counter.TrafficCounter).Rx(id, int(rx)) - c.(*counter.TrafficCounter).Tx(id, int(rx)) - return true - } else { - c := counter.NewTrafficCounter() + var c interface{} + var exists bool + + if c, exists = h.Counter.Load(h.Tag); !exists { + c = counter.NewTrafficCounter() h.Counter.Store(h.Tag, c) - c.Rx(id, int(rx)) - c.Tx(id, int(rx)) + } + + if tc, ok := c.(*counter.TrafficCounter); ok { + tc.Rx(id, int(rx)) + tc.Tx(id, int(tx)) return true } + + return false } diff --git a/core/hy2/node.go b/core/hy2/node.go index a4ab3fe..bfe74e9 100644 --- a/core/hy2/node.go +++ b/core/hy2/node.go @@ -1,9 +1,13 @@ package hy2 import ( + "fmt" + "os" + "github.com/InazumaV/V2bX/api/panel" "github.com/InazumaV/V2bX/conf" "github.com/apernet/hysteria/core/server" + "github.com/goccy/go-json" "go.uber.org/zap" ) @@ -52,6 +56,18 @@ func (n *Hysteria2node) getHyConfig(tag string, info *panel.NodeInfo, config *co } func (h *Hysteria2) AddNode(tag string, info *panel.NodeInfo, config *conf.Options) error { + var err error + hyconfig := &server.Config{} + if len(config.Hysteria2Options.Hysteria2ConfigPath) != 0 { + data, err := os.ReadFile(config.Hysteria2Options.Hysteria2ConfigPath) + if err != nil { + return fmt.Errorf("read hysteria2 config error: %s", err) + } + err = json.Unmarshal(data, hyconfig) + if err != nil { + return fmt.Errorf("unmarshal original config error: %s", err) + } + } n := Hysteria2node{ Tag: tag, Logger: h.Logger, @@ -63,7 +79,8 @@ func (h *Hysteria2) AddNode(tag string, info *panel.NodeInfo, config *conf.Optio Tag: tag, }, } - hyconfig, err := n.getHyConfig(tag, info, config) + + hyconfig, err = n.getHyConfig(tag, info, config) if err != nil { return err } diff --git a/go.mod b/go.mod index 906e02e..f46098f 100644 --- a/go.mod +++ b/go.mod @@ -13,10 +13,10 @@ require ( github.com/hashicorp/go-multierror v1.1.1 github.com/juju/ratelimit v1.0.2 github.com/sagernet/sing v0.3.1-0.20240105061852-782bc05c5573 - github.com/sagernet/sing-box v1.8.2 + github.com/sagernet/sing-box v1.9.0 github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.8.0 - github.com/xtls/xray-core v1.8.8-0.20240125151013-25c531c6c358 + github.com/xtls/xray-core v1.8.8-0.20240206154139-303beff5dd1a go.uber.org/zap v1.26.0 golang.org/x/crypto v0.18.0 golang.org/x/sys v0.16.0 @@ -150,7 +150,7 @@ require ( github.com/quic-go/qpack v0.4.0 // indirect github.com/quic-go/qtls-go1-20 v0.4.1 // indirect github.com/quic-go/quic-go v0.41.0 // indirect - github.com/refraction-networking/utls v1.6.1 // indirect + github.com/refraction-networking/utls v1.6.2 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect github.com/sacloud/api-client-go v0.2.8 // indirect github.com/sacloud/go-http v0.1.6 // indirect @@ -163,11 +163,11 @@ require ( github.com/sagernet/quic-go v0.40.1 // indirect github.com/sagernet/sing-dns v0.1.12 // indirect github.com/sagernet/sing-mux v0.2.0 // indirect - github.com/sagernet/sing-quic v0.1.7 // indirect + github.com/sagernet/sing-quic v0.1.8 // indirect github.com/sagernet/sing-shadowsocks v0.2.6 // indirect github.com/sagernet/sing-shadowsocks2 v0.2.0 // indirect github.com/sagernet/sing-shadowtls v0.1.4 // indirect - github.com/sagernet/sing-tun v0.2.0 // indirect + github.com/sagernet/sing-tun v0.2.1 // indirect github.com/sagernet/sing-vmess v0.1.8 // indirect github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 // indirect github.com/sagernet/tfo-go v0.0.0-20231209031829-7b5343ac1dc6 // indirect @@ -205,7 +205,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/ratelimit v0.2.0 // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect - golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc // indirect + golang.org/x/exp v0.0.0-20240119083558-1b970713d09a // indirect golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.20.0 // indirect golang.org/x/oauth2 v0.14.0 // indirect @@ -229,4 +229,4 @@ require ( ) //github.com/apernet/hysteria/core v1.3.5-0.20240201034858-bb99579bb92c => /root/hysteria/core -replace github.com/sagernet/sing-box v1.8.2 => github.com/wyx2685/sing-box_mod v0.0.0 +replace github.com/sagernet/sing-box v1.9.0 => github.com/wyx2685/sing-box_mod v0.0.1 diff --git a/go.sum b/go.sum index 1786ac5..73357d6 100644 --- a/go.sum +++ b/go.sum @@ -620,8 +620,8 @@ github.com/quic-go/qtls-go1-20 v0.4.1 h1:D33340mCNDAIKBqXuAvexTNMUByrYmFYVfKfDN5 github.com/quic-go/qtls-go1-20 v0.4.1/go.mod h1:X9Nh97ZL80Z+bX/gUXMbipO6OxdiDi58b/fMC9mAL+k= github.com/quic-go/quic-go v0.41.0 h1:aD8MmHfgqTURWNJy48IYFg2OnxwHT3JL7ahGs73lb4k= github.com/quic-go/quic-go v0.41.0/go.mod h1:qCkNjqczPEvgsOnxZ0eCD14lv+B2LHlFAB++CNOh9hA= -github.com/refraction-networking/utls v1.6.1 h1:n1JG5karzdGWsI6iZmGrOv3SNzR4c+4M8J6KWGsk3lA= -github.com/refraction-networking/utls v1.6.1/go.mod h1:+EbcQOvQvXoFV9AEKbuGlljt1doLRKAVY1jJHe9EtDo= +github.com/refraction-networking/utls v1.6.2 h1:iTeeGY0o6nMNcGyirxkD5bFIsVctP5InGZ3E0HrzS7k= +github.com/refraction-networking/utls v1.6.2/go.mod h1:yil9+7qSl+gBwJqztoQseO6Pr3h62pQoY1lXiNR/FPs= github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 h1:f/FNXud6gA3MNr8meMVVGxhp+QBTqY91tM8HjEuMjGg= github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3/go.mod h1:HgjTstvQsPGkxUsCd2KWxErBblirPizecHcpD3ffK+s= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= @@ -660,16 +660,16 @@ github.com/sagernet/sing-dns v0.1.12 h1:1HqZ+ln+Rezx/aJMStaS0d7oPeX2EobSV1NT537k github.com/sagernet/sing-dns v0.1.12/go.mod h1:rx/DTOisneQpCgNQ4jbFU/JNEtnz0lYcHXenlVzpjEU= github.com/sagernet/sing-mux v0.2.0 h1:4C+vd8HztJCWNYfufvgL49xaOoOHXty2+EAjnzN3IYo= github.com/sagernet/sing-mux v0.2.0/go.mod h1:khzr9AOPocLa+g53dBplwNDz4gdsyx/YM3swtAhlkHQ= -github.com/sagernet/sing-quic v0.1.7 h1:SC45rAnvQ9BuyO0V186OdDScMBitmZo0XcM9LBYRUW8= -github.com/sagernet/sing-quic v0.1.7/go.mod h1:wUg1Z6AGKeJguruZo0lhrie3dqPiRCKaidLAbK2ttEs= +github.com/sagernet/sing-quic v0.1.8 h1:G4iBXAKIII+uTzd55oZ/9cAQswGjlvHh/0yKMQioDS0= +github.com/sagernet/sing-quic v0.1.8/go.mod h1:2w7DZXtf4MPjIGpovA3+vpI6bvOf1n1f9cQ1E2qQJSg= github.com/sagernet/sing-shadowsocks v0.2.6 h1:xr7ylAS/q1cQYS8oxKKajhuQcchd5VJJ4K4UZrrpp0s= github.com/sagernet/sing-shadowsocks v0.2.6/go.mod h1:j2YZBIpWIuElPFL/5sJAj470bcn/3QQ5lxZUNKLDNAM= github.com/sagernet/sing-shadowsocks2 v0.2.0 h1:wpZNs6wKnR7mh1wV9OHwOyUr21VkS3wKFHi+8XwgADg= github.com/sagernet/sing-shadowsocks2 v0.2.0/go.mod h1:RnXS0lExcDAovvDeniJ4IKa2IuChrdipolPYWBv9hWQ= github.com/sagernet/sing-shadowtls v0.1.4 h1:aTgBSJEgnumzFenPvc+kbD9/W0PywzWevnVpEx6Tw3k= github.com/sagernet/sing-shadowtls v0.1.4/go.mod h1:F8NBgsY5YN2beQavdgdm1DPlhaKQlaL6lpDdcBglGK4= -github.com/sagernet/sing-tun v0.2.0 h1:/WloeRTWvwKIuiIvY+HVJaaZsTGb3XqJXZUbn6wVhz4= -github.com/sagernet/sing-tun v0.2.0/go.mod h1:vJHzPAbwFUHxdFHUFQlH+Fb4rT3K4/SHODdMLU1rrQI= +github.com/sagernet/sing-tun v0.2.1 h1:xZ/MkQbAX4yuOXq/s1pfhWa0lK1Ld7t4gOpSUbRl1Rs= +github.com/sagernet/sing-tun v0.2.1/go.mod h1:w1HTPPEL575m+Ob3GOIWaTs3ZrTdgLIwoldce/p3WPU= github.com/sagernet/sing-vmess v0.1.8 h1:XVWad1RpTy9b5tPxdm5MCU8cGfrTGdR8qCq6HV2aCNc= github.com/sagernet/sing-vmess v0.1.8/go.mod h1:vhx32UNzTDUkNwOyIjcZQohre1CaytquC5mPplId8uA= github.com/sagernet/smux v0.0.0-20231208180855-7041f6ea79e7 h1:DImB4lELfQhplLTxeq2z31Fpv8CQqqrUwTbrIRumZqQ= @@ -800,16 +800,16 @@ github.com/vishvananda/netns v0.0.4 h1:Oeaw1EM2JMxD51g9uhtC0D7erkIjgmj8+JZc26m1Y github.com/vishvananda/netns v0.0.4/go.mod h1:SpkAiCQRtJ6TvvxPnOSyH3BMl6unz3xZlaprSwhNNJM= github.com/vultr/govultr/v2 v2.17.2 h1:gej/rwr91Puc/tgh+j33p/BLR16UrIPnSr+AIwYWZQs= github.com/vultr/govultr/v2 v2.17.2/go.mod h1:ZFOKGWmgjytfyjeyAdhQlSWwTjh2ig+X49cAp50dzXI= -github.com/wyx2685/sing-box_mod v0.0.0 h1:IuJekC27gcCx8NkemLfMdcI6LK64tDh6OwLaOHQX2Ng= -github.com/wyx2685/sing-box_mod v0.0.0/go.mod h1:aSBnZ9maXq2QvQ1Ij5+5Hhn0/RBO0zYkjtWfr9GFbLo= +github.com/wyx2685/sing-box_mod v0.0.1 h1:AjjRkeDUWMH+7D/Fn8NCMX7Jihrbz5eWSPPA06FpWrA= +github.com/wyx2685/sing-box_mod v0.0.1/go.mod h1:pqJo0JXJi5uqaARHBkaQORtw8HCmIxsoxT1rS63O0eU= github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xtls/reality v0.0.0-20231112171332-de1173cf2b19 h1:capMfFYRgH9BCLd6A3Er/cH3A9Nz3CU2KwxwOQZIePI= github.com/xtls/reality v0.0.0-20231112171332-de1173cf2b19/go.mod h1:dm4y/1QwzjGaK17ofi0Vs6NpKAHegZky8qk6J2JJZAE= -github.com/xtls/xray-core v1.8.8-0.20240125151013-25c531c6c358 h1:DU3gK47iZoVIucsfhta5wsrD0QZUe/HDRD0n7OeozMA= -github.com/xtls/xray-core v1.8.8-0.20240125151013-25c531c6c358/go.mod h1:sSYVaxAyZEHQ/21IQQgsXnupu9tw4Ye0b8BmvQAG5O4= +github.com/xtls/xray-core v1.8.8-0.20240206154139-303beff5dd1a h1:gi7JPIU52x2gc7PhLwqkZ8LZWtvV8b1K0V6lNOLvu6I= +github.com/xtls/xray-core v1.8.8-0.20240206154139-303beff5dd1a/go.mod h1:gOJ47dX59atBMrlt5Y6N3qvCe6bwEFU6ajDQflvH3ys= github.com/yandex-cloud/go-genproto v0.0.0-20220805142335-27b56ddae16f h1:cG+ehPRJSlqljSufLf1KXeXpUd1dLNjnzA18mZcB/O0= github.com/yandex-cloud/go-genproto v0.0.0-20220805142335-27b56ddae16f/go.mod h1:HEUYX/p8966tMUHHT+TsS0hF/Ca/NYwqprC5WXSDMfE= github.com/yandex-cloud/go-sdk v0.0.0-20220805164847-cf028e604997 h1:2wzke3JH7OtN20WsNDZx2VH/TCmsbqtDEbXzjF+i05E= @@ -879,8 +879,8 @@ golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= -golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= +golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA= +golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=