Servidor de retransmissão (TURN)¶
As ligações puramente ponto a ponto por vezes não conseguem estabelecer-se, por causa de firewalls ou de NAT em casa de um dos utilizadores ou de todos. Para o resolver e atravessar as firewalls mais renitentes, podem ser instalados um ou vários servidores TURN (Traversal Using Relay NAT).
Utilizamos o coturn (github.com/coturn/coturn) para os nossos servidores TURN, como a maioria dos fabricantes, entre os quais o Slack e o Zoom. O coturn funciona igualmente como servidor STUN, encarregue de responder à questão «qual é o meu endereço IP público».
Máquina dedicada
Desaconselhamos a implantação de um servidor TURN na máquina que já aloja o Drovio Server, por razões de segurança e de desempenho.
Instalar em Debian¶
O coturn está empacotado para Debian, sendo que a versão 13 traz uma versão praticamente atual, e funciona tanto em x64 como em arm64, sendo os comandos abaixo idênticos em ambos. Passo a passo, numa máquina Debian 13 acabada de instalar:
- Descomente
TURNSERVER_ENABLED=1e guarde. - Abra o ficheiro de configuração, ver Configurar o coturn abaixo:
Instalar em RHEL¶
O coturn está disponível através do EPEL em RHEL 9 e 10. Passo a passo:
sudo dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
sudo dnf install coturn
O primeiro comando ativa o EPEL, aqui na sua versão para RHEL 9: adapte o URL à sua versão.
Abra em seguida o ficheiro de configuração, ver Configurar o coturn abaixo:
Configurar o coturn¶
Altere turnserver.conf como se segue.
Escuta e rede:
listening-portetls-listening-portdevem valer80e443em vez das portas predefinidas, a fim de atravessar a maioria das firewalls.listening-ip: o IP público, ou o IP privado se estiver atrás de um NAT, por exemplo em AWS EC2.relay-ip: idêntico alistening-ip.external-ip: o IP público, unicamente quandolistening-ipé um endereço privado atrás de um NAT.min-port=49152emax-port=65535: o intervalo de portas UDP que o coturn aloca ao tráfego retransmitido. Abra este intervalo em UDP na sua firewall.
Autenticação:
fingerprintdeve estar descomentado.static-auth-secret=MySeCrEt: substitua por uma longa cadeia aleatória. É o segredo partilhado entre o Drovio Server e o coturn.realm=turn.example.com: a substituir; este valor não precisa de resolver para o que quer que seja.stale-nonce=600deve estar descomentado.
Largura de banda:
max-bps: número máximo de bytes por segundo e por sessão. Comente a linha para não a limitar, ou fixe-a pelo menos no débito máximo configurado emsettings.conf, sobwebrtc.service_quality.maximum. Atenção,max-bpsexprime-se em bytes por segundo enquantowebrtc.service_quality.maximumse exprime em kbits por segundo: o valor predefinido de 10 Mbps corresponde a 1 250 000 bytes por segundo.
TLS (facultativo, para o suporte de TURNS):
certepkeydevem designar o seu certificado e a sua chave privada. Se não precisar de TURNS, salte esta parte e utilize apenas a porta80ao designar este servidor, ver Configurar o Drovio Server.- Preencha
cipher-listcom"ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS:!AESCCM". no-tlsv1eno-tlsv1_1devem estar descomentados.
Endurecimento:
no-multicast-peersdeve estar descomentado.allow-loopback-peersdeve permanecer comentado, sendo o loopback recusado por predefinição desde o coturn 4.5.2.no-tcp-relaydeve estar descomentado: o Drovio só utiliza a retransmissão UDP, e desativar a retransmissão TCP reduz a superfície de ataque.denied-peer-ip=0.0.0.0/8,denied-peer-ip=10.0.0.0/8,denied-peer-ip=172.16.0.0/12,denied-peer-ip=192.168.0.0/16edenied-peer-ip=127.0.0.0/8: impedem o tráfego retransmitido de atingir as redes privadas ou de loopback.no-software-attributedeve estar descomentado, o que oculta a versão do coturn nas respostas.no-rfc5780,no-stun-backward-compatibilityeresponse-origin-only-with-rfc5780devem estar descomentados. Desativam funções STUN herdadas, inúteis aqui, e reduzem a exposição.
Provavelmente também quererá isolar este servidor na sua própria rede ou VPC.
Interface de linha de comandos:
cli-ip=127.0.0.1,cli-port=5766ecli-password=myclipassword: mude a palavra-passe. Esta interface serve para verificar os pares ligados, lançandotelnet localhost 5766, introduzindo a palavra-passe e depoisps. Não exponha esta porta para o exterior.
Guarde e reinicie em seguida o coturn:
O seu servidor de retransmissão TURN, e STUN, está agora operacional.
Configurar o Drovio Server¶
De volta à sua instância Drovio Server:
Localize webrtc, substitua turn_servers_secret pelo valor de
static-auth-secret definido acima e adapte a configuração seguinte às suas
necessidades, tendo o cuidado de substituir o URL turn.example.com pelo URL ou
pelo IP da sua máquina coturn:
"webrtc": {
"turn_servers_secret": "MySeCrEt",
"turn_servers_auth_timeout": 300,
"ice_servers": [
{ "url": "stun:turn.example.com:443" },
{ "url": "turn:turn.example.com:443" },
{ "url": "turn:turn.example.com:443?transport=tcp" },
{ "url": "turns:turn.example.com:443" }
],
"service_quality": {
"minimum": 1000,
"maximum": 10000
}
}
- A primeira entrada é o STUN, que apenas responde aos pedidos «qual é o meu endereço IP».
- A segunda é o TURN clássico em UDP na 443, sem camada TLS.
- A terceira é o TURN em TCP na 443, sem camada TLS.
- A quarta é o TURNS em UDP na 443, com uma camada TLS suplementar.
Isto deverá funcionar com a maioria das firewalls renitentes. A secção webrtc
aplica-se a quente, não havendo portanto nada a reiniciar: as novas retransmissões
são tidas em conta em poucos segundos.
Verificar o servidor de retransmissão¶
Para verificar que o servidor de retransmissão funciona corretamente:
- Lance o Firefox.
- Introduza
about:configna barra de endereços, aceite e continue. - Na barra de pesquisa, escreva
relay. - Passe
media.peerconnection.ice.relay_onlyparatrue. - Abra a aplicação Drovio e inicie sessão.
- Utilize o ícone em forma de envelope e clique em Invite by URL.
- Cole a hiperligação do convite no Firefox e prossiga.
- Introduza um nome de apresentação, sem escolher lançar a aplicação, e prossiga no navegador.
- Deverá ver o seu próprio ecrã, em espelho quando olha para o ecrã partilhado.
- Abra um novo separador no Firefox, sem fechar o anterior, e introduza
about:webrtc. - Clique em Show details.
- Deverá ler ICE State: succeeded, nominated: true, selected: true,
e ver relay mencionado ao lado do seu endereço IP, em vez de
host,srflxouprflx.
Reponha a definição
Não se esqueça de voltar a passar media.peerconnection.ice.relay_only para
false.