ratelimit: limit after

This commit is contained in:
Meo597 2025-03-27 05:12:40 +08:00
parent 4b44fd8945
commit 271305c301
6 changed files with 46 additions and 16 deletions

4
go.mod
View file

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

4
go.sum
View file

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

View file

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

View file

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

View file

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

View file

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