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):
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.