Compare commits

..

1 Commits

Author SHA1 Message Date
Quentin McGaw b00279bc61 hotfix(portforwarding): allow setting ports when no custom code is running 2026-07-29 06:06:09 +00:00
6 changed files with 5 additions and 25 deletions
-3
View File
@@ -99,7 +99,6 @@ func (l *Loop) run(runCtx context.Context, runDone chan<- struct{},
case partialUpdate := <-updateTrigger: case partialUpdate := <-updateTrigger:
updatedSettings, err := l.settings.updateWith(partialUpdate, *l.settings.VPNIsUp) updatedSettings, err := l.settings.updateWith(partialUpdate, *l.settings.VPNIsUp)
if err != nil { if err != nil {
l.logger.Debug(fmt.Sprintf("port forward loop: run: updateWith error %v", err))
updateResult <- err updateResult <- err
continue continue
} }
@@ -137,7 +136,6 @@ func (l *Loop) run(runCtx context.Context, runDone chan<- struct{},
if err != nil { if err != nil {
err = fmt.Errorf("starting port forwarding service: %w", err) err = fmt.Errorf("starting port forwarding service: %w", err)
} }
l.logger.Debug(fmt.Sprintf("port forward loop: Start: error is %v", err))
updateResult <- err updateResult <- err
} else if err != nil { } else if err != nil {
// Log the error and schedule a retry // Log the error and schedule a retry
@@ -152,7 +150,6 @@ func (l *Loop) UpdateWith(partialUpdate Settings) (err error) {
case l.updateTrigger <- partialUpdate: case l.updateTrigger <- partialUpdate:
select { select {
case err = <-l.updatedResult: case err = <-l.updatedResult:
l.logger.Debug(fmt.Sprintf("port forward loop: UpdateWith: received error %v", err))
return err return err
case <-l.runCtx.Done(): case <-l.runCtx.Done():
return l.runCtx.Err() return l.runCtx.Err()
+3 -1
View File
@@ -6,6 +6,7 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"slices" "slices"
"strings"
"sync" "sync"
) )
@@ -60,7 +61,8 @@ func (s *Service) SetPortsForwarded(ctx context.Context, ports []uint16) (err er
s.portMutex.Lock() s.portMutex.Lock()
defer s.portMutex.Unlock() defer s.portMutex.Unlock()
if s.settings.PortForwarder != nil { hasPortForwardingCodeRunning := !strings.HasSuffix(s.settings.PortForwarder.Name(), "[not supported]")
if hasPortForwardingCodeRunning {
return errors.New("setting port forwarded at runtime is not supported with internally running port forwarding code") return errors.New("setting port forwarded at runtime is not supported with internally running port forwarding code")
} }
-2
View File
@@ -123,9 +123,7 @@ func (s *Service) onNewPorts(ctx context.Context, internalToExternalPorts map[ui
} }
} }
s.logger.Debug(fmt.Sprintf("writePortForwardedFile with externalPorts: %v", externalPorts))
err = s.writePortForwardedFile(externalPorts) err = s.writePortForwardedFile(externalPorts)
s.logger.Debug(fmt.Sprintf("writing port file: error is %v", err))
if err != nil { if err != nil {
_ = s.cleanup() _ = s.cleanup()
return fmt.Errorf("writing port file: %w", err) return fmt.Errorf("writing port file: %w", err)
-1
View File
@@ -58,7 +58,6 @@ func (s *Service) cleanup() (err error) {
s.ports = nil s.ports = nil
s.logger.Debug("writePortForwardedFile in cleanup")
err = s.writePortForwardedFile(nil) err = s.writePortForwardedFile(nil)
if err != nil { if err != nil {
return fmt.Errorf("clearing port file: %w", err) return fmt.Errorf("clearing port file: %w", err)
@@ -133,20 +133,6 @@ func (p *Provider) KeepPortForward(ctx context.Context,
case <-timer.C: case <-timer.C:
} }
_, externalIPv4Address, err := client.ExternalAddress(ctx, objects.Gateway)
if err != nil {
switch {
case strings.HasSuffix(err.Error(), "connection refused"):
err = fmt.Errorf("%w - make sure you have +pmp at the end of your OpenVPN username "+
"or that your Wireguard key is set to work with PMP", err)
case strings.Contains(err.Error(), "i/o timeout"):
err = fmt.Errorf("%w - make sure FIREWALL_OUTBOUND_SUBNETS does not conflict with "+
"the VPN gateway ip address %s", err, objects.Gateway)
}
logger.Error(fmt.Sprintf("getting external IPv4 address: %v", err))
}
logger.Debug("gateway external IPv4 address is " + externalIPv4Address.String())
objects.Logger.Debug("refreshing forwarded ports since 45 seconds have elapsed") objects.Logger.Debug("refreshing forwarded ports since 45 seconds have elapsed")
const lifetime = 60 * time.Second const lifetime = 60 * time.Second
for internalPort, externalPort := range p.internalToExternalPorts { for internalPort, externalPort := range p.internalToExternalPorts {
+2 -4
View File
@@ -34,9 +34,7 @@ func (l *Loop) startPortForwarding(data tunnelUpData) (err error) {
Password: data.password, Password: data.password,
}, },
} }
err = l.portForward.UpdateWith(partialUpdate) return l.portForward.UpdateWith(partialUpdate)
l.logger.Debug(fmt.Sprintf("vpn loop: start port forwarding: error is %v", err))
return err
} }
func (l *Loop) stopPortForwarding() (err error) { func (l *Loop) stopPortForwarding() (err error) {
@@ -57,7 +55,7 @@ func newNoPortForwarder(providerName string) *noPortForwarder {
} }
func (n *noPortForwarder) Name() string { func (n *noPortForwarder) Name() string {
return n.providerName return n.providerName + " [not supported]"
} }
func (n *noPortForwarder) PortForward(context.Context, pfutils.PortForwardObjects) ( func (n *noPortForwarder) PortForward(context.Context, pfutils.PortForwardObjects) (