amazon-web-services amazon-ec2 webrtc turn

amazon web services - Una forma sencilla de probar el servidor TURN



amazon-web-services amazon-ec2 (2)

Estoy viendo este sitio, que se supone que es una tabla para probar un servidor TURN ( según esta esta respuesta ).

plugin.temasys.com.sg/demo/samples/web/content/peerconnection/trickle-ice/index.html

Puse mi información de servidor, pero no pude encontrar nada para determinar si el servidor está funcionando. La sección de candidatos de hielo se ve igual incluso si no hay un servidor elegido.

Mi servidor TURN está instalado en Amazon EC2. Seguí las instrucciones de instalación desde el repositorio de coturn aquí:

github.com/coturn/coturn/blob/master/INSTALL

Lo siguiente es lo que obtengo en mi servidor cuando hago el comando para iniciar el servidor TURN, desde aquí :

RFC 3489/5389/5766/5780/6062/6156 STUN/TURN Server Version Coturn-4.2.1.2 ''Monza'' 0: Max number of open files/sockets allowed for this process: 4096 0: Due to the open files/sockets limitation, max supported number of TURN Sessions possible is: 2000 (approximately) 0: ==== Show him the instruments, Practical Frost: ==== 0: TLS supported 0: DTLS supported 0: AEAD supported 0: Redis supported 0: PostgreSQL supported 0: MySQL supported 0: MongoDB is not supported 0: OpenSSL compile-time version 0x1000106f: fresh enough 0: Default Net Engine version: 3 (UDP thread per CPU core) ===================================================== 0: Config file found: /usr/local/etc/turnserver.conf 0: Listener address to use: 172.31.43.176 0: Relay address to use: 172.31.43.176 0: Config file found: /usr/local/etc/turnserver.conf 0: Domain name: 0: Default realm: realm 0: Config file found: /usr/local/etc/turnuserdb.conf 0: WARNING: cannot find certificate file: turn_server_cert.pem (1) 0: WARNING: cannot start TLS and DTLS listeners because certificate file is not set properly 0: WARNING: cannot find private key file: turn_server_pkey.pem (1) 0: WARNING: cannot start TLS and DTLS listeners because private key file is not set properly 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 172.31.43.176 initialization... 0: relay 172.31.43.176 initialization done 0: Relay ports initialization done 0: IO method (general relay thread): epoll (with changelist) 0: IPv4. UDP listener opened on: 172.31.43.176:3478 0: Total UDP servers: 0 0: Total General servers: 1 0: turn server id=0 created 0: IPv4. TCP listener opened on : 172.31.43.176:3478 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)

Parece estar funcionando, pero ¿cómo lo sé? Me disculpo por mi ignorancia, he estado leyendo tantos documentos sobre esto que no puedo seguir todo.

EDITAR: Bueno, algo está sucediendo :)

Estoy recibiendo estos en mi servidor de turno ahora cada vez que uso el sitio mencionado anteriormente:

64: ERROR: check_stun_auth: Cannot find credentials of user <ubuntu> 64: session 000000000000000004: realm <realm> user <ubuntu>: incoming packet message processed, error 401: Unauthorised

EDIT 2: eliminé la porción de ubuntu, y ahora estoy recibiendo lo que parecen ser respuestas exitosas. Todavía no sé realmente lo que significa, pero es un comienzo :)

274: handle_udp_packet: New UDP endpoint: local addr 172.31.43.176:3478, remote addr 12.123.123.123:64064 274: session 000000000000000007: realm <realm> user <>: incoming packet BINDING processed, success 274: handle_udp_packet: New UDP endpoint: local addr 172.31.43.176:3478, remote addr 12.123.123.123:64068 274: session 000000000000000008: realm <realm> user <>: incoming packet BINDING processed, success 274: session 000000000000000007: realm <realm> user <>: incoming packet message processed, error 401: Unauthorised 274: session 000000000000000008: realm <realm> user <>: incoming packet message processed, error 401: Unauthorised 274: IPv4. Local relay addr: 172.31.43.176:56767 274: session 000000000000000007: new, realm=<realm>, username=<turnadm>, lifetime=600 274: session 000000000000000007: realm <realm> user <turnadm>: incoming packet ALLOCATE processed, success 274: IPv4. Local relay addr: 172.31.43.176:54363 274: session 000000000000000008: new, realm=<realm>, username=<turnadm>, lifetime=600 274: session 000000000000000008: realm <realm> user <turnadm>: incoming packet ALLOCATE processed, success 274: session 000000000000000007: realm <realm> user <turnadm>: incoming packet ALLOCATE processed, success 274: session 000000000000000008: realm <realm> user <turnadm>: incoming packet ALLOCATE processed, success


Editar: una buena implementación en github.io tomada de un comentario a otra respuesta (elija "retransmisión" en el valor de IceTransports):

Pruebe el servidor TURN

ejecute el siguiente código en la consola de su navegador (firefox o chrome), reemplace 127.0.0.1 con la IP externa de su aws, que debería darle la respuesta:

function checkTURNServer(turnConfig, timeout){ return new Promise(function(resolve, reject){ setTimeout(function(){ if(promiseResolved) return; resolve(false); promiseResolved = true; }, timeout || 5000); var promiseResolved = false , myPeerConnection = window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection //compatibility for firefox and chrome , pc = new myPeerConnection({iceServers:[turnConfig]}) , noop = function(){}; pc.createDataChannel(""); //create a bogus data channel pc.createOffer(function(sdp){ if(sdp.sdp.indexOf(''typ relay'') > -1){ // sometimes sdp contains the ice candidates... promiseResolved = true; resolve(true); } pc.setLocalDescription(sdp, noop, noop); }, noop); // create offer and set local description pc.onicecandidate = function(ice){ //listen for candidate events if(promiseResolved || !ice || !ice.candidate || !ice.candidate.candidate || !(ice.candidate.candidate.indexOf(''typ relay'')>-1)) return; promiseResolved = true; resolve(true); }; }); } checkTURNServer({ url: ''turn:127.0.0.1'', username: ''test'', credential: ''test'' }).then(function(bool){ console.log(''is my TURN server active? '', bool? ''yes'':''no''); }).catch(console.error.bind(console));

PD : asegúrate de dos cosas, pasas la IP externa de aws como parte de los parámetros al iniciar el servidor TURN, asegúrate de que el puerto que estás utilizando esté abierto para recibir y enviar ajustes aws.


Si tiene una aplicación de prueba con WebRTC.

Puedes forzar el TURN en Firefox.

Pestaña: about:config

Búsqueda: media.peerconnection.ice.relay_only

Establecerlo en true

En este momento, Firefox solo usa el relevo TURN.