fix(portforward): trigger after VPN restart

This commit is contained in:
Quentin McGaw
2023-09-28 14:00:58 +00:00
parent a194906bdd
commit d4df87286e
10 changed files with 112 additions and 79 deletions

View File

@@ -5,7 +5,7 @@ import (
"errors"
)
func (l *Loop) cleanup(vpnProvider string) {
func (l *Loop) cleanup() {
for _, vpnPort := range l.vpnInputPorts {
err := l.fw.RemoveAllowedPort(context.Background(), vpnPort)
if err != nil {
@@ -18,7 +18,7 @@ func (l *Loop) cleanup(vpnProvider string) {
l.logger.Error("clearing public IP data: " + err.Error())
}
err = l.stopPortForwarding(vpnProvider)
err = l.stopPortForwarding()
if err != nil {
portForwardingAlreadyStopped := errors.Is(err, context.Canceled)
if !portForwardingAlreadyStopped {

View File

@@ -7,7 +7,7 @@ import (
"github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/models"
"github.com/qdm12/gluetun/internal/netlink"
portforward "github.com/qdm12/gluetun/internal/portforward/service"
portforward "github.com/qdm12/gluetun/internal/portforward"
"github.com/qdm12/gluetun/internal/provider"
"github.com/qdm12/gluetun/internal/provider/utils"
)

View File

@@ -5,7 +5,7 @@ import (
"errors"
"fmt"
"github.com/qdm12/gluetun/internal/configuration/settings"
"github.com/qdm12/gluetun/internal/portforward"
"github.com/qdm12/gluetun/internal/portforward/service"
pfutils "github.com/qdm12/gluetun/internal/provider/utils"
)
@@ -23,21 +23,20 @@ func getPortForwarder(provider Provider, providers Providers, //nolint:ireturn
}
func (l *Loop) startPortForwarding(data tunnelUpData) (err error) {
partialUpdate := service.Settings{
PortForwarder: data.portForwarder,
Interface: data.vpnIntf,
ServerName: data.serverName,
VPNProvider: data.portForwarder.Name(),
partialUpdate := portforward.Settings{
VPNIsUp: ptrTo(true),
Service: service.Settings{
PortForwarder: data.portForwarder,
Interface: data.vpnIntf,
ServerName: data.serverName,
},
}
return l.portForward.UpdateWith(partialUpdate)
}
func (l *Loop) stopPortForwarding(vpnProvider string) (err error) {
partialUpdate := service.Settings{
VPNProvider: vpnProvider,
UserSettings: settings.PortForwarding{
Enabled: ptrTo(false),
},
func (l *Loop) stopPortForwarding() (err error) {
partialUpdate := portforward.Settings{
VPNIsUp: ptrTo(false),
}
return l.portForward.UpdateWith(partialUpdate)
}

View File

@@ -71,7 +71,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
case <-tunnelReady:
go l.onTunnelUp(openvpnCtx, tunnelUpData)
case <-ctx.Done():
l.cleanup(portForwarder.Name())
l.cleanup()
openvpnCancel()
<-waitError
close(waitError)
@@ -79,7 +79,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
case <-l.stop:
l.userTrigger = true
l.logger.Info("stopping")
l.cleanup(portForwarder.Name())
l.cleanup()
openvpnCancel()
<-waitError
// do not close waitError or the waitError
@@ -92,7 +92,7 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) {
case err := <-waitError: // unexpected error
l.statusManager.Lock() // prevent SetStatus from running in parallel
l.cleanup(portForwarder.Name())
l.cleanup()
openvpnCancel()
l.statusManager.SetStatus(constants.Crashed)
l.logAndWait(ctx, err)