mirror of
https://github.com/syncthing/syncthing.git
synced 2024-11-16 10:28:49 -07:00
lib/connections: Only announce punchable nats (fixes #4519)
GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4523
This commit is contained in:
parent
6cf01c1d30
commit
0518a92cdb
@ -24,6 +24,8 @@ import (
|
|||||||
"github.com/syncthing/syncthing/lib/nat"
|
"github.com/syncthing/syncthing/lib/nat"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const stunRetryInterval = 5 * time.Minute
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
factory := &kcpListenerFactory{}
|
factory := &kcpListenerFactory{}
|
||||||
for _, scheme := range []string{"kcp", "kcp4", "kcp6"} {
|
for _, scheme := range []string{"kcp", "kcp4", "kcp6"} {
|
||||||
@ -246,6 +248,13 @@ func (t *kcpListener) stunRenewal(listener net.PacketConn) {
|
|||||||
if oldType != natType {
|
if oldType != natType {
|
||||||
l.Infof("%s detected NAT type: %s", t.uri, natType)
|
l.Infof("%s detected NAT type: %s", t.uri, natType)
|
||||||
t.nat.Store(natType)
|
t.nat.Store(natType)
|
||||||
|
oldType = natType
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can't punch through this one, so no point doing keepalives
|
||||||
|
// and such, just try again in a minute and hope that the NAT type changes.
|
||||||
|
if !isPunchable(natType) {
|
||||||
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@ -285,12 +294,11 @@ func (t *kcpListener) stunRenewal(listener net.PacketConn) {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
oldType = natType
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// We failed to contact all provided stun servers, chillout for a while.
|
// We failed to contact all provided stun servers or the nat is not punchable.
|
||||||
time.Sleep(time.Minute)
|
// Chillout for a while.
|
||||||
|
time.Sleep(stunRetryInterval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -312,3 +320,7 @@ func (f *kcpListenerFactory) New(uri *url.URL, cfg *config.Wrapper, tlsCfg *tls.
|
|||||||
func (kcpListenerFactory) Enabled(cfg config.Configuration) bool {
|
func (kcpListenerFactory) Enabled(cfg config.Configuration) bool {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isPunchable(natType stun.NATType) bool {
|
||||||
|
return natType == stun.NATNone || natType == stun.NATPortRestricted || natType == stun.NATRestricted || natType == stun.NATFull
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user