WebRTC ICE Tester

Run a trickle ICE test in your browser and see exactly which candidates your STUN and TURN servers return.

ICE (Interactive Connectivity Establishment) is how two WebRTC peers agree on a network path between them, trying a direct connection first and falling back to a TURN relay when one isn't possible. This tool runs a trickle ICE test against any STUN or TURN server you give it and shows every candidate your browser gathers, with the errors spelled out instead of left as raw codes.

Nothing here leaves your browser except what WebRTC itself sends to the servers you list below - exactly like a real call. Meetrix never receives your server URLs, usernames or credentials, and nothing is saved: no cookies, no localStorage, no URL parameters, not even between runs.

Preset:
ICE transport policy

What the candidate types mean

Type What it is What it implies
host Your device's own local network address. Always present. On its own, only proves two devices can connect if they're on the same network.
srflx (server reflexive) Your public IP and port, as seen by a STUN server. Confirms STUN is reachable and NAT traversal has a chance of working for a direct connection.
prflx (peer reflexive) Discovered mid-connection when a peer receives traffic from an address it didn't already have. Normal during connectivity checks between two live peers - you generally won't see this from a single-sided test like this one.
relay An address on your TURN server that forwards traffic on your behalf. Confirms TURN is working. Under a Relay only test, this is the only type you should see.

How to test a TURN server

  1. Add your TURN server's URL, using turn: for plain UDP/TCP or turns: for TLS.
  2. Enter the username and credential your TURN server issues. If you use time-limited credentials, generate a fresh pair right before testing.
  3. Set the ICE transport policy to Relay only.
  4. Click Run ICE gathering.
  5. Confirm at least one relay candidate appears in the results table - that proves TURN can carry a call on its own.
  6. If no relay candidate appears, check the error list and read "No relay candidates with TURN configured" below.

Common ICE and TURN problems

  • No relay candidates with TURN configured: the usual causes are wrong credentials, a time-limited credential that's already expired, the relay port range blocked by a firewall or cloud security group, or TURN listening on a different transport (UDP vs TCP) than the one you requested. Run again with Relay only selected to isolate the problem to TURN alone.
  • 401 unauthorized from TURN: the username or credential is wrong, or your server uses time-limited credentials that have expired. Coturn's use-auth-secret mode generates a credential as an HMAC of a timestamp - if your server's clock has drifted, credentials can expire before you finish typing them in.
  • Time-limited credentials failing intermittently: check your TURN server's system clock (NTP drift is the most common cause) and the TTL you're generating credentials with. A TTL of a few seconds is too short for a human to test manually - generate a fresh credential immediately before running this tool.
  • turns: failing on certificate validation: turns: connects over TLS, which means the hostname you use has to match the certificate the server presents. Connecting to a bare IP address, an expired certificate, or a self-signed certificate the browser doesn't trust will all fail here - use a proper hostname with a valid certificate.
  • Works on UDP but not TCP, or blocked entirely: add a row with ?transport=tcp and test it on its own. Some corporate networks allow outbound TCP on common ports (443) but block UDP and non-standard TCP ports outright - if your TURN server only listens on a blocked port, TCP relay traffic will never arrive.
  • Candidates gather but calls still fail: if this test returns healthy host, srflx and relay candidates but your actual application still can't connect, ICE isn't the problem. Check your signalling layer (SDP offer/answer exchange, WebSocket connection, session negotiation) instead.
  • Only .local addresses appear: Chrome (and other Chromium browsers) replace your real local IP in host candidates with a randomly generated .local mDNS hostname, so a website can't fingerprint your local network just by starting a peer connection. This is intentional privacy behaviour, not a bug, and it doesn't affect whether the candidate actually works for a call.
  • Coturn behind NAT without external-ip set: if your Coturn server itself sits behind a NAT (common on cloud VMs with a private and a public IP), it needs external-ip=<public-ip>/<private-ip> in turnserver.conf. Without it, Coturn advertises its private IP as the relay address, which is unreachable from the internet - candidates will appear to gather but the relay address won't actually work.
  • Works locally, fails in production: almost always a firewall, cloud security group, or network ACL blocking the TURN port or the relay port range in the production environment but not your local network. Run this test from the same network your users will be on, and check that the relay port range is open both inbound and outbound.

Once ICE looks healthy, verify your signalling and media stack end to end. If a call still won't connect, check the SDP itself with the SDP inspector - missing ICE credentials or a missing DTLS fingerprint will break a connection even when STUN and TURN both work fine. If you're troubleshooting a live deployment rather than a single server, browse Meetrix's guide to SIP and Jitsi audio infrastructure , check out Meetrix's self-hosted Coturn AMI if you need to stand up your own TURN server, or browse all Meetrix features. If it's your own camera, mic, speakers or connection you're checking rather than a server, run the pre-call check instead, or see whether your connection has the bandwidth for the call in the first place with the bandwidth calculator.

Frequently Asked Questions

Are my TURN credentials sent anywhere?

Only to the server you typed them in for, exactly the way a real WebRTC call would use them. This tool runs entirely in your browser tab - Meetrix never receives your server URLs, usernames or credentials, and nothing is logged or saved, including between runs.

What's the difference between STUN and TURN?

STUN tells a device its public IP and port so two peers can try to connect directly. TURN is a fallback relay server that forwards media when a direct connection is not possible, for example behind a symmetric NAT or a restrictive firewall. STUN is lightweight and often free; TURN uses real bandwidth and needs a running server.

Why do I only see .local addresses?

Chrome and other Chromium browsers replace your real local IP on host candidates with a random .local mDNS name by default, to stop websites fingerprinting your network. This is expected and not a bug - see "Only .local addresses appear" below.

How do I test that TURN works on its own?

Configure your TURN server with its username and credential, set the ICE transport policy above to Relay only, and run the test. If a relay candidate comes back, your TURN server can carry a call by itself with no STUN or direct connection involved.

Why does my TURN server return 401?

A 401 or 403 means the server rejected your credentials. Double check the username and credential you entered. If your server issues time-limited credentials, confirm your server clock is accurate and the credential has not expired - see "401 unauthorized from TURN" below.

Do I need TURN if STUN works?

STUN alone gets most calls connected directly. But some networks (symmetric NATs, locked-down corporate firewalls, some mobile carriers) block direct peer-to-peer connections entirely. A production deployment needs TURN as a fallback for those cases, even when STUN works fine for you personally.

What ports does TURN need open?

Coturn's defaults are 3478 (STUN/TURN, UDP and TCP) and 5349 for TURN over TLS, plus a relay port range (commonly 49152-65535 UDP) that must be reachable from the internet. If any of those are closed by a firewall or a cloud security group, TURN will fail exactly the way this test shows.

Which browsers are supported?

Chrome, Firefox, Edge and Safari (recent versions) all support RTCPeerConnection and ICE gathering. onicecandidateerror support and mDNS candidate obfuscation differ slightly between them - see the browser-specific notes in the troubleshooting section.

What is trickle ICE?

Trickle ICE is the technique of sending ICE candidates to the other side as soon as each one is found, instead of waiting for gathering to finish first. It speeds up call setup. This tool runs the same gathering process a trickle ICE call would, so you can inspect every candidate as it arrives.

Is this ICE tester free?

Yes. It is free to use, requires no sign-up, and there is nothing to install.

Calls failing in production? We debug WebRTC infrastructure for a living.

From a single misconfigured TURN server to a full self-hosted deployment, Meetrix builds and debugs WebRTC infrastructure. Want to run your own TURN server instead? See Meetrix's Coturn AMI.

Talk to Us