iceConnectionState está desconectado (cuando se usa en Internet)

Esta pregunta ya se ha hecho antes, pero aún no he encontrado una respuesta. Básicamente estoy teniendo el mismo problema que el descritoaquí yaquí.

Estoy tratando de configurar una conexión webRTC usando PeerJS. Funciona perfectamente en LAN, pero no puedo hacer que funcione a través de Internet. Estoy usando Coturn como servidor TURN, pero hasta ahora esto no ha resuelto el problema. La consola de Chromium imprime lo siguiente:

PeerJS:  Added ICE candidate for: client1
peer.js:1476 PeerJS:  Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS:  Set remoteDescription: OFFER for: client1
peer.js:1476 PeerJS:  Set remoteDescription: ANSWER for: client1
peer.js:1476 PeerJS:  Received remote stream
peer.js:1476 PeerJS:  Receiving stream MediaStream
peer.js:1476 PeerJS:  Created answer.
peer.js:1476 PeerJS:  Set localDescription: answer for: client1
3peer.js:1476 PeerJS:  Received ICE candidates for: client1
3peer.js:1476 PeerJS:  Added ICE candidate for: client1
peer.js:1476 PeerJS:  iceConnectionState is disconnected, closing connections to client1
peer.js:1476 PeerJS:  Cleaning up PeerConnection to client1
2peer.js:1476 PeerJS:  iceConnectionState is disconnected, closing connections to client1

El objeto par que estoy usando se ve así:

var peer = new Peer(
    GetURLParameter('id'),
    { key: peerKey, debug: peerDebug},
    {config:
        { 'iceServers': [
            { url: 'stun:[server ip here]:3478'},
            { url: 'turn:[server ip here]:3478'}
        ]}
    }
);

coturn, al iniciar el convertidor con el convertidor -L [ip del servidor], imprime lo siguiente:

0: Relay address to use: [server ip here]
0: pid file created: /var/run/turnserver.pid
0: IO method (main listener thread): epoll (with changelist)
0: WARNING: I cannot support STUN CHANGE_REQUEST functionality because only one IP address is provided
0: Wait for relay ports initialization...
0:   relay [server ip here] initialization...
0:   relay [server ip here] initialization done
0: Relay ports initialization done
0: IO method (general relay thread): epoll (with changelist)
0: turn server id=0 created
0: IPv4. UDP listener opened on: [server ip here]:3478
0: IPv4. TCP listener opened on : [server ip here]:3478
0: Total UDP servers: 1
0: Total General servers: 1
0: IO method (cli thread): epoll (with changelist)
0: IPv4. CLI listener opened on : 127.0.0.1:5766
0: IO method (auth thread): epoll (with changelist)

Y finalmente, dado que supongo que esto podría ser un problema de seguridad, mi configuración de iptables actualmente se ve así:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:3478
ACCEPT     udp  --  anywhere             anywhere             udp dpt:3478

¿Alguien tiene una idea de cómo hacer que esto funcione? Cualquier ayuda sería muy apreciada!

EDITAR: Resulta que mi JSON para la configuración de TURN era desordenado. Mi nuevo objeto par ahora se ve así:

var peer = new Peer(
    GetURLParameter('id'), {
        key: peerKey,
        debug: peerDebug,
        config: {
            'iceServers': [
                { url: 'stun:[server ip]:3478'},
                { url: 'turn:[server ip]:3478'}
            ]
        }
    }
);

Esto me da muchos más comentarios sobre el servidor TURN (así que supongo que voy en la dirección correcta), pero el problema persiste.

EDIT2: Bueno, se pone bastante extraño. Parece ser algún tipo de problema de compatibilidad entre navegadores. Usando la herramienta de prueba del servidor TURN que sugirió mido, obtengo resultados diferentes en Firefox que en Chromium. Tengo la intención de usar Chromium porque su modo de quiosco sería muy útil para mi aplicación. Pero volvamos al servidor de turnos. En Firefox, cuando se usan cuentas de usuario, todo parece funcionar bien: el resultado de la página de prueba de github:

0.004   1   host    0   UDP 192.168.178.28  39919   126 | 32512 | 255
0.005   2   host    0   UDP 192.168.178.28  56123   126 | 32512 | 254
0.076   1   srflx   1   UDP 178.39.74.108   39919   100 | 32543 | 255
0.077   1   relay   2   UDP [Server IP ]    52147   5 | 32543 | 255
0.098   2   srflx   1   UDP 178.39.74.108   56123   100 | 32543 | 254
0.099   2   relay   2   UDP [Server IP ]    60002   5 | 32543 | 254
0.099   Done

Sin embargo, al permitir el acceso anónimo al servidor TURN y al intentar iniciar sesión sin nombre de usuario y contraseña, no pasa absolutamente nada.

Historia diferente en Chromium: con el nombre de usuario y la contraseña suministrados, sucede lo siguiente:

0.002   1   host    138421141   udp 192.168.178.28  42343   126 | 30 | 255
0.002   2   host    138421141   udp 192.168.178.28  49001   126 | 30 | 254
0.028   1   srflx   842163049   udp 178.39.74.108   42343   100 | 30 | 255
0.049   2   srflx   842163049   udp 178.39.74.108   49001   100 | 30 | 254

... mientras el terminal del servidor TURN imprime 401 mensajes de error una y otra vez. Me parece que las credenciales nunca llegan al servidor cuando se utiliza el cromo. El mensaje de error 401 indica un nombre de usuario vacío.

Realmente podría usar Chromium para esa cosa. ¿Alguien tiene una idea sobre cómo hacer que eso funcione?

Respuestas a la pregunta(0)

Su respuesta a la pregunta