Просмотр исходного кода

Propagate settings to Proxy

tags/v2.2.0^2^2
9seconds 1 месяц назад
Родитель
Сommit
75392941da
4 измененных файлов: 42 добавлений и 0 удалений
  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 Просмотреть файл

@@ -239,6 +239,11 @@ func runProxy(conf *config.Config, version string) error { //nolint: funlen
239 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 247
 	opts := mtglib.ProxyOpts{
243 248
 		Logger:          logger,
244 249
 		Network:         ntw,
@@ -256,6 +261,10 @@ func runProxy(conf *config.Config, version string) error { //nolint: funlen
256 261
 
257 262
 		AllowFallbackOnUnknownDC: conf.AllowFallbackOnUnknownDC.Get(false),
258 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 270
 	proxy, err := mtglib.NewProxy(opts)

+ 7
- 0
mtglib/init.go Просмотреть файл

@@ -99,6 +99,13 @@ const (
99 99
 	// reads from Telegram after which connection will be terminated. This is
100 100
 	// required to abort stale connections.
101 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 111
 // Network defines a knowledge how to work with a network. It may sound fun but

+ 11
- 0
mtglib/proxy.go Просмотреть файл

@@ -157,6 +157,7 @@ func (p *Proxy) Shutdown() {
157 157
 	p.streamWaitGroup.Wait()
158 158
 	p.workerPool.Release()
159 159
 	p.configUpdater.Wait()
160
+	p.doppelGanger.Shutdown()
160 161
 
161 162
 	p.allowlist.Shutdown()
162 163
 	p.blocklist.Shutdown()
@@ -327,6 +328,14 @@ func NewProxy(opts ProxyOpts) (*Proxy, error) {
327 328
 		tolerateTimeSkewness:     opts.getTolerateTimeSkewness(),
328 329
 		allowFallbackOnUnknownDC: opts.AllowFallbackOnUnknownDC,
329 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 339
 		configUpdater: dc.NewPublicConfigUpdater(
331 340
 			tg,
332 341
 			updatersLogger.Named("public-config"),
@@ -338,6 +347,8 @@ func NewProxy(opts ProxyOpts) (*Proxy, error) {
338 347
 		domainFrontingProxyProtocol: opts.DomainFrontingProxyProtocol,
339 348
 	}
340 349
 
350
+	proxy.doppelGanger.Run()
351
+
341 352
 	if opts.AutoUpdate {
342 353
 		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv4, "tcp4")
343 354
 		proxy.configUpdater.Run(ctx, dc.PublicConfigUpdateURLv6, "tcp6")

+ 15
- 0
mtglib/proxy_opts.go Просмотреть файл

@@ -142,6 +142,21 @@ type ProxyOpts struct {
142 142
 	//
143 143
 	// OBSOLETE and DEPRECATED. Ignored.
144 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 162
 func (p ProxyOpts) valid() error {

Загрузка…
Отмена
Сохранить