Skip to content

Commit

Permalink
server: add periodic renewal of port forwarding
Browse files Browse the repository at this point in the history
The check prevented the creation of port forwardings which were assumed
to be present already. After this change the port forwardings which
might have been removed from the NAT device can be re-created.
  • Loading branch information
frennkie committed Apr 13, 2019
1 parent b07499f commit a27ac66
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
4 changes: 0 additions & 4 deletions nat/pmp.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,6 @@ func (p *PMP) AddPortMapping(port uint16) error {
p.forwardedPortsMtx.Lock()
defer p.forwardedPortsMtx.Unlock()

if _, exists := p.forwardedPorts[port]; exists {
return nil
}

_, err := p.client.AddPortMapping("tcp", int(port), int(port), 0)
if err != nil {
return err
Expand Down
4 changes: 0 additions & 4 deletions nat/upnp.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,6 @@ func (u *UPnP) AddPortMapping(port uint16) error {
u.forwardedPortsMtx.Lock()
defer u.forwardedPortsMtx.Unlock()

if _, exists := u.forwardedPorts[port]; exists {
return nil
}

if err := u.device.Forward(port, ""); err != nil {
return err
}
Expand Down
15 changes: 15 additions & 0 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -1145,6 +1145,21 @@ out:
continue
}

// Periodically renew the NAT port forwarding.
for _, port := range forwardedPorts {
err := s.natTraversal.AddPortMapping(port)
if err != nil {
srvrLog.Warnf("Unable to automatically "+
"re-create port forwarding using %s: %v",
s.natTraversal.Name(), err)
} else {
srvrLog.Debugf("Automatically re-created "+
"forwarding for port %d using %s to "+
"advertise external IP",
port, s.natTraversal.Name())
}
}

if ip.Equal(s.lastDetectedIP) {
continue
}
Expand Down

0 comments on commit a27ac66

Please sign in to comment.