I have a device running Syncthing smoothly, meaning that the port (22000) is automatically mapped (as I can see in the router interface). And the direct connection from other devices to this one works as well (even if the second device did not map a port itself).
When I run the syncthing-relay however, it fails with
main.go:214: Timeout out waiting for NAT mapping.
Failed to join https://relays.syncthing.net/endpoint: request or check error
and indeed the ports (22067 and 22070) do not appear in the router interface.
Mapping the ports manually through something like:
upnpc -e strelay1 -a “$ip” 22070 22070 TCP 3600 upnpc -e strelay2 -a “$ip” 22067 22067 TCP 3600
(upnpc is from the miniupnpc package)
makes it work as expected (AFAICT).
I would have expected both syncthing and strelay to succeed and fail the same, however it seems that the logic to map the ports is different. Is that the case? Shouldn’t they behave the same?
Note that due to my hackish network configuration (I use a second router as a relay between my device and the main router where the mapping has to occur), upnpc still returns an error at the end and fails to check that the mapping is indeed there:
GetSpecificPortMappingEntry() failed with code 606 (Action not authorized)
but it still works.