Como limitar o uso da largura de banda de rede no Linux usando o Trickle

Como limitar o uso da largura de banda de rede no Linux usando o Trickle

Você já encontrou situações em que um aplicativo dominou sua largura de banda de rede? Se você já esteve em uma situação em que um aplicativo comeu todo o seu tráfego, você valorizará o papel do aplicativo Shaper de largura de banda Trickle.

Ou você é um Administrador do sistema ou apenas um Usuário do Linux, Você precisa aprender como controlar as velocidades de upload e download para aplicativos para garantir que sua largura de banda de rede não seja queimada por um único aplicativo.

[Você também pode gostar: 16 ferramentas úteis de monitoramento de largura de banda para analisar o uso da rede no Linux]

O que é escuro?

Escorregadio é uma ferramenta de shaper de largura de banda de rede que nos permite gerenciar as velocidades de upload e download de aplicativos para impedir que qualquer um deles houver todos (ou a maioria) da largura de banda disponível.

Em poucas palavras, o Trickle permite controlar a taxa de tráfego de rede com base por aplicativo, em oposição ao controle por usuário, que é o exemplo clássico de largura de banda moldando em um ambiente cliente-servidor, e provavelmente é a configuração que somos mais familiar com.

Como funciona?

Além disso, uma gota pode nos ajudar a definir prioridades com base por aplicativo, para que, quando os limites gerais tenham sido definidos para todo o sistema, os aplicativos prioritários ainda obterão mais largura de banda automaticamente.

Para realizar essa tarefa, o Trickle define limites de tráfego para a maneira como os dados são enviados e recebidos de, soquetes usando conexões TCP. Devemos observar que, além das taxas de transferência de dados, o Trickle não modifica de forma alguma o comportamento do processo que ele está moldando a qualquer momento.

O que não pode fazer?

A única limitação, por assim dizer, é que o gotejamento não funcionará com aplicativos ou binários estaticamente vinculados Suid ou Sgid Bits definidos, pois usa vinculação e carregamento dinâmico para se colocar entre o processo moldado e seu soquete de rede associado. Trickle então atua como um proxy entre esses dois componentes de software.

Como o Trickle não requer privilégios de superusuário para executar, os usuários podem definir seus próprios limites de tráfego. Como isso pode não ser desejável, exploraremos como definir limites gerais que os usuários do sistema não podem exceder. Em outras palavras, os usuários ainda poderão gerenciar suas taxas de tráfego, mas sempre dentro dos limites definidos pelo administrador do sistema.

Ambiente de teste

Neste artigo, explicaremos como limitar a largura de banda de rede usada por aplicativos em um servidor Linux com uma gota.

Para gerar o tráfego necessário, usaremos ncftpput e ncftpget (Ambas as ferramentas estão disponíveis instalando ncftp) no cliente (CENTOS Servidor - Dev1: 192.168.0.17), e vsftpd No servidor (Debian - Dev2: 192.168.0.15) para fins de demonstração. As mesmas instruções também funcionam em Chapéu vermelho, Fedora e sistemas baseados no Ubuntu.

Instalando NCFTP e VSFTPD no Linux

1. Para RHEL/CENTOS 8/7, Ativar o repositório EPEL. Pacotes extras para o Enterprise Linux (EPEL) é um repositório de software gratuito e de código aberto de alta qualidade mantido pelo projeto Fedora e é 100% compatível com seus spinoffs, como Red Hat Enterprise Linux e CENTOS. Ambos escorregadio e ncftp são disponibilizados neste repositório.

2. Instalar ncftp do seguinte modo:

# yum update && sudo yum install ncftp [em sistemas baseados em redhat] # update de aptidão && install install ncftp [em sistemas baseados em Debian] 

3. Configure um servidor FTP em um servidor separado. Observe que, embora o FTP seja inerentemente inseguro, ele ainda é amplamente utilizado nos casos em que a segurança no upload ou download de arquivos não é necessária.

Estamos usando neste artigo para ilustrar as recompensas de gotejamento e porque mostra as taxas de transferência em stdout no cliente, e deixaremos a discussão sobre se deve ou não ser usado para outra data e hora.

# yum update && yum install vsftpd [em sistemas baseados em redhat] # APT UPDATE && apt install vsftpd [em sistemas baseados em Debian] 

Agora, edite o /etc/vsftpd/vsftpd.conf arquivo no servidor FTP da seguinte forma:

$ sudo nano/etc/vsftpd/vsftpd.conf ou $ sudo /etc /vsftpd.conf 

Fazer as seguintes alterações:

anonymous_enable = não local_enable = sim chroot_local_user = sim allow_writede_chroot = sim 

Depois disso, inicie o VSFTPD para sua sessão atual e habilitá -lo para iniciar automáticos em botas futuras:

# SystemCtl START VSFTPD [para sistemas baseados em SystemD] # SystemCtl Ativar vsftpd # Service vsftpd Iniciar [para sistemas baseados em Init] # chkconfig vsftpd em 

4. Se você optou por configurar o servidor FTP em um CENTOS/RHEL Gotada com teclas SSH para acesso remoto, você precisará de uma conta de usuário protegida por senha com o diretório e o arquivo apropriados para fazer upload e download do conteúdo desejado fora do diretório inicial da raiz.

Você pode navegar para o seu diretório doméstico inserindo o seguinte URL no seu navegador. Uma janela de login aparecerá solicitando uma conta de usuário e senha válidas no servidor FTP.

ftp: // 192.168.0.15 

Se a autenticação for bem -sucedida, você verá o conteúdo do seu diretório doméstico. Mais tarde neste tutorial, você poderá atualizar essa página para exibir os arquivos que foram enviados durante as etapas anteriores.

Árvore do diretório FTP

Como instalar o Trickle no Linux

Agora instale o Trickle via yum ou apt.

Para garantir uma instalação bem-sucedida, é considerado uma boa prática garantir que os pacotes atualmente instalados estejam atualizados (usando Atualização yum) antes de instalar a ferramenta em si.

# yum -y update && yum install blekle [em sistemas baseados em redhat] # apt -y update && install liple [em sistemas baseados em Debian] 

Verifique se o Trickle funcionará com o binário desejado. Como explicamos anteriormente, o Trickle só funcionará com binários usando bibliotecas dinâmicas ou compartilhadas. Para verificar se podemos usar esta ferramenta com um determinado aplicativo, podemos usar o conhecido LDD utilidade, onde LDD significa listar dependências dinâmicas.

Especificamente, procuraremos a presença de glibc (a biblioteca GNU C) Na lista de dependências dinâmicas de qualquer programa, porque é precisamente a biblioteca que define as chamadas do sistema envolvidas na comunicação através de soquetes.

Execute o seguinte comando contra um determinado binário para ver se o Trickle pode ser usado para moldar sua largura de banda:

# ldd $ (que [binário]) | Grep Libc.então 

Por exemplo,

# ldd $ (que ncftp) | Grep Libc.então 

cuja saída é:

# libc.então.6 => /lib64 /libc.então.6 (0x00007efff2e6c000) 

A sequência entre os colchetes na saída pode mudar de sistema para sistema e até entre as execuções subsequentes do mesmo comando, pois representa o endereço de carga da biblioteca na memória física.

Se o comando acima não retornar nenhum resultado, significa que o binário foi executado não usa libc, e, portanto, o Trickle não pode ser usado como modelador de largura de banda nesse caso.

Aprenda a usar o Trickle no Linux

O uso mais básico do Trickle está no modo independente. Usando essa abordagem, o Trickle é usado para definir explicitamente as velocidades de download e upload de um determinado aplicativo. Como explicamos anteriormente, por uma questão de brevidade, usaremos o mesmo aplicativo para testes de download e upload.

Correndo Flutle no modo independente

Compararemos as velocidades de download e upload com e sem usar o Trickle. O -d a opção indica a velocidade de download em kb/s, enquanto o -você Flag diz a Trickle para limitar a velocidade de upload pela mesma unidade. Além disso, usaremos o -s Flag, que especifica que esse gotejamento deve ser executado no modo independente.

A sintaxe básica para correr no modo independente é o seguinte:

# TLUFLE -S -D [Taxa de download em KB/S] -u [Taxa de upload em KB/S] 

Para realizar os seguintes exemplos por conta própria, certifique -se de ter escorregadio e ncftp instalado na máquina cliente (192.168.0.17 No meu caso).

Exemplo 1: Carregando um 2.Arquivo PDF de 8 MB com e sem gotejamento.

Estamos usando o livremente distribuível Fundamentos do Linux Arquivo PDF (disponível aqui) para os seguintes testes.

Inicialmente, você pode baixar este arquivo no seu diretório de trabalho atual com o seguinte comando:

# wget http: // linux-line.ser/arquivos/books/linuxfun.pdf 

A sintaxe para fazer upload de um arquivo para o nosso servidor FTP sem gotejamento é o seguinte:

# ncftpput -U Nome de usuário -p Senha 192.168.0.15 /Remote_Directory Local-Filename 

Onde /remote_directory é o caminho do diretório de upload em relação à casa do nome de usuário e Fileno local é um arquivo em seu diretório de trabalho atual.

Especificamente, sem gotejamento, obtemos uma velocidade de upload de pico de 52.02 MB/S (Observe que essa não é a velocidade média de upload médio, mas um pico inicial instantâneo) e o arquivo é carregado quase instantaneamente:

# ncftpput -U Nome de usuário -p Senha 192.168.0.15 /testdir linuxfun.pdf 

Saída:

Linuxfun.PDF: 2.79 MB 52.02 MB/S 

Com o Trickle, limitaremos a taxa de transferência de upload em 5 kb/s. Antes de enviar o arquivo pela segunda vez, precisamos excluí -lo do diretório de destino; de outra forma, ncftp nos informará que o arquivo no diretório de destino é o mesmo que estamos tentando fazer upload e não executará a transferência:

# rm/absoluto/path/to/destino/diretório/linuxfun.pdf 

Então:

# truque -s -u 5 ncftpput -u nome de usuário -p senha 111.111.111.111 /testdir linuxfun.pdf 

Saída:

Linuxfun.PDF: 2.79 MB 4.94 kb/s 

No exemplo acima, podemos ver que a velocidade média de upload caiu para ~ 5 kb/s.

Exemplo 2: baixando o mesmo 2.Arquivo PDF de 8 MB com e sem gotejamento

Primeiro, lembre -se de excluir o PDF do diretório de origem original:

# rm/absoluto/path/to/fonte/diretório/linuxfun.pdf 

Observe que os seguintes casos farão o download do arquivo remoto para o diretório atual na máquina cliente. Este fato é indicado pelo período ('.') que aparece após o endereço IP do servidor FTP.

Sem gotejamento:

# ncftpget -U Nome de usuário -P Senha 111.111.111.111 . /testdir/linuxfun.pdf 

Saída:

Linuxfun.PDF: 2.79 MB 260.53 MB/S 

Com escleto, limitando a velocidade de download em 20 kb/s:

# blekle -s -d 30 ncftpget -u nome de usuário -p senha 111.111.111.111 . /testdir/linuxfun.pdf 

Saída:

Linuxfun.PDF: 2.79 MB 17.76 kb/s 

Correndo Flutle no modo [não gerenciado] supervisionado

Trickle também pode ser executado no modo não gerenciado, seguindo uma série de parâmetros definidos em /etc/escorregadio.conf. Este arquivo define como o golpe (o daemon) se comporta e gerencia a gota.

Além disso, se queremos definir configurações globais a serem usadas, em geral, por todos os aplicativos, precisaremos usar o comando escorregadio. Este comando executa o daemon e nos permite definir limites de download e fazer upload que serão compartilhados por todos os aplicativos executados através do Trickle, sem que precisemos especificar limites a cada vez.

Por exemplo, executando:

# escorregido -d 50 -u 10 

Fará com que as velocidades de download e upload de qualquer aplicativo sejam executadas no Trickle sejam limitadas a 30 kb/s e 10 kb/s, respectivamente.

Observe que você pode verificar a qualquer momento, se está sendo executado e com que argumentos:

# ps -ef | Grep escorreu | grep -v grep 

Saída:

Raiz 16475 1 0 Dez24 ? 00:00:04 escorregou -d 50 -u 10 
Exemplo 3: Carregando um arquivo MP4 de 19 MB para o nosso servidor FTP usando com e sem gotejamento.

Neste exemplo, usaremos o “h distribuível livrementeE é o presente”Vídeo, disponível para download deste link.

Inicialmente, baixaremos este arquivo no seu diretório de trabalho atual com o seguinte comando:

# wget http: // mídia2.ldscdn.Org/Assets/Missionário/Our-Pople-2014/2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4 

Primeiro, começaremos o daemon escorregadio com o comando listado acima:

# escorregido -d 30 -u 10 

Sem gotejamento:

# ncftpput -U Nome de usuário -p Senha 192.168.0.15 /Testdir 2014-00-1460-HE-IS-A-GIFT-360P-ENG.MP4 

Saída:

2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4: 18.53 MB 36.31 mb/s 

Com gotejamento:

# blekle ncftpput -U Nome de usuário -p Senha 192.168.0.15 /Testdir 2014-00-1460-HE-IS-A-GIFT-360P-ENG.MP4 

Saída:

2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4: 18.53 MB 9.51 kb/s 

Como podemos ver na saída acima, a taxa de transferência de upload caiu para ~ 10 kb/s.

Exemplo 4: baixando o mesmo vídeo com e sem gotejamento

Como em Exemplo 2, Vamos baixar o arquivo no diretório de trabalho atual.

Sem gotejamento:

# ncftpget -U Nome de usuário -p Senha 192.168.0.15 . /testDir/2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4 

Saída:

2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4: 18.53 MB 108.34 MB/S 

Com gotejamento:

# blekle ncftpget -U Nome de usuário -p Senha 111.111.111.111 . /testDir/2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4 

Saída:

2014-00-1460-HE-IS-THE GIFT-360P-ENG.MP4: 18.53 MB 29.28 kb/s 

Que está de acordo com o limite de download definido anteriormente (30 kb/s).

Observação: Que, uma vez iniciado o daemon, não há necessidade de definir limites individuais para cada aplicativo que usa gotejamento.

Como mencionamos anteriormente, pode -se personalizar ainda mais a largura de banda de Trickle através de escorregadio.conf. Uma seção típica deste arquivo consiste no seguinte:

[Serviço] Prioridade = Time-Smoothing = Length-Smoothing =  

Onde,

  1. [serviço] indica o nome do aplicativo cuja largura de banda Uso que pretendemos moldar.
  2. Prioridade Permite -nos especificar um serviço para ter uma prioridade mais alta em relação a outra, não permitindo que um único aplicativo houve toda a largura de banda que o daemon está gerenciando. Quanto menor o número, mais largura de banda é atribuída ao [serviço].
  3. Suavizando tempo [Em segundos]: define com que intervalos de tempo escorregados tentarão deixar o aplicativo transferir e / ou receber dados. Valores menores (algo entre o intervalo de 0.1 - 1s) são ideais para aplicações interativas e resultarão em uma sessão mais contínua (suave), enquanto valores ligeiramente maiores (1 - 10 s) são melhores para aplicações que precisam de transferência em massa. Se nenhum valor for especificado, o padrão (5 s) será usado.
  4. Suavizante de comprimento [em KB]: A ideia é a mesma que no tempo, mas com base no comprimento de uma operação de E/S. Se nenhum valor for especificado, o padrão (10 kb) será usado.

Alterar os valores de suavização será traduzido para o aplicativo especificado por [serviço] usando taxas de transferência dentro de um intervalo em vez de um valor fixo. Infelizmente, não há fórmula para calcular os limites inferiores e superiores desse intervalo, pois depende principalmente de cada cenário de caso específico.

O seguinte é um escorreu.conf Exemplo de arquivo no cliente do CentOS 7 (192.168.0.17):

[ssh] prioridade = 1 sloorthing de tempo = 0.1 comprimento-suavor = 2 [FTP] Prioridade = 2 Smootha de tempo = 1 Comprimento Smoothing = 3 

Usando esta configuração, o escluído priorizará as conexões SSH sobre transferências de FTP. Observe que um processo interativo, como o SSH, usa valores menores de suavização do tempo, enquanto um serviço que executa transferências de dados em massa (FTP) usa um valor maior.

Os valores de suavização são responsáveis ​​pelas velocidades de download e upload em nosso exemplo anterior, sem corresponder ao valor exato especificado pelo daemon escorregadio, mas se movendo em um intervalo próximo a ele.

[Você também pode gostar: como proteger e endurecer o servidor OpenSsh]

Conclusão

Neste artigo, exploramos como limitar a largura de banda usada por aplicativos usando o Trickle em distribuições baseadas em Fedora e Debian / Derivativos. Outros possíveis casos de uso incluem, mas não estão limitados a:

  • Limitando a velocidade de download por meio de um utilitário de sistema, como WGET, ou um cliente de torrent, por exemplo.
  • Limitando a velocidade com que seu sistema pode ser atualizado via 'yum' (ou 'aptidão', se você estiver em um sistema baseado no Debian), o sistema de gerenciamento de pacotes.
  • Se o seu servidor estiver por trás de um proxy ou firewall (ou é o proxy ou o próprio firewall), você pode usar o Trickle para estabelecer limites no download e no upload ou na velocidade de comunicação com os clientes ou para o exterior.

Perguntas e comentários são muito bem -vindos. Sinta -se à vontade para usar o formulário abaixo para enviá -los nosso caminho.