Files
gluetun/internal/vpn/cleanup.go
T
2026-03-08 16:06:16 +00:00

58 lines
1.4 KiB
Go

package vpn
import (
"context"
"errors"
"strings"
"github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/constants/vpn"
)
func (l *Loop) cleanup() {
settings := l.GetSettings()
var err error
commandString := strings.ReplaceAll(*settings.DownCommand, "{{VPN_INTERFACE}}", getVPNInterface(settings))
err = l.cmder.RunAndLog(context.Background(), commandString, l.logger)
if err != nil {
l.logger.Error("failed to run VPN down command: " + err.Error())
}
for _, vpnPort := range l.vpnInputPorts {
err := l.fw.RemoveAllowedPort(context.Background(), vpnPort)
if err != nil {
l.logger.Error("cannot remove allowed input port from firewall: " + err.Error())
}
}
err = l.publicip.ClearData()
if err != nil {
l.logger.Error("clearing public IP data: " + err.Error())
}
err = l.stopPortForwarding()
if err != nil {
portForwardingAlreadyStopped := errors.Is(err, context.Canceled)
if !portForwardingAlreadyStopped {
l.logger.Error("stopping port forwarding: " + err.Error())
}
}
err = l.boringPoll.Stop()
if err != nil {
l.logger.Error("stopping boring poll: " + err.Error())
}
}
func getVPNInterface(settings settings.VPN) string {
switch settings.Type {
case vpn.OpenVPN:
return settings.OpenVPN.Interface
case vpn.Wireguard:
return settings.Wireguard.Interface
default:
panic("invalid VPN type: " + settings.Type)
}
}