wireguard.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package config
  2. import (
  3. "encoding/base64"
  4. "encoding/json"
  5. "fmt"
  6. "goseg/defaults"
  7. "goseg/structs"
  8. "os"
  9. "path/filepath"
  10. "golang.zx2c4.com/wireguard/wgctrl/wgtypes"
  11. )
  12. // write a hardcoded default container conf to disk
  13. func CreateDefaultWGConf() error {
  14. defaultConfig := defaults.WgConfig
  15. path := filepath.Join(BasePath, "settings", "wireguard.json")
  16. if err := os.MkdirAll(filepath.Dir(path), os.ModePerm); err != nil {
  17. return err
  18. }
  19. file, err := os.Create(path)
  20. if err != nil {
  21. return err
  22. }
  23. defer file.Close()
  24. encoder := json.NewEncoder(file)
  25. encoder.SetIndent("", " ")
  26. if err := encoder.Encode(&defaultConfig); err != nil {
  27. return err
  28. }
  29. return nil
  30. }
  31. // write a container conf to disk from version server info
  32. func UpdateWGConf() error {
  33. conf := Conf()
  34. releaseChannel := conf.UpdateBranch
  35. wgRepo := VersionInfo.Wireguard.Repo
  36. amdHash := VersionInfo.Wireguard.Amd64Sha256
  37. armHash := VersionInfo.Wireguard.Arm64Sha256
  38. newConfig := structs.WgConfig{
  39. WireguardName: "wireguard",
  40. WireguardVersion: releaseChannel,
  41. Repo: wgRepo,
  42. Amd64Sha256: amdHash,
  43. Arm64Sha256: armHash,
  44. CapAdd: []string{"NET_ADMIN", "SYS_MODULE"},
  45. Volumes: []string{"/lib/modules:/lib/modules"},
  46. Sysctls: struct {
  47. NetIpv4ConfAllSrcValidMark int `json:"net.ipv4.conf.all.src_valid_mark"`
  48. }{
  49. NetIpv4ConfAllSrcValidMark: 1,
  50. },
  51. }
  52. path := filepath.Join(BasePath, "settings", "wireguard.json")
  53. if err := os.MkdirAll(filepath.Dir(path), os.ModePerm); err != nil {
  54. return err
  55. }
  56. file, err := os.Create(path)
  57. if err != nil {
  58. return err
  59. }
  60. defer file.Close()
  61. encoder := json.NewEncoder(file)
  62. encoder.SetIndent("", " ")
  63. if err := encoder.Encode(&newConfig); err != nil {
  64. return err
  65. }
  66. return nil
  67. }
  68. // wireguard keypair gen
  69. func WgKeyGen() (privateKeyStr string, publicKeyStr string, err error) {
  70. privateKey, err := wgtypes.GeneratePrivateKey()
  71. if err != nil {
  72. return "", "", fmt.Errorf("failed to generate private key: %v", err)
  73. }
  74. // derive pubkey and use startram encoding
  75. publicKey := base64.StdEncoding.EncodeToString([]byte(privateKey.PublicKey().String() + "\n"))
  76. return privateKey.String(), publicKey, nil
  77. }