Instalação do SpeedTest (OoklaServer) no Debian 11/12 gerenciado pelo systemd

Criada por Danilo Tomich, Modificado em Qua, 4 Jun na (o) 4:16 PM por Danilo Tomich

? Requisitos recomendados para tráfego intenso

RecursoEspecificação recomendada
CPU8 vCPUs (Xeon/EPYC, alta performance)
RAM16 GB ou mais
DiscoSSD NVMe ou RAID com 100+ IOPS
RedeLink dedicado de 10 Gbps simétrico
ConectividadeASN próprio ou rotas bem divulgadas





### Caso pegue a imagem que já temos pronta, mude algumas informações internas.

Acesse:

nano /etc/resolv.conf

 E mude para seu DNS Autoritativo e outro externo.
Exemplo:
OBS: o 200.200.200.0 é somente um exemplo. Como se fosse nosso dns autoritativo local. Mude para o seu.


nameserver 200.200.200.0

nameserver 1.1.1.1


Depois mude essa opção da mesma forma:


nano /etc/systemd/resolved.conf


[Resolve]

DNS=200.200.200.0 1.1.1.1

FallbackDNS=1.1.1.1


Reinicie o serviço:

systemctl restart systemd-resolved


### Instalando o Speed.

### Caso baixou nossa imagem pre-conf, so mude

OoklaServer.allowedDomains = *.ookla.com, *.speedtest.net, *.tomich.com.br

no arquivo: /usr/local/src/ooklaserver/OoklaServer.properties


Pacotes necessários, não esqueça de virar root de forma correta `su -`

su -
apt install vim wget unzip net-tools psmisc


Faça alguns ajustes de kernel para melhorar a performace do servidor: 

nano /etc/sysctl.conf


Adicione ao final:

# Kernel deve tentar manter o máximo possível de dados em memória principal 
vm.swappiness = 5

# Evitar que o sistema fique sobrecarregado com muitos dados sujos na memória.
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5

# Aumentar o número máximo de conexões simultâneas
net.core.somaxconn = 65535

# Aumentar o tamanho máximo do buffer de recepção e transmissão de rede
net.ipv4.tcp_mem = 4096 87380 16777216
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

# Melhorar o desempenho da conexão e a evitar congestionamentos
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_moderate_rcvbuf = 1
net.ipv4.tcp_timestamps = 1

# Reduzir o tempo limite de conexão TCP
net.ipv4.tcp_fin_timeout = 15

# Ativar o escalonamento de fila de recepção de pacotes de rede
net.core.netdev_max_backlog = 8192

# Aumentar o número máximo de portas locais que podem ser usadas
net.ipv4.ip_local_port_range = 1024 65535

# Define o controle de saída de pacotes como "fq" para melhorar a distribuição de dados.
net.core.default_qdisc=fq

# Ativa o algoritmo BBR para melhorar a velocidade e evitar congestionamento de rede.
net.ipv4.tcp_congestion_control=bbr


Carregue para o kernel as novas alterações 


sysctl -p



Módulos do kernel 


modprobe -a tcp_illinois

echo "tcp_illinois" >> /etc/modules



TCP Illinois é um algoritmo de controle de congestionamento que utiliza uma combinação de técnicas de controle de congestionamento baseadas em perda e atraso para melhorar o desempenho em redes de alta perda. Ele foi projetado para funcionar bem em ambientes móveis sem fio, onde a perda de pacotes é frequentemente causada por condições de RF em mudança. 


modprobe -a tcp_westwood
echo "tcp_westwood" >> /etc/modules

TCP Westwood é um algoritmo de controle de congestionamento que utiliza medidas de janela e de banda para detectar congestionamentos em vez de depender da detecção de perda de pacotes, que pode ser menos confiável em ambientes sem fio. Ele foi projetado especificamente para ambientes móveis sem fio e pode ser uma boa opção para melhorar o desempenho em redes sem fio com alta variação de taxa de perda de pacotes.


modprobe -a tcp_htcp

echo "tcp_htcp" >> /etc/modules


O TCP-HTCP (Highspeed TCP for large congestion windows) é um algoritmo de controle de congestionamento do protocolo TCP que foi projetado para melhorar o desempenho em conexões de alta velocidade com janelas de congestionamento grandes.

Vamos criar o diretório /usr/local/src/ooklaserver onde ira ficarnossa aplicação OoklaServer.

mkdir /usr/local/src/ooklaserver




Vamos baixar nosso script de instalação em /usr/local/src/ooklaserver e executar a instalação.

cd /usr/local/src/ooklaserver

wget https://install.speedtest.net/ooklaserver/ooklaserver.sh

chmod +x ooklaserver.sh

./ooklaserver.sh install


Please confirm (y/n) > y



Neste momento o servidor ookla já iniciou, acesse em seu navegado http://sub.dominio:8080 e verifique se o mesmo esta rodando> OoklaServer – It worked!


Pare o serviço ooklaserver

./ooklaserver.sh stop


Ou (se seu tempo é curto) 


killall -9 OoklaServer


Edite o arquivo de configuração OoklaServer 


nano /usr/local/src/ooklaserver/OoklaServer.properties



A partir de 2023 IPv6 virou obrigatório, descomente (remova o # da frente) a linha a baixo deixando true. 

Descomente a linha e inclua todos seus subidominios para seu domínio ex `*.tomich.com.br` 


OoklaServer.allowedDomains = *.ookla.com, *.speedtest.net, *.tomich.com.br



Ativa o filtro que bloqueia agentes de usuário conhecidos como indesejados, ajudando a reduzir tráfego de fontes não oficiais. 


OoklaServer.userAgentFilterEnabled = true


Define o número máximo de conexões simultâneas permitidas por endereço IP; o padrão é 500. 

OoklaServer.ipTracking.maxConnPerIp = 5


Estabelece o número máximo de conexões permitidas por IP dentro de cada intervalo de tempo (bucket); o padrão é 20000. 

OoklaServer.ipTracking.maxConnPerBucketPerIp = 10


Define a capacidade máxima do pool de threads de trabalho; o padrão é 30.000. 

OoklaServer.workerThreadPool.capacity = 30000


Especifica o tamanho máximo de quadro (frame) aceito em conexões WebSocket, em bytes; o padrão é 5 MB (5.242.880 bytes).

OoklaServer.websocket.frameSizeLimitBytes = 5242880



Define o tempo máximo, em minutos, para manter estatísticas de IPs inativos após a última conexão registrada; o padrão é 35 minutos. 

OoklaServer.ipTracking.maxIdleAgeMinutes = 35


Se você desejar visualizar os logs descomente em “# Log to files”. Um arquivo em /usr/local/src/ooklaserver/ooklaserver.log será criado. 

# Log to files

#

logging.loggers.app.name = Application

logging.loggers.app.channel.class = FileChannel

logging.loggers.app.channel.pattern = %Y-%m-%d %H:%M:%S [%P - %I] [%p] %t

logging.loggers.app.channel.path = ${application.dir}/ooklaserver.log

logging.loggers.app.level = information



Sobreecreva OoklaServer.properties.default com o OoklaServer.properties, para em futuras atualizações (Ocorre automaticamente) ele use como base as suas configurações. 


cp /usr/local/src/ooklaserver/OoklaServer.properties /usr/local/src/ooklaserver/OoklaServer.properties.default



Para que o Ooklaserver seja tratado como um serviço vamos configurar-lo no systemd. 

nano /lib/systemd/system/ooklaserver.service



[Unit]

Description=OoklaServer-SpeedTest 

After=network.target


[Service]

User=root

Group=root

Type=simple

RemainAfterExit=yes


WorkingDirectory=/usr/local/src/ooklaserver

ExecStart=/usr/local/src/ooklaserver/ooklaserver.sh start

ExecReload=/usr/local/src/ooklaserver/ooklaserver.sh restart

#ExecStop=/usr/local/src/ooklaserver/ooklaserver.sh stop

ExecStop=/usr/bin/killall -9 OoklaServer


TimeoutStartSec=60

TimeoutStopSec=300


[Install]

WantedBy=multi-user.target

Alias=speedtest.service



Recarrege o daemon 

systemctl daemon-reload



Verifique o status, nosso serviço ira estar disabled 

systemctl status ooklaserver



Vamos deixa-lo enable para subir com o boot do sistema. 

systemctl enable ooklaserver



Inicie o serviço e verifique seu status se o mesmo ficou active.


systemctl start ooklaserver

systemctl status ooklaserver




Se desejar reinicie o servidor para ver se o serviço ooklaserver carregou no boot! 

reboot



Ao voltar verifique se o mesmo iniciou. 

systemctl status ooklaserver




Certifique-se acessando em seu navegador http://sub.dominio:8080.

O serviço ooklaserver tem um alias com o nome speedtest, então se quiser usar `systemctl status speedtest` também funiona. ?

systemctl status speedtest


Para verificar a versão use:

/usr/local/src/ooklaserver/OoklaServer -v


2001



Se você realizar o teste agora https://www.ookla.com/pt/host-tester você encontrará 1 erros:
É que você não tem certificado válido, a OoklaServer fala que você pode usar o certifica automatico que ela ira gerar, ao fazer o registro. Nota: Este processo automatizado só começa depois que o servidor foi registrado e revisado por Ookla . Você pode ler aqui mais sobre.
OBS: Só vai funcioanr se tiver configurado certinho>


  • IPv4 Publico
  • IPv6 Publico
  • DNS 
  • Direcionado o subdominio
  • E a instalação estiver tudo ok.



Solução para o certificado

Vamos instalar o Certbot, que irá gerar os certificados com o Let’s Encrypt.

apt install certbot

Geramos o certificado para teste.remontti.com.br, lembrando que seu servidor DNS deve estar apontando para o IP Publivo do seu servidor para poder gerar o certificado sem erro. 



certbot certonly --standalone



Reponda: email (null@tomich.com.br), Y, N, Seu Domínio


Saving debug log to /var/log/letsencrypt/letsencrypt.log

Plugins selected: Authenticator standalone, Installer None

Enter email address (used for urgent renewal and security notices)

 (Enter 'c' to cancel): null@tomich.com.br                            <<<<<<<<<<<<<<<<<<<<<


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Please read the Terms of Service at

https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must

agree in order to register with the ACME server. Do you agree?

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(Y)es/(N)o: Y                                                           <<<<<<<<<<<<<<<<<<<<<


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Would you be willing, once your first certificate is successfully issued, to

share your email address with the Electronic Frontier Foundation, a founding

partner of the Let's Encrypt project and the non-profit organization that

develops Certbot? We'd like to send you email about our work encrypting the web,

EFF news, campaigns, and ways to support digital freedom.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

(Y)es/(N)o: N                                                           <<<<<<<<<<<<<<<<<<<<<

Account registered.

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'

to cancel): teste.remontti.com.br                                       <<<<<<<<<<<<<<<<<<<<<

Requesting a certificate for teste.remontti.com.br

Performing the following challenges:

http-01 challenge for teste.remontti.com.br

Waiting for verification...

Cleaning up challenges


IMPORTANT NOTES:

 - Congratulations! Your certificate and chain have been saved at:

   /etc/letsencrypt/live/teste.remontti.com.br/fullchain.pem

   Your key file has been saved at:

   /etc/letsencrypt/live/teste.remontti.com.br/privkey.pem

   Your certificate will expire on 2022-02-03. To obtain a new or

   tweaked version of this certificate in the future, simply run

   certbot again. To non-interactively renew *all* of your

   certificates, run "certbot renew"

 - If you like Certbot, please consider supporting our work by:


   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate

   Donating to EFF:                    https://eff.org/donate-le


Os arquivos do certificado foram criados em /etc/letsencrypt/live/SUB.DOMINIO.XXX.XX/ com validade de 90 dias.

Edite o arquivo de configuração OoklaServer, para usar o nosso certificado gerado.

nano /usr/local/src/ooklaserver/OoklaServer.properties


Localize openSSL.server.certificateFile e openSSL.server.privateKeyFile


# openSSL.server.certificateFile = cert.pem

# openSSL.server.privateKeyFile = key.pem



Descomente as linhas e e adicione o caminho para os seus.

openSSL.server.certificateFile = /etc/letsencrypt/live/SUB.DOMINIO.XXX.XX/fullchain.pem

openSSL.server.privateKeyFile = /etc/letsencrypt/live/SUB.DOMINIO.XXX.XX/privkey.pem


Sobreecreva OoklaServer.properties.default com o OoklaServer.properties novamente para em futuras atualizações. 


cp /usr/local/src/ooklaserver/OoklaServer.properties /usr/local/src/ooklaserver/OoklaServer.properties.default


Reinicie o OoklaServer. (Pode levar ate 2min, tenha paciência) 

systemctl  restart ooklaserver.service


Pode acessar seu dominio agora com https, não pode dar erro. sginifia que esta funcionando correto.


Renovar o certificado automaticamente

Para evitar que o certificado expire faremos um script colocando o certbot para renovar uma vez ao mês pelo cron do servidor.


nano /usr/local/src/ooklaserver/renova-certificado


Adicione: 


#!/bin/bash

# Renova o certificado

/usr/bin/certbot renew -q

# Aguarda o certificado renovar

sleep 30

# Reinicie o OoklaServer

/usr/bin/systemctl restart ooklaserver


De permissão para execução e adicione ao cron, para que ele rode o script toda a meia noite do dia 1º de cada mês. 


chmod +x /usr/local/src/ooklaserver/renova-certificado

echo '00 00   1 * *   root    /usr/local/src/ooklaserver/renova-certificado' >> /etc/crontab


Verifique se a última linha está nosso script. 

cat /etc/crontab


# /etc/crontab: system-wide crontab

# Unlike any other crontab you don't have to run the `crontab'

# command to install the new version when you edit this file

# and files in /etc/cron.d. These files also have username fields,

# that none of the other crontabs do.


SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin


# Example of job definition:

# .---------------- minute (0 - 59)

# |  .------------- hour (0 - 23)

# |  |  .---------- day of month (1 - 31)

# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...

# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )

52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

#

00 00   1 * *   root    /usr/local/src/ooklaserver/renova-certificado



Reinici o cron para ele carregar a nova rotina. 

systemctl restart cron



Se o certificado por venturar expirar e o script não renovar, basta você rodar na mão: 

certbot renew 

systemctl restart ooklaserver



Tudo certinho? Hora de fazer o cadastro no site


Cadastro Ookla

Hora de criar sua conta no ookla.com e fazer a solicitação para virar um host! https://account.ookla.com/register/servers, se você já tem acesse: https://account.ookla.com/servers/create
Com sua conta criada e validada no e-mail de verificação logue: https://account.ookla.com/, clique em Go To Servers, e aceite os Termos. Add Server preencha com os seus dados e do servidor.

Agora basta aguardar, pode levar alguns dias para aprovação, você receberá um e-mail lhe avisado (se não for aprovado eles lhe dirão porque). Boa sorte!




###Alguns testes

Verificar se o certificado esta ativo de fato:

LINK:

Exemplo funcionando:


Ou via shell

openssl s_client -connect teste.agilizatelecom.com.br:8080

Este artigo foi útil?

Que bom!

Obrigado pelo seu feedback

Desculpe! Não conseguimos ajudar você

Obrigado pelo seu feedback

Deixe-nos saber como podemos melhorar este artigo!

Selecione pelo menos um dos motivos

Feedback enviado

Agradecemos seu esforço e tentaremos corrigir o artigo