Przeglądaj źródła

Propagate settings to Proxy

tags/v2.2.0^2^2
9seconds 2 miesięcy temu
rodzic
commit
75392941da
4 zmienionych plików z 42 dodań i 0 usunięć
  1. 9
    0
      internal/cli/run_proxy.go
  2. 7
    0
      mtglib/init.go
  3. 11
    0
      mtglib/proxy.go
  4. 15
    0
      mtglib/proxy_opts.go

+ 9
- 0
internal/cli/run_proxy.go Wyświetl plik

239
 		return fmt.Errorf("cannot build ip allowlist: %w", err)
239
 		return fmt.Errorf("cannot build ip allowlist: %w", err)
240
 	}
240
 	}
241
 
241
 
242
+	doppelGangerURLs := make([]string, len(conf.Defense.Doppelganger.URLs))
243
+	for i, v := range conf.Defense.Doppelganger.URLs {
244
+		doppelGangerURLs[i] = v.String()
245
+	}
246
+
242
 	opts := mtglib.ProxyOpts{
247
 	opts := mtglib.ProxyOpts{
243
 		Logger:          logger,
248
 		Logger:          logger,
244
 		Network:         ntw,
249
 		Network:         ntw,
256
 
261
 
257
 		AllowFallbackOnUnknownDC: conf.AllowFallbackOnUnknownDC.Get(false),
262
 		AllowFallbackOnUnknownDC: conf.AllowFallbackOnUnknownDC.Get(false),
258
 		TolerateTimeSkewness:     conf.TolerateTimeSkewness.Value,
263
 		TolerateTimeSkewness:     conf.TolerateTimeSkewness.Value,
264
+
265
+		DoppelGangerURLs:    doppelGangerURLs,
266
+		DoppelGangerPerRaid: conf.Defense.Doppelganger.Repeats.Get(mtglib.DoppelGangerPerRaid),
267
+		DoppelGangerEach:    conf.Defense.Doppelganger.UpdateEach.Get(mtglib.DoppelGangerEach),
259
 	}
268
 	}
260
 
269
 
261
 	proxy, err := mtglib.NewProxy(opts)
270
 	proxy, err := mtglib.NewProxy(opts)

+ 7
- 0
mtglib/init.go Wyświetl plik

99
 	// reads from Telegram after which connection will be terminated. This is
99
 	// reads from Telegram after which connection will be terminated. This is
100
 	// required to abort stale connections.
100
 	// required to abort stale connections.
101
 	TCPRelayReadTimeout = 20 * time.Second
101
 	TCPRelayReadTimeout = 20 * time.Second
102
+
103
+	// DoppelGangerPerRaid defines a number of requests to each URL
104
+	// per raid.
105
+	DoppelGangerPerRaid = 10
106
+
107
+	// DoppelGangerEach defines a time period between each crawl attempt.
108
+	DoppelGangerEach = 6 * time.Hour
102
 )
109
 )
103
 
110
 
104
 // Network defines a knowledge how to work with a network. It may sound fun but
111
 // Network defines a knowledge how to work with a network. It may sound fun but

+ 11
- 0
mtglib/proxy.go Wyświetl plik

157
 	p.streamWaitGroup.Wait()
157
 	p.streamWaitGroup.Wait()
158
 	p.workerPool.Release()
158
 	p.workerPool.Release()
159
 	p.configUpdater.Wait()
159
 	p.configUpdater.Wait()
160
+	p.doppelGanger.Shutdown()
160
 
161
 
161
 	p.allowlist.Shutdown()
162
 	p.allowlist.Shutdown()
162
 	p.blocklist.Shutdown()
163
 	p.blocklist.Shutdown()
327
 		tolerateTimeSkewness:     opts.getTolerateTimeSkewness(),
328
 		tolerateTimeSkewness:     opts.getTolerateTimeSkewness(),
328
 		allowFallbackOnUnknownDC: opts.AllowFallbackOnUnknownDC,
329
 		allowFallbackOnUnknownDC: opts.AllowFallbackOnUnknownDC,
329
 		telegram:                 tg,
330
 		telegram:                 tg,
331
+		doppelGanger: doppel.NewGanger(
332
+			ctx,
333
+			opts.Network,
334
+			logger.Named("doppelganger"),
335
+			opts.DoppelGangerEach,
336
+			int(opts.DoppelGangerPerRaid),
337
+			opts.DoppelGangerURLs,
338
+		),
330
 		configUpdater: dc.NewPublicConfigUpdater(
339
 		configUpdater: dc.NewPublicConfigUpdater(
331
 			tg,
340
 			tg,
332
 			updatersLogger.Named("public-config"),
341
 			updatersLogger.Named("public-config"),
338
 		domainFrontingProxyProtocol: opts.DomainFrontingProxyProtocol,
347
 		domainFrontingProxyProtocol: opts.DomainFrontingProxyProtocol,
339
 	}
348
 	}
340
 
349
 
350
+	proxy.doppelGanger.Run()
351
+
341
 	if opts.AutoUpdate {
352
 	if opts.AutoUpdate {
342
 		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
353
 		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
343
 		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")
354
 		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")

+ 15
- 0
mtglib/proxy_opts.go Wyświetl plik

142
 	//
142
 	//
143
 	// OBSOLETE and DEPRECATED. Ignored.
143
 	// OBSOLETE and DEPRECATED. Ignored.
144
 	DCOverrides map[int][]string
144
 	DCOverrides map[int][]string
145
+
146
+	// DoppelGangerURLs is a list of URLs that should be crawled by
147
+	// mtg to calculate parameters for statistical distribution of a
148
+	// traffic for fronting domains. If nothing is given, then predefined
149
+	// statistics is going to be used.
150
+	DoppelGangerURLs []string
151
+
152
+	// DoppelGangerPerRaid defines how many time each URL from
153
+	// DoppelGangerURLs list should be crawled per raid. We recommend to
154
+	// have this number ~10.
155
+	DoppelGangerPerRaid uint
156
+
157
+	// DoppelGangerEach defines a time period between each raid. We recommend
158
+	// to use hours here.
159
+	DoppelGangerEach time.Duration
145
 }
160
 }
146
 
161
 
147
 func (p ProxyOpts) valid() error {
162
 func (p ProxyOpts) valid() error {

Ładowanie…
Anuluj
Zapisz