amneziawg_job.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package job
  2. import (
  3. "github.com/mhsanaei/3x-ui/v3/internal/amneziawgnet"
  4. "github.com/mhsanaei/3x-ui/v3/internal/logger"
  5. "github.com/mhsanaei/3x-ui/v3/internal/web/service"
  6. )
  7. // AmneziaWGJob reconciles the running embedded AmneziaWG interfaces
  8. // (internal/amneziawgnet -- amneziawg-go over a gVisor netstack, no kernel
  9. // module) against the enabled AmneziaWG inbounds in the database,
  10. // rebuilding/reconfiguring any that drifted. Unlike the retired
  11. // kernel-module Manager this job used to drive, there is no traffic/
  12. // online-status accounting here at all: once a peer's decapsulated traffic
  13. // is relayed into Xray's own SOCKS5 inbound (see
  14. // internal/web/service/xray.go's injectAmneziawgnetSocks, and
  15. // internal/amneziawgnet.Manager's automatic forwarder/relay wiring), it's
  16. // an ordinary Xray user, and XrayTrafficJob's existing, protocol-blind
  17. // stats/online-status polling already picks it up for free.
  18. type AmneziaWGJob struct {
  19. inboundService service.InboundService
  20. }
  21. // NewAmneziaWGJob creates a new AmneziaWG reconcile job instance.
  22. func NewAmneziaWGJob() *AmneziaWGJob {
  23. return new(AmneziaWGJob)
  24. }
  25. // Run reconciles desired AmneziaWG inbounds with running embedded interfaces.
  26. func (j *AmneziaWGJob) Run() {
  27. desired, err := j.inboundService.DesiredAmneziaWGInstances()
  28. if err != nil {
  29. logger.Warning("amneziawg job: get desired instances failed:", err)
  30. return
  31. }
  32. wanted := make([]amneziawgnet.Desired, 0, len(desired))
  33. for _, inst := range desired {
  34. wanted = append(wanted, amneziawgnet.Desired{
  35. Instance: inst,
  36. Options: amneziawgnet.DeviceOptions{
  37. HeaderProtectionKey: inst.Obfuscation.HeaderProtectionKey,
  38. ContentPaddingAddition: inst.Obfuscation.ContentPaddingAddition,
  39. RekeyAfterTime: inst.Obfuscation.RekeyAfterTime,
  40. RekeyTimeout: inst.Obfuscation.RekeyTimeout,
  41. RejectAfterTime: inst.Obfuscation.RejectAfterTime,
  42. KeepaliveTimeout: inst.Obfuscation.KeepaliveTimeout,
  43. MaxHandshakeAttempts: inst.Obfuscation.MaxHandshakeAttempts,
  44. RandomTrailers: inst.Obfuscation.RandomTrailers,
  45. DisableCookies: inst.Obfuscation.DisableCookies,
  46. },
  47. })
  48. }
  49. amneziawgnet.GetManager().Reconcile(wanted)
  50. }