From 271305c301f7462d1497b502ce4d7c323edc7cab Mon Sep 17 00:00:00 2001 From: Meo597 <197331664+Meo597@users.noreply.github.com> Date: Thu, 27 Mar 2025 05:12:40 +0800 Subject: [PATCH] ratelimit: limit after --- go.mod | 4 +-- go.sum | 4 +-- infra/conf/transport_internet.go | 4 +++ transport/internet/reality/config.go | 2 ++ transport/internet/reality/config.pb.go | 42 +++++++++++++++++++------ transport/internet/reality/config.proto | 6 ++-- 6 files changed, 46 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 1b6a0823..19f3fbf2 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( github.com/stretchr/testify v1.10.0 github.com/v2fly/ss-bloomring v0.0.0-20210312155135-28617310f63e github.com/vishvananda/netlink v1.3.0 - github.com/xtls/reality v0.0.0-20250326135520-b8b119e3a1f7 + github.com/xtls/reality v0.0.0-20250326210428-52ea918ead1b go4.org/netipx v0.0.0-20231129151722-fdeea329fbba golang.org/x/crypto v0.36.0 golang.org/x/net v0.37.0 @@ -35,7 +35,7 @@ require ( ) // temp test -replace github.com/xtls/reality => github.com/meo597/reality v0.0.0-20250326135520-b8b119e3a1f7 +replace github.com/xtls/reality => github.com/meo597/reality v0.0.0-20250326210428-52ea918ead1b require ( github.com/andybalholm/brotli v1.1.0 // indirect diff --git a/go.sum b/go.sum index 12f2add4..1f89a22a 100644 --- a/go.sum +++ b/go.sum @@ -40,8 +40,8 @@ github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0N github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.2.7 h1:ZWSB3igEs+d0qvnxR/ZBzXVmxkgt8DdzP6m9pfuVLDM= github.com/klauspost/cpuid/v2 v2.2.7/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/meo597/reality v0.0.0-20250326135520-b8b119e3a1f7 h1:3CiCS6GMsxixHt9oHMQ13OvX8TTIReN7gbKwZjL+sc0= -github.com/meo597/reality v0.0.0-20250326135520-b8b119e3a1f7/go.mod h1:YbGJ8AYQ83QsGjN//QrGnD4W80SvL5b2K3RJKGLcewE= +github.com/meo597/reality v0.0.0-20250326210428-52ea918ead1b h1:W47edE5X8Ts/pgj1MFyN9ZdbBLQxcZy0bPzJPxNN3Ww= +github.com/meo597/reality v0.0.0-20250326210428-52ea918ead1b/go.mod h1:YbGJ8AYQ83QsGjN//QrGnD4W80SvL5b2K3RJKGLcewE= github.com/miekg/dns v1.1.64 h1:wuZgD9wwCE6XMT05UU/mlSko71eRSXEAm2EbjQXLKnQ= github.com/miekg/dns v1.1.64/go.mod h1:Dzw9769uoKVaLuODMDZz9M6ynFU6Em65csPuoi8G0ck= github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= diff --git a/infra/conf/transport_internet.go b/infra/conf/transport_internet.go index 95920439..acc8d420 100644 --- a/infra/conf/transport_internet.go +++ b/infra/conf/transport_internet.go @@ -502,8 +502,10 @@ type REALITYConfig struct { LimitUploadRate float64 `json:"limitUploadRate"` LimitUploadBrust int64 `json:"limitUploadBrust"` + LimitUploadAfter int64 `json:"limitUploadAfter"` LimitDownloadRate float64 `json:"limitDownloadRate"` LimitDownloadBrust int64 `json:"limitDownloadBrust"` + LimitDownloadAfter int64 `json:"limitDownloadAfter"` Fingerprint string `json:"fingerprint"` ServerName string `json:"serverName"` @@ -608,8 +610,10 @@ func (c *REALITYConfig) Build() (proto.Message, error) { config.LimitUploadRate = c.LimitUploadRate config.LimitUploadBrust = c.LimitUploadBrust + config.LimitUploadAfter = c.LimitUploadAfter config.LimitDownloadRate = c.LimitDownloadRate config.LimitDownloadBrust = c.LimitDownloadBrust + config.LimitDownloadAfter = c.LimitDownloadAfter } else { config.Fingerprint = strings.ToLower(c.Fingerprint) if config.Fingerprint == "unsafe" || config.Fingerprint == "hellogolang" { diff --git a/transport/internet/reality/config.go b/transport/internet/reality/config.go index 4de03618..bb1dee3a 100644 --- a/transport/internet/reality/config.go +++ b/transport/internet/reality/config.go @@ -34,8 +34,10 @@ func (c *Config) GetREALITYConfig() *reality.Config { LimitUploadRate: c.LimitUploadRate, LimitUploadBrust: c.LimitUploadBrust, + LimitUploadAfter: c.LimitUploadAfter, LimitDownloadRate: c.LimitDownloadRate, LimitDownloadBrust: c.LimitDownloadBrust, + LimitDownloadAfter: c.LimitDownloadAfter, } config.ServerNames = make(map[string]bool) for _, serverName := range c.ServerNames { diff --git a/transport/internet/reality/config.pb.go b/transport/internet/reality/config.pb.go index 4aadd552..99f09346 100644 --- a/transport/internet/reality/config.pb.go +++ b/transport/internet/reality/config.pb.go @@ -44,8 +44,10 @@ type Config struct { MasterKeyLog string `protobuf:"bytes,27,opt,name=master_key_log,json=masterKeyLog,proto3" json:"master_key_log,omitempty"` LimitUploadRate float64 `protobuf:"fixed64,28,opt,name=limit_upload_rate,json=limitUploadRate,proto3" json:"limit_upload_rate,omitempty"` LimitUploadBrust int64 `protobuf:"zigzag64,29,opt,name=limit_upload_brust,json=limitUploadBrust,proto3" json:"limit_upload_brust,omitempty"` - LimitDownloadRate float64 `protobuf:"fixed64,30,opt,name=limit_download_rate,json=limitDownloadRate,proto3" json:"limit_download_rate,omitempty"` - LimitDownloadBrust int64 `protobuf:"zigzag64,31,opt,name=limit_download_brust,json=limitDownloadBrust,proto3" json:"limit_download_brust,omitempty"` + LimitUploadAfter int64 `protobuf:"zigzag64,30,opt,name=limit_upload_after,json=limitUploadAfter,proto3" json:"limit_upload_after,omitempty"` + LimitDownloadRate float64 `protobuf:"fixed64,31,opt,name=limit_download_rate,json=limitDownloadRate,proto3" json:"limit_download_rate,omitempty"` + LimitDownloadBrust int64 `protobuf:"zigzag64,32,opt,name=limit_download_brust,json=limitDownloadBrust,proto3" json:"limit_download_brust,omitempty"` + LimitDownloadAfter int64 `protobuf:"zigzag64,33,opt,name=limit_download_after,json=limitDownloadAfter,proto3" json:"limit_download_after,omitempty"` } func (x *Config) Reset() { @@ -211,6 +213,13 @@ func (x *Config) GetLimitUploadBrust() int64 { return 0 } +func (x *Config) GetLimitUploadAfter() int64 { + if x != nil { + return x.LimitUploadAfter + } + return 0 +} + func (x *Config) GetLimitDownloadRate() float64 { if x != nil { return x.LimitDownloadRate @@ -225,6 +234,13 @@ func (x *Config) GetLimitDownloadBrust() int64 { return 0 } +func (x *Config) GetLimitDownloadAfter() int64 { + if x != nil { + return x.LimitDownloadAfter + } + return 0 +} + var File_transport_internet_reality_config_proto protoreflect.FileDescriptor var file_transport_internet_reality_config_proto_rawDesc = []byte{ @@ -232,7 +248,7 @@ var file_transport_internet_reality_config_proto_rawDesc = []byte{ 0x72, 0x6e, 0x65, 0x74, 0x2f, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x2f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1f, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0xbe, 0x05, 0x0a, 0x06, 0x43, + 0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x22, 0x9e, 0x06, 0x0a, 0x06, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x73, 0x68, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x64, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, @@ -270,13 +286,19 @@ var file_transport_internet_reality_config_proto_rawDesc = []byte{ 0x74, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x72, 0x75, 0x73, 0x74, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x12, 0x52, 0x10, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x72, 0x75, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x6f, 0x77, - 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x69, 0x6d, - 0x69, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x72, 0x75, 0x73, - 0x74, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x12, 0x52, 0x12, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x6f, - 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x72, 0x75, 0x73, 0x74, 0x42, 0x7f, 0x0a, 0x23, 0x63, + 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x72, 0x75, 0x73, 0x74, 0x12, 0x2c, 0x0a, 0x12, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x5f, 0x75, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x12, 0x52, 0x10, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x13, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x72, 0x61, 0x74, 0x65, 0x18, 0x1f, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x11, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x6f, 0x77, 0x6e, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x69, 0x6d, 0x69, 0x74, + 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x62, 0x72, 0x75, 0x73, 0x74, 0x18, + 0x20, 0x20, 0x01, 0x28, 0x12, 0x52, 0x12, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x6f, 0x77, 0x6e, + 0x6c, 0x6f, 0x61, 0x64, 0x42, 0x72, 0x75, 0x73, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x5f, 0x64, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x5f, 0x61, 0x66, 0x74, 0x65, + 0x72, 0x18, 0x21, 0x20, 0x01, 0x28, 0x12, 0x52, 0x12, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x44, 0x6f, + 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x41, 0x66, 0x74, 0x65, 0x72, 0x42, 0x7f, 0x0a, 0x23, 0x63, 0x6f, 0x6d, 0x2e, 0x78, 0x72, 0x61, 0x79, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x2e, 0x72, 0x65, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x50, 0x01, 0x5a, 0x34, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, diff --git a/transport/internet/reality/config.proto b/transport/internet/reality/config.proto index a3fe15a9..e3365f54 100644 --- a/transport/internet/reality/config.proto +++ b/transport/internet/reality/config.proto @@ -28,6 +28,8 @@ message Config { double limit_upload_rate = 28; sint64 limit_upload_brust = 29; - double limit_download_rate = 30; - sint64 limit_download_brust = 31; + sint64 limit_upload_after = 30; + double limit_download_rate = 31; + sint64 limit_download_brust = 32; + sint64 limit_download_after = 33; }