webrtc-rs / webrtc

A pure Rust implementation of WebRTC
https://webrtc.rs
Apache License 2.0
4.08k stars 363 forks source link

If TURN channel is inactive, it times out and is never re-established #542

Open marcbrevoort-cyberhive opened 7 months ago

marcbrevoort-cyberhive commented 7 months ago

As it says in the title, channels appear to time out after some time of inactivity (~15 minutes). Which is probably fine.

However, when traffic occurs again later on, this always occurs using SendIndication/DataIndication (i.e. plain permissions based packets) and another channel is never re-established.

While data can still flow between two peers without a channel, it is less efficient.

marcbrevoort-cyberhive commented 7 months ago

When this occurs, the following can be seen in the logs

121625  2024-03-07 08:52:05.834850  192.168.0.100   18.132.207.60   STUN    198 Channel-Bind Request XOR-PEER-ADDRESS: 90.206.45.61:18025 ChannelNumber=0x4001 user: 1709887601:74134842-07f3-4d16-a5c3-33ea4c52ab03 realm: eturnal.net with nonce
121626  2024-03-07 08:52:05.857553  18.132.207.60   192.168.0.100   STUN    126 Channel-Bind Error Response realm: eturnal.net with nonce error-code: 438 (Stale Nonce) Stale Nonce

and there is no effort made to recover.

The client should retry, using the NONCE provided in the response (as per RFC5389).