Nextcloud Talk Video Call drops after 2-3 minutes

Hello everyone!

I’m fighting with my setup for nextcloud talk and hope someone here can point me in the right direction. My setup in a nutshell:

Nextcloud (20.0.4) and coturn (4.5.1.3) are both hosted on the same server. Server is a dedicated server hosted in a data center with static IP, directly connected to the internet. Configuration of coturn is pretty much according to the manual:

listening-port=3478
listening-ip=SERVER_IP
relay-ip=SERVER_IP
verbose
fingerprint
use-auth-secret
static-auth-secret=theSecret
realm=cloud.example.com
total-quota=0
bps-capacity=0
no-tls
no-dtls
stale-nonce=600
no-stdout-log
log-file=/var/log/turnserver/turn.log
simple-log
no-multicast-peers

What I’m seeing is that I make a call with Nextcloud Talk, the call connects and I have video and audio for about 2-3 minutes. Then the call drops and tries to reconnect fail.

This is what I’m seeing in the coturn logs when it happens:

170: session 007000000000000002: usage: realm=<cloud-example-com>, username=foo_bar, rp=417, rb=352832, sp=1631, sb=1425612
170: session 007000000000000002: peer usage: realm=<cloud-example-com>, username=foo_bar, rp=1631, rb=1298659, sp=417, sb=333841
172: session 002000000000000003: refreshed, realm=<cloud-example-com>, username=foo_bar, lifetime=0
172: session 002000000000000003: realm <cloud-example-com> user foo_bar: incoming packet REFRESH processed, success
172: session 007000000000000002: refreshed, realm=<cloud-example-com>, username=foo_bar, lifetime=0
172: session 007000000000000002: realm <cloud-example-com> user foo_bar: incoming packet REFRESH processed, success
172: session 014000000000000001: refreshed, realm=<cloud-example-com>, username=foo_bar, lifetime=0
172: session 014000000000000001: realm <cloud-example-com> user foo_bar: incoming packet REFRESH processed, success
172: session 014000000000000001: TCP socket closed remotely PUBLIC_IP_1:39715
172: session 014000000000000001: usage: realm=<cloud-example-com>, username=foo_bar, rp=55, rb=7604, sp=6, sb=584
172: session 014000000000000001: peer usage: realm=<cloud-example-com>, username=foo_bar, rp=0, rb=0, sp=49, sb=4704
172: session 013000000000000001: refreshed, realm=<cloud-example-com>, username=foo_bar, lifetime=0
172: session 014000000000000001: closed (2nd stage), user foo_bar realm <cloud-example-com> origin <>, local SERVER_IP:3478, remote PUBLIC_IP_1:39715, reason: TCP connection closed by client (callback)
172: session 013000000000000001: realm <cloud-example-com> user foo_bar: incoming packet REFRESH processed, success
172: session 014000000000000001: delete: realm=<cloud-example-com>, username=foo_bar
172: session 014000000000000001: peer PUBLIC_IP_2 deleted
172: session 014000000000000001: peer SERVER_IP deleted
172: session 014000000000000001: peer PUBLIC_IP_3 deleted
172: session 013000000000000001: TCP socket closed remotely PUBLIC_IP_1:35829
172: session 013000000000000001: usage: realm=<cloud-example-com>, username=foo_bar, rp=55, rb=7604, sp=6, sb=584
172: session 013000000000000001: peer usage: realm=<cloud-example-com>, username=foo_bar, rp=0, rb=0, sp=49, sb=4704
172: session 013000000000000001: closed (2nd stage), user foo_bar realm <cloud-example-com> origin <>, local SERVER_IP:3478, remote PUBLIC_IP_1:35829, reason: TCP connection closed by client (callback)
172: session 013000000000000001: delete: realm=<cloud-example-com>, username=foo_bar
172: session 013000000000000001: peer PUBLIC_IP_2 deleted
172: session 013000000000000001: peer SERVER_IP deleted
172: session 013000000000000001: peer PUBLIC_IP_3 deleted
173: session 002000000000000003: usage: realm=<cloud-example-com>, username=foo_bar, rp=55, rb=7604, sp=6, sb=584
173: session 002000000000000003: peer usage: realm=<cloud-example-com>, username=foo_bar, rp=0, rb=0, sp=49, sb=4704
173: session 002000000000000003: closed (2nd stage), user foo_bar realm <cloud-example-com> origin <>, local SERVER_IP:3478, remote PUBLIC_IP_1:40572, reason: allocation timeout
173: session 002000000000000003: delete: realm=<cloud-example-com>, username=foo_bar
173: session 002000000000000003: peer PUBLIC_IP_2 deleted
173: session 002000000000000003: peer SERVER_IP deleted
173: session 002000000000000003: peer PUBLIC_IP_3 deleted
173: session 007000000000000002: usage: realm=<cloud-example-com>, username=foo_bar, rp=177, rb=105736, sp=1641, sb=1372756
173: session 007000000000000002: peer usage: realm=<cloud-example-com>, username=foo_bar, rp=1640, rb=1245034, sp=176, sb=97594
173: session 007000000000000002: closed (2nd stage), user foo_bar realm <cloud-example-com> origin <>, local SERVER_IP:3478, remote PUBLIC_IP_1:40181, reason: allocation timeout
173: session 007000000000000002: delete: realm=<cloud-example-com>, username=foo_bar
173: session 007000000000000002: peer PUBLIC_IP_2 deleted
173: session 007000000000000002: peer SERVER_IP deleted
173: session 007000000000000002: peer PUBLIC_IP_3 deleted

Reconnection attempts pretty much follow the same picture, I see
ALLOCATE processed, success
CREATE_PERMISSION processed, success
REFRESH processed, success
TCP socket closed remotely

I don’t really know what to look for here :frowning:
I dropped my firewall rules and tried without any to see if it’s a firewall issue, but the issue remained so I doubt is has anything to do with my firewall settings.

Any pointers here would be much appreciated.

Got debugging output from firefox, looks like one side of the call is getting refresh timeouts:

(stun/INFO) STUN-CLIENT(consent): Received response; processing

(ice/INFO) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): Consent refreshed

(stun/INFO) STUN-CLIENT(consent): Timed out

(ice/INFO) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): A single consent refresh request timed out

(ice/WARNING) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): component disconnected

(stun/INFO) STUN-CLIENT(consent): Timed out

(ice/INFO) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): A single consent refresh request timed out

(stun/INFO) STUN-CLIENT(consent): Timed out

(ice/INFO) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): A single consent refresh request timed out

(stun/INFO) STUN-CLIENT(consent): Timed out

(ice/INFO) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): A single consent refresh request timed out

(ice/WARNING) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): Consent refresh final time out

(ice/INFO) ICE(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj))/STREAM(PC:1608903334135000 (id=51539607625 url=cloud-example-com/call/kgv6kcmj) transport-id=transport_0 - 84715217:0fa3fc1706bba69b38c1579da8e561ff)/COMP(1): Consent refresh failed