Fix race between punchback and lighthouse handler reset (#566)
This commit is contained in:
parent
b358bbab80
commit
94aaab042f
|
@ -45,6 +45,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||||
will immediately switch to a preferred remote address after the reception of
|
will immediately switch to a preferred remote address after the reception of
|
||||||
a handshake packet (instead of waiting until 1,000 packets have been sent).
|
a handshake packet (instead of waiting until 1,000 packets have been sent).
|
||||||
(#532)
|
(#532)
|
||||||
|
|
||||||
|
- A race condition when `punchy.respond` is enabled and ensures the correct
|
||||||
|
vpn ip is sent a punch back response in highly queried node. (#566)
|
||||||
|
|
||||||
## [1.4.0] - 2021-05-11
|
## [1.4.0] - 2021-05-11
|
||||||
|
|
||||||
|
|
|
@ -632,15 +632,16 @@ func (lhh *LightHouseHandler) handleHostPunchNotification(n *NebulaMeta, vpnIp i
|
||||||
// of a double nat or other difficult scenario, this may help establish
|
// of a double nat or other difficult scenario, this may help establish
|
||||||
// a tunnel.
|
// a tunnel.
|
||||||
if lhh.lh.punchBack {
|
if lhh.lh.punchBack {
|
||||||
|
queryVpnIp := iputil.VpnIp(n.Details.VpnIp)
|
||||||
go func() {
|
go func() {
|
||||||
time.Sleep(time.Second * 5)
|
time.Sleep(time.Second * 5)
|
||||||
if lhh.l.Level >= logrus.DebugLevel {
|
if lhh.l.Level >= logrus.DebugLevel {
|
||||||
lhh.l.Debugf("Sending a nebula test packet to vpn ip %s", iputil.VpnIp(n.Details.VpnIp))
|
lhh.l.Debugf("Sending a nebula test packet to vpn ip %s", queryVpnIp)
|
||||||
}
|
}
|
||||||
//NOTE: we have to allocate a new output buffer here since we are spawning a new goroutine
|
//NOTE: we have to allocate a new output buffer here since we are spawning a new goroutine
|
||||||
// for each punchBack packet. We should move this into a timerwheel or a single goroutine
|
// for each punchBack packet. We should move this into a timerwheel or a single goroutine
|
||||||
// managed by a channel.
|
// managed by a channel.
|
||||||
w.SendMessageToVpnIp(header.Test, header.TestRequest, iputil.VpnIp(n.Details.VpnIp), []byte(""), make([]byte, 12, 12), make([]byte, mtu))
|
w.SendMessageToVpnIp(header.Test, header.TestRequest, queryVpnIp, []byte(""), make([]byte, 12, 12), make([]byte, mtu))
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue