Tutorial para Medir Velocidade (Speedtest) no pfsense



  • Pessoal, boa tarde

    Recurso importante para medirmos a velocidade individual de nossos links WAN diretamente no pfsense e sem a necessidade de acessar uma estação e criarmos regras de firewall, direcionando o tráfego por determinado Gateway.

    Obs:  quem não quiser instalar o wget, pode fazer o download dos arquivos manualmente no github e criar o script através do pacote filer, a vantagem está no fato desse arquivo ficar no backup do pfsense.

    Abaixo o necessário.

    No terminal (Pode ser no command prompt ou putty obviamente).
    ##############Versão 2.2.x##############
    pkg install wget
    pkg install python
    pkg install unzip
    rehash
    mkdir /root/temp
    cd /root/temp
    wget https://github.com/sivel/speedtest-cli/archive/master.zip
    unzip master.zip
    cd speedtest-cli-master/
    chmod 755 speedtest_cli.py
    mv speedtest_cli.py /usr/bin
    ##############Versão 2.3##############

    verifique se possui o python com pkg version | grep python.  Caso tenha feito uma instalação limpa do pfsense, um amigo me informou que a instalação dele que é limpa não possuia e teve que instalar o mesmo
    mkdir /root/temp
    cd /root/temp
    fetch https://github.com/sivel/speedtest-cli/archive/master.zip
    unzip master.zip
    cd speedtest-cli-master/
    chmod 755 speedtest_cli.py
    mv speedtest_cli.py /usr/bin
    editar o arquivo /usr/bin/speedtest_cli.py e alterar a primeira linha #!/usr/bin/env python para #!/usr/bin/env python2

    Testes que realizei:

    Possuo 2 links de internet com nat

    192.168.25.254
    192.168.0.11

    Rodei o comando /usr/bin/speedtest_cli.py

    Me retorna o download e Upload do meu Link default

    para selecionar o link de internet, basta adicionar o parâmetro –source IP_INTERFACE

    /usr/bin/speedtest_cli.py --source 192.168.25.254

    [2.2.6-RELEASE][admin@fw1.compore.intra]/root: /usr/bin/speedtest_cli.py --source 192.168.25.254
    Retrieving speedtest.net configuration...
    Retrieving speedtest.net server list...
    Testing from Global Village Telecom (177.xx.xx.xx)...
    Selecting best server based on latency...
    Hosted by TIM Brasil (Rio de Janeiro) [4.09 km]: 11.427 ms
    Testing download speed........................................
    Download: 16.34 Mbit/s
    Testing upload speed..................................................
    Upload: 0.86 Mbit/s
    
    
    [2.2.6-RELEASE][admin@fw1.corporate.intra]/root/temp/speedtest-cli-master: /usr/bin/speedtest_cli.py --source 192.168.0.11
    Retrieving speedtest.net configuration...
    Retrieving speedtest.net server list...
    Testing from NET Virtua (179.xx.xx.xx)...
    Selecting best server based on latency...
    Hosted by Claro (Rio de Janeiro) [13.50 km]: 12.524 ms
    Testing download speed........................................
    Download: 52.22 Mbit/s
    Testing upload speed..................................................
    Upload: 2.98 Mbit/s
    
    

    Obs:  Funciona se colocar –source IP da Interface VIP do HA

    Explorando as possibilidades.

    Utilizando Zabbix, é possível filtrar esses dados e gerar de tempos em tempos (Não muito frequentemente já que o script no momento de execução faz um download) esses dados e armazenar em banco de dados utilizando UserParameter.

    Exemplo de representação

    Depois estarei postando aqui a criação dos ítens.



  • Obrigado pela contribuição. Tópico fixado nos tutorias

    https://forum.pfsense.org/index.php?topic=44267.msg239896#msg239896

    Só uma observação.

    Quando se mede um link em uso, dependendo da utilização, você vai "medir" um valor menor que o realmente utilizado no momento já que o trafego do speedtest está competindo com o resto da navegação.



  • @marcelloc:

    Obrigado pela contribuição. Tópico fixado nos tutorias

    https://forum.pfsense.org/index.php?topic=44267.msg239896#msg239896

    Só uma observação.

    Quando se mede um link em uso, dependendo da utilização, você vai "medir" um valor menor que o realmente utilizado no momento já que o trafego do speedtest está competindo com o resto da navegação.

    Exatamente Marcelo, Observação bem lembrada.



  • Atualizei o tutorial para quem utiliza na 2.2.x e gostaria de utilizar na 2.3



  • victorfmaraujo,

    Poderia descrever como fez para o zabbix verificar a velocidade? Estou tentando mas não funciona.

    Att,



  • @alandnc:

    victorfmaraujo,

    Poderia descrever como fez para o zabbix verificar a velocidade? Estou tentando mas não funciona.

    UserParameter

    coloco uma tarefa no cron para cada Link e no zabbix, utilizo um UserParameter para coletar o conteúdo desse log.

    Ex do Userparameter
    UserParameter=velocidade* ,cat /var/speedtest/$1

    Exemplo do Cron (Rodando a cada 10 minutos)
    /usr/local/bin/python /usr/bin/speedtest_cli.py –source 192.168.25.254 --simple > /var/speedtest/link1.log
    /usr/local/bin/python /usr/bin/speedtest_cli.py --source 192.168.0.11 --simple > /var/speedtest/link2.log
    
    E no Zabbix Server, crie um ítem(Para cada Link) do tipo Zabbix Agent onde a key seja:
    
    velocidade[link1.log]
    velocidade[link2.log]
    
    Tipo Texto (Ainda me falta tempo para coletar em modo Octal para gerar gráficos em bytes).
    
    Os exemplos acima são um CTRL + C CTRL + V das minhas confs
    
    
    
    
    
    Att,


  • Obrigado,

    Estava imaginando que o próprio zabbiz ia fazer o comando diretamente no pfsense via ssh. Tentou isso?



  • @alandnc:

    Obrigado,

    Estava imaginando que o próprio zabbiz ia fazer o comando diretamente no pfsense via ssh. Tentou isso?

    Tentei, o problema é que o script faz um teste que pode demorar um pouco para retornar o resultado.

    não é igual rodar um ls -l | wc -l rs



  • victorfmaraujo,

    Valeu ai pela dica, poderia me tirar outra duvida? Tenho 3 interface WAN(OI - 20MB e NET 120MB) e duas redes LAN (01 - 192.168.10.1  e 10.30.0.1)  quando executo o comando:
    /usr/local/bin/python /usr/bin/speedtest_cli.py –source 192.168.10.1
    /usr/local/bin/python /usr/bin/speedtest_cli.py --source 10.30.0.1
    Qualquer dos dois a medição fica pela wan da OI, mesmo a rede 10.30.0.1 está com uma regra para sair pela NET. Observo que quando mudo lá em gateway padrão ele muda.

    Att



  • victorfmaraujo,

    Poderia me ajudar na finalização do tutorial? Estou postando um print com as configurações no pfsens e o item no zabbix, via comando funciona normal mas o item não é suportado.



  • Vctor,

    Até agora já consigo coletar os dados da conexão lá no zabbix, porém não consigo gerar os gráficos uma vez que as informações são em texto, e os gráficos são apenas para valores numéricos, como fez para gerar o gráfico?

    grato ai pela dica.



  • @alandnc:

    Vctor,

    Até agora já consigo coletar os dados da conexão lá no zabbix, porém não consigo gerar os gráficos uma vez que as informações são em texto, e os gráficos são apenas para valores numéricos, como fez para gerar o gráfico?

    grato ai pela dica.

    No grafana?  Olhe a imagem em anexo que estou mandando agora.




  • @alandnc:

    victorfmaraujo,

    Valeu ai pela dica, poderia me tirar outra duvida? Tenho 3 interface WAN(OI - 20MB e NET 120MB) e duas redes LAN (01 - 192.168.10.1  e 10.30.0.1)  quando executo o comando:
    /usr/local/bin/python /usr/bin/speedtest_cli.py –source 192.168.10.1
    /usr/local/bin/python /usr/bin/speedtest_cli.py --source 10.30.0.1
    Qualquer dos dois a medição fica pela wan da OI, mesmo a rede 10.30.0.1 está com uma regra para sair pela NET. Observo que quando mudo lá em gateway padrão ele muda.

    Att

    Nunca passei por isso, realmente é estrnaho.



  • Victor,

    Publica no grupo do facebook do zabbix.. mas galera opinar.. essa é melhor maneira de medir o link ?



  • @gst.freitas:

    Victor,

    Publica no grupo do facebook do zabbix.. mas galera opinar.. essa é melhor maneira de medir o link ?

    Melhor maneira não é, porém pode ser que o sysadmin queira ter um Histórico de como está o seu link de internet de tempos em tempos, comparando a utilização da interface com a velocidade do link já que fica em histórico com data e hora.

    Já me ajudou quando um de meus clientes usava FailOver de WAN e sempre reclamava que quando o segundo link assumia (Possuía a mesma velocidade do principal) a navegação ficava extremamente lenta.  Olhando nos logs de texto armazenados no zabbix que o link secundário (Estando em Standby) nunca alcançava a velocidade contratada, então o responsável pelo contrato ligou para o provedor e descobriu que simplesmente MUDARAM o plano dele.

    Eu mesmo já precisei por várias vezes testar a velocidade dos links, porém remotamente (E a conexão remota via RDP ou Team viewer era horível), entretanto por SSH estava satisfatório.



  • @victorfmaraujo:

    @gst.freitas:

    Victor,

    Publica no grupo do facebook do zabbix.. mas galera opinar.. essa é melhor maneira de medir o link ?

    Melhor maneira não é, porém pode ser que o sysadmin queira ter um Histórico de como está o seu link de internet de tempos em tempos, comparando a utilização da interface com a velocidade do link já que fica em histórico com data e hora.

    Já me ajudou quando um de meus clientes usava FailOver de WAN e sempre reclamava que quando o segundo link assumia (Possuía a mesma velocidade do principal) a navegação ficava extremamente lenta.  Olhando nos logs de texto armazenados no zabbix que o link secundário (Estando em Standby) nunca alcançava a velocidade contratada, então o responsável pelo contrato ligou para o provedor e descobriu que simplesmente MUDARAM o plano dele.

    Eu mesmo já precisei por várias vezes testar a velocidade dos links, porém remotamente (E a conexão remota via RDP ou Team viewer era horível), entretanto por SSH estava satisfatório.

    Mais neste caso para o acesso remoto você conseguiu encontrar alguma solução?



  • @danilosv.03:

    @victorfmaraujo:

    @gst.freitas:

    Victor,

    Publica no grupo do facebook do zabbix.. mas galera opinar.. essa é melhor maneira de medir o link ?

    Melhor maneira não é, porém pode ser que o sysadmin queira ter um Histórico de como está o seu link de internet de tempos em tempos, comparando a utilização da interface com a velocidade do link já que fica em histórico com data e hora.

    Já me ajudou quando um de meus clientes usava FailOver de WAN e sempre reclamava que quando o segundo link assumia (Possuía a mesma velocidade do principal) a navegação ficava extremamente lenta.  Olhando nos logs de texto armazenados no zabbix que o link secundário (Estando em Standby) nunca alcançava a velocidade contratada, então o responsável pelo contrato ligou para o provedor e descobriu que simplesmente MUDARAM o plano dele.

    Eu mesmo já precisei por várias vezes testar a velocidade dos links, porém remotamente (E a conexão remota via RDP ou Team viewer era horível), entretanto por SSH estava satisfatório.

    Mais neste caso para o acesso remoto você conseguiu encontrar alguma solução?

    não entendi sua dúvida



  • Ele disse que os acesso remotos ficavam horrível etc. Dai perguntei se ele tinha conseguido resolver esse problema.



  • @danilosv.03:

    Ele disse que os acesso remotos ficavam horrível etc. Dai perguntei se ele tinha conseguido resolver esse problema.

    isso é problema do link ser muito ruim para acesso remoto (estabelecimento de conexão criptografada, renderização de tela, saturação do link etc), nada à ser feito quanto à isso



  • Bom dia,

    Eu tenho DOIS link de Internet, VIVO e NET,
    Ao executar o comando para sair pela NET, ele sai pelo link Default que é a VIVO,

    /root/speedtest-cli-master/speedtest.py –source 172.16.0.14
    Retrieving speedtest.net configuration...
    Testing from Vivo (XXXXXXXX)...
    Retrieving speedtest.net server list...

    Alguma sugestão ?



  • No meu caso tenho IP fixo nos dois links
    WAN 1 - VIVO
    WAN 2 - MULTIPLAY


    Duas interfaces definida pelo PFSENSE
    VIVO - PPPOE = "pppoe0"
    MULTIPLAY - DHCP = "re0"


    Script


    #!/bin/sh

    ipmultiplay=$(ifconfig re0 | grep "inet " | awk '{print $2}')
    echo $ipmultiplay
    python2 /usr/bin/speedtest-cli –source $ipmultiplay > /var/speedtest/linkmultiplay.txt

    ipvivo=$(ifconfig pppoe0 | grep "inet " | awk '{print $2}')
    echo $ipvivo
    python2 /usr/bin/speedtest-cli --source $ipvivo > /var/speedtest/linkvivo.txt
    chmod +x /var/speedtest/linkmultiplay.txt
    chmod +x /var/speedtest/linkvivo.txt

    Dessa forma funfa legal pra quem tem IP dinâmico.

    NO ZABBIX



  • tu já tentou apontar manualmente a interface que tu quer para o teste ser feito?



  • Vc diz apontar manualmente como?


    ipmultiplay=$(ifconfig re0 | grep "inet " | awk '{print $2}')  - Da o print do IP e Escreve
    -> Escreve -> echo $ipmultiplay
    python2 /usr/bin/speedtest-cli –source $ipmultiplay > /var/speedtest/linkmultiplay.txt


    Dessa forma:
    python2 /usr/bin/speedtest-cli --source re0 > /var/speedtest/linkmultiplay.txt

    Desse jeito não funfa.

    A variável busca o IP da interface e joga no campo onde so aceita IP "--source IP > /var/speedtest/linkmultiplay.txt


    Dessa forma não terá problemas caso use uma Operadora com IP dinâmico.



  • Olá pessoal, tudo bem, primeiro parabenizar pelo tutorial, me ajuda muito no dia dia.

    Depois que atualizei para versão 2.4.4 tenho recebido este erro quando executo o comando, alguém pode me ajudar?

    [2.4.4-RELEASE][admin@zfx.localdomain]/root/temp/speedtest-cli-master: /usr/bin/speedtest.py
    env: python2: No such file or directory

    Obrigado.



  • Após atualização da versão 2.4.4/FreeBSD11 o meu speedtest parou de funcionar, pesquisando encontrei o problema e estou atualizando o post original para a nova versão.

    Verifique se possui o python com pkg version | grep python
    Caso não tenha instalado execute o comando pkg add http://pkg.freebsd.org/freebsd:11:x86:64/latest/All/python27-2.7.15.txz
    Instalado python siga os comandos abaixo
    mkdir /root/temp
    cd /root/temp
    curl -Lo speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py
    chmod +x speedtest-cli

    Localize o executavel find /usr -type f -name 'python*' -perm -a+x

    Editar o arquivo vi /root/temp/speedtest-cli e alterar a primeira linha #!/usr/bin/env python para o endereço localizado que provavelmente será #!/usr/local/bin/python2.7

    Seguindo o roteiro basta digitar speedtest-cli

    Para mais informações sobre comandos utilize o link do desenvolvedor https://github.com/sivel/speedtest-cli