瀏覽代碼

Merge remote-tracking branch 'origin/stable' into v2

tags/v2.1.12
9seconds 2 月之前
父節點
當前提交
7d748077e9

+ 7
- 4
.github/workflows/govulncheck.yml 查看文件

@@ -31,8 +31,11 @@ jobs:
31 31
       with:
32 32
         submodules: recursive
33 33
 
34
-    - uses: jdx/mise-action@v3
35
-      name: Install mise
34
+    - name: Setup Go
35
+      uses: actions/setup-go@v6
36
+      with:
37
+        go-version-file: go.mod
36 38
 
37
-    - name: Run tests
38
-      run: mise tasks run vuln
39
+    - name: Check for vulnerabilities
40
+      run: |
41
+        go run golang.org/x/vuln/cmd/govulncheck@latest ./...

+ 5
- 0
example.config.toml 查看文件

@@ -48,6 +48,11 @@ concurrency = 8192
48 48
 #     Only ipv4 connectivity is used
49 49
 prefer-ip = "prefer-ipv6"
50 50
 
51
+# If this setting is set, then mtg will try to get proxy updates from Telegram
52
+# Usually this is completely fine to have it disabled, because mtg has a list
53
+# of some core proxies hardcoded.
54
+auto-update = false
55
+
51 56
 # FakeTLS uses domain fronting protection. So it needs to know a port to
52 57
 # access.
53 58
 #

+ 1
- 1
go.mod 查看文件

@@ -14,7 +14,7 @@ require (
14 14
 	github.com/panjf2000/ants/v2 v2.11.5
15 15
 	github.com/prometheus/client_golang v1.23.2
16 16
 	github.com/prometheus/common v0.67.5 // indirect
17
-	github.com/prometheus/procfs v0.19.2 // indirect
17
+	github.com/prometheus/procfs v0.20.0 // indirect
18 18
 	github.com/rs/zerolog v1.34.0
19 19
 	github.com/smira/go-statsd v1.3.4
20 20
 	github.com/stretchr/objx v0.5.2 // indirect

+ 2
- 2
go.sum 查看文件

@@ -68,8 +68,8 @@ github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNw
68 68
 github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
69 69
 github.com/prometheus/common v0.67.5 h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTUGI4=
70 70
 github.com/prometheus/common v0.67.5/go.mod h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw=
71
-github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws=
72
-github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw=
71
+github.com/prometheus/procfs v0.20.0 h1:AA7aCvjxwAquZAlonN7888f2u4IN8WVeFgBi4k82M4Q=
72
+github.com/prometheus/procfs v0.20.0/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo=
73 73
 github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
74 74
 github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
75 75
 github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=

+ 1
- 0
internal/cli/run_proxy.go 查看文件

@@ -255,6 +255,7 @@ func runProxy(conf *config.Config, version string) error { //nolint: funlen
255 255
 		DomainFrontingIP:            conf.GetDomainFrontingIP(nil),
256 256
 		DomainFrontingProxyProtocol: conf.GetDomainFrontingProxyProtocol(false),
257 257
 		PreferIP:                    conf.PreferIP.Get(mtglib.DefaultPreferIP),
258
+		AutoUpdate:                  conf.AutoUpdate.Get(false),
258 259
 
259 260
 		AllowFallbackOnUnknownDC: conf.AllowFallbackOnUnknownDC.Get(false),
260 261
 		TolerateTimeSkewness:     conf.TolerateTimeSkewness.Value,

+ 1
- 0
internal/config/config.go 查看文件

@@ -28,6 +28,7 @@ type Config struct {
28 28
 	BindTo                      TypeHostPort    `json:"bindTo"`
29 29
 	ProxyProtocolListener       TypeBool        `json:"proxyProtocolListener"`
30 30
 	PreferIP                    TypePreferIP    `json:"preferIp"`
31
+	AutoUpdate                  TypeBool        `json:"autoUpdate"`
31 32
 	DomainFrontingPort          TypePort        `json:"domainFrontingPort"`
32 33
 	DomainFrontingIP            TypeIP          `json:"domainFrontingIp"`
33 34
 	DomainFrontingProxyProtocol TypeBool        `json:"domainFrontingProxyProtocol"`

+ 1
- 0
internal/config/parse.go 查看文件

@@ -15,6 +15,7 @@ type tomlConfig struct {
15 15
 	BindTo                      string `toml:"bind-to" json:"bindTo"`
16 16
 	ProxyProtocolListener       bool   `toml:"proxy-protocol-listener" json:"proxyProtocolListener"`
17 17
 	PreferIP                    string `toml:"prefer-ip" json:"preferIp,omitempty"`
18
+	AutoUpdate                  bool   `toml:"auto-update" json:"autoUpdate,omitempty"`
18 19
 	DomainFrontingPort          uint   `toml:"domain-fronting-port" json:"domainFrontingPort,omitempty"`
19 20
 	DomainFrontingIP            string `toml:"domain-fronting-ip" json:"domainFrontingIp,omitempty"`
20 21
 	DomainFrontingProxyProtocol bool   `toml:"domain-fronting-proxy-protocol" json:"domainFrontingProxyProtocol,omitempty"`

+ 6
- 6
mise.lock 查看文件

@@ -33,10 +33,10 @@ backend = "aqua:golangci/golangci-lint"
33 33
 "platforms.windows-x64" = { checksum = "sha256:c60c87695e79db8e320f0e5be885059859de52bb5ee5f11be5577828570bc2a3", url = "https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-windows-amd64.zip"}
34 34
 
35 35
 [[tools.goreleaser]]
36
-version = "2.13.3"
36
+version = "2.14.1"
37 37
 backend = "aqua:goreleaser/goreleaser"
38
-"platforms.linux-arm64" = { checksum = "sha256:156656d0f874542d618568bd50afd3d33ced2e8aab2c60cc7c21e1b9fa52031e", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.13.3/goreleaser_Linux_arm64.tar.gz"}
39
-"platforms.linux-x64" = { checksum = "sha256:4b66f2f78f78561330350651ade557b70328664718490f37834749073af21d20", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.13.3/goreleaser_Linux_x86_64.tar.gz"}
40
-"platforms.macos-arm64" = { checksum = "sha256:5516c37779efb3935d5b213cda3b0b9025ae94ddbcb51df6919acbcdef4194b0", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.13.3/goreleaser_Darwin_all.tar.gz"}
41
-"platforms.macos-x64" = { checksum = "sha256:5516c37779efb3935d5b213cda3b0b9025ae94ddbcb51df6919acbcdef4194b0", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.13.3/goreleaser_Darwin_all.tar.gz"}
42
-"platforms.windows-x64" = { checksum = "sha256:c5586c4ed749ca358ad61ed73ee4b8039cfa68daae8c23e69fb086d549dfb31d", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.13.3/goreleaser_Windows_x86_64.zip"}
38
+"platforms.linux-arm64" = { checksum = "sha256:a84d3b27f052c12ad5c8342d7caf1450a7174a305730aed21d72db09301e49a5", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Linux_arm64.tar.gz"}
39
+"platforms.linux-x64" = { checksum = "sha256:2df975a7acbfdeaf888d596cab0024d48ec7fb7d747e1d08b90948b791f40a5f", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Linux_x86_64.tar.gz"}
40
+"platforms.macos-arm64" = { checksum = "sha256:9f2e47f847b4f4177376fc6aa6914fbc7f673f59720076747e738b578c2e896e", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Darwin_all.tar.gz"}
41
+"platforms.macos-x64" = { checksum = "sha256:9f2e47f847b4f4177376fc6aa6914fbc7f673f59720076747e738b578c2e896e", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Darwin_all.tar.gz"}
42
+"platforms.windows-x64" = { checksum = "sha256:d7a3d8ba795e97ab8c4f8003630d300da164adf21fde5a4049440c20f15c3137", url = "https://github.com/goreleaser/goreleaser/releases/download/v2.14.1/goreleaser_Windows_x86_64.zip"}

+ 6
- 0
mtglib/internal/dc/init.go 查看文件

@@ -57,6 +57,9 @@ var defaultDCAddrSet = dcAddrSet{
57 57
 		5: {
58 58
 			{Network: "tcp4", Address: "149.154.171.5:443"},
59 59
 		},
60
+		203: {
61
+			{Network: "tcp4", Address: "91.105.192.100:443"},
62
+		},
60 63
 	},
61 64
 	v6: map[int][]Addr{
62 65
 		1: {
@@ -74,5 +77,8 @@ var defaultDCAddrSet = dcAddrSet{
74 77
 		5: {
75 78
 			{Network: "tcp6", Address: "[2001:b28:f23f:f005::a]:443"},
76 79
 		},
80
+		203: {
81
+			{Network: "tcp6", Address: "[2a0a:f280:0203:000a:5000:0000:0000:0100]:443"},
82
+		},
77 83
 	},
78 84
 }

+ 1
- 1
mtglib/internal/dc/updater.go 查看文件

@@ -32,7 +32,7 @@ func (u *updater) run(ctx context.Context, callback func() error) {
32 32
 		for {
33 33
 			u.logger.Info("start update")
34 34
 			if err := callback(); err != nil {
35
-				u.logger.WarningError("cannot update: %w", err)
35
+				u.logger.WarningError("cannot update", err)
36 36
 			}
37 37
 			u.logger.Info("updated")
38 38
 

+ 2
- 0
mtglib/internal/dc/view_test.go 查看文件

@@ -41,6 +41,7 @@ func (suite *ViewTestSuite) TestGetV4() {
41 41
 		},
42 42
 		203: {
43 43
 			{Network: "tcp4", Address: "127.0.0.2:443"},
44
+			{Network: "tcp4", Address: "91.105.192.100:443"},
44 45
 		},
45 46
 		2: {
46 47
 			{Network: "tcp4", Address: "149.154.167.51:443"},
@@ -60,6 +61,7 @@ func (suite *ViewTestSuite) TestGetV6() {
60 61
 		111: {},
61 62
 		203: {
62 63
 			{Network: "tcp6", Address: "xxx"},
64
+			{Network: "tcp6", Address: "[2a0a:f280:0203:000a:5000:0000:0000:0100]:443"},
63 65
 		},
64 66
 		1: {
65 67
 			{Network: "tcp6", Address: "[2001:b28:f23d:f001::a]:443"},

+ 7
- 2
mtglib/proxy.go 查看文件

@@ -252,6 +252,9 @@ func (p *Proxy) doTelegramCall(ctx *streamContext) error {
252 252
 	if err != nil {
253 253
 		return fmt.Errorf("no addresses to call: %w", err)
254 254
 	}
255
+	if conn == nil {
256
+		return fmt.Errorf("no available addresses for DC %d", ctx.dc)
257
+	}
255 258
 
256 259
 	tgConn, err := foundAddr.Obfuscator.SendHandshake(conn, ctx.dc)
257 260
 	if err != nil {
@@ -346,8 +349,10 @@ func NewProxy(opts ProxyOpts) (*Proxy, error) {
346 349
 		domainFrontingProxyProtocol: opts.DomainFrontingProxyProtocol,
347 350
 	}
348 351
 
349
-	proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
350
-	proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")
352
+	if opts.AutoUpdate {
353
+		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
354
+		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")
355
+	}
351 356
 
352 357
 	pool, err := ants.NewPoolWithFunc(opts.getConcurrency(),
353 358
 		func(arg any) {

+ 6
- 0
mtglib/proxy_opts.go 查看文件

@@ -85,6 +85,12 @@ type ProxyOpts struct {
85 85
 	// This is an optional setting.
86 86
 	PreferIP string
87 87
 
88
+	// AutoUpdate defines if it is required to auto update proxy list from
89
+	// Telegram instead of relying on a hardcoded list.
90
+	//
91
+	// This is an optional setting.
92
+	AutoUpdate bool
93
+
88 94
 	// DomainFrontingPort is a port we use to connect to a fronting domain.
89 95
 	//
90 96
 	// This is required because secret does not specify a port. It specifies a

Loading…
取消
儲存