Add more sensible controls

This commit is contained in:
Owen 2025-04-13 21:28:38 -04:00
parent 027d9a059f
commit 6a146ed371
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
2 changed files with 17 additions and 8 deletions

14
main.go
View file

@ -358,6 +358,8 @@ var (
updownScript string
interfaceName string
generateAndSaveKeyTo string
rm bool
acceptClients bool
)
func main() {
@ -371,6 +373,8 @@ func main() {
updownScript = os.Getenv("UPDOWN_SCRIPT")
interfaceName = os.Getenv("INTERFACE")
generateAndSaveKeyTo = os.Getenv("GENERATE_AND_SAVE_KEY_TO")
rm = os.Getenv("RM") == "true"
acceptClients = os.Getenv("ACCEPT_CLIENTS") == "true"
if endpoint == "" {
flag.StringVar(&endpoint, "endpoint", "", "Endpoint of your pangolin server")
@ -397,8 +401,10 @@ func main() {
flag.StringVar(&interfaceName, "interface", "wg1", "Name of the WireGuard interface")
}
if generateAndSaveKeyTo == "" {
flag.StringVar(&generateAndSaveKeyTo, "generateAndSaveKeyTo", "", "Path to save generated private key")
flag.StringVar(&generateAndSaveKeyTo, "generateAndSaveKeyTo", "/tmp/newtkey", "Path to save generated private key")
}
flag.BoolVar(&rm, "rm", true, "Remove the WireGuard interface")
flag.BoolVar(&acceptClients, "accept-clients", false, "Accept clients on the WireGuard interface")
// do a --version check
version := flag.Bool("version", false, "Print the version")
@ -445,7 +451,7 @@ func main() {
var wgData WgData
var wgTesterServer *wgtester.Server
if generateAndSaveKeyTo != "" {
if acceptClients {
// make sure we are running on linux
if runtime.GOOS != "linux" {
logger.Fatal("Tunnel management is only supported on Linux right now!")
@ -466,7 +472,7 @@ func main() {
if err != nil {
logger.Fatal("Failed to create WireGuard service: %v", err)
}
defer wgService.Close()
defer wgService.Close(rm)
wgTesterServer = wgtester.NewServer("0.0.0.0", wgService.Port, id) // TODO: maybe make this the same ip of the wg server?
err := wgTesterServer.Start()
@ -719,7 +725,7 @@ persistent_keepalive_interval=5`, fixKey(fmt.Sprintf("%s", privateKey)), fixKey(
dev.Close()
if wgService != nil {
wgService.Close()
wgService.Close(rm)
}
if wgTesterServer != nil {

View file

@ -196,13 +196,15 @@ func NewWireGuardService(interfaceName string, mtu int, generateAndSaveKeyTo str
return service, nil
}
func (s *WireGuardService) Close() {
func (s *WireGuardService) Close(rm bool) {
s.wgClient.Close()
// Remove the WireGuard interface
if rm {
if err := s.removeInterface(); err != nil {
logger.Error("Failed to remove WireGuard interface: %v", err)
}
}
}
func (s *WireGuardService) SetServerPubKey(serverPubKey string) {
s.serverPubKey = serverPubKey
@ -772,7 +774,8 @@ func (s *WireGuardService) reportPeerBandwidth() error {
func (s *WireGuardService) sendUDPHolePunch(serverAddr string) error {
if s.serverPubKey == "" || s.token == "" {
return fmt.Errorf("server public key or token is not set")
logger.Debug("Server public key or token not set, skipping UDP hole punch")
return nil
}
// Parse server address