Prioriza o tráfego de computadores da rede local

7

Estou executando o cliente de torrent no meu servidor Ubuntu sem cabeça. Também o número de computadores está conectado a este servidor, que é usado como gateway / roteador de internet. A questão é se é possível configurar o iptables para priorizar o tráfego da eth1 (lan if) sobre o tráfego local gerado pelo servidor? Algo como QOS ..

    
por Pablo 06.01.2014 / 12:58

3 respostas

4

Existem várias alternativas para alcançar o que você está procurando. Mas antes de tudo, sim, é possível. Porém, muitas das possibilidades são bastante complexas.

Uma das opções mais fáceis pode ser executar o daemon do torrent sob um próprio user \ group. Em seguida, use iptables para marcar todo o tráfego daquele usuário \ grupo com um sinalizador. Então, depois, deixe o filtro tc naquele sinalizador e coloque-o na fila de baixa prioridade. Veja o final deste wiki para uma ideia.

Para o que você está pedindo, você precisa apenas de duas filas ( fig 1. ), uma baixa prioridade e uma alta. Embora seja melhor ficar com algo mais próximo deste exemplo . Você pode adotar o exemplo para as suas necessidades, basta soltar a peça com nat e fazer com que a marca padrão seja um valor menor que a marca que você usará para o tráfego gerado pelo daemon.

Então, para minha sugestão, você pode usar algo como iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j MARK --set-mark 6 ZZZZ é o identificador do usuário.

Uma alternativa para definir um sinalizador pode ser usar iptables -A OUTPUT -t mangle -m owner --uid-owner ZZZZ -j CLASSIFY --set-class X:Y , em que X e Y é o identificador de classe, e ZZZZ é o identificador do usuário.

Fig 1:

+---------+
| root 1: |
+---------+
     |
+------------+
| class 1:1  |
+------------+
  |      |    
+----+ +----+ 
|1:10| |1:11| 
+----+ +----+

O melhor é ter uma folha para cada marca fw. Mas meu melhor conselho agora é ler e tentar entender o exemplo acima para adotá-lo para suas necessidades. Se você tiver alguma dúvida, adicione-as.

No exemplo acima , é importante que você entenda essa parte ( > fig 2. ) quando você quiser escrever regras iptables para marcar ou classificar o tráfego. Para uma breve explicação, com um diagrama de aparência um pouco diferente, dê uma olhada nisso .

Fig 2:

First you have to understand how packet traverse the filters with iptables:

        +------------+                +---------+               +-------------+
Packet -| PREROUTING |--- routing-----| FORWARD |-------+-------| POSTROUTING |- Packets
input   +------------+    decision    +---------+       |       +-------------+    out
                             |                          |
                        +-------+                    +--------+   
                        | INPUT |---- Local process -| OUTPUT |
                        +-------+                    +--------+

Isso apontará você na direção certa:

Regras, orientações e abordagens

Roteamento avançado de Linux & amp; HOWTO de Controle de Tráfego: Taxa de limitação de um único host ou máscara de rede

Uma jornada de controle de tráfego: cenários do mundo real

Tutorial Iptables 1.2.2

    
por Anders F. U. Kiær 09.01.2014 / 14:13
0

A qualidade do serviço é um assunto bastante complexo - o link postado por @ anders-f-u-kiaer é possivelmente a melhor solução, mas bastante complexa. Eu não sou de todo um especialista nisso, então não vou comentar.

No entanto, muitas vezes uma solução mais simples pode ser útil. Se você quiser apenas limitar a largura de banda de um programa (por exemplo, o cliente de torrent), uma solução muito simples é usar trickle (1).

Você pode instalá-lo por

sudo apt-get install trickle 

e depois você executa um programa com

trickle -d 100 -u 50 program 

e program terão sua largura de banda máxima de 100 kbps para download e 50 kbps para upload. Muito mais opções e informações sobre trickle podem ser encontradas nesta página em tuxradar: controle sua largura de banda com gotejamento .

(1) Isso é diferente da QoS adequada: a largura de banda usada pelo programa "aleijado" será reduzida a cada vez, não apenas quando houver demanda nos serviços de prioridade mais alta, como acontecerá com a QoS adequada.

    
por Rmano 09.01.2014 / 17:33
-1

Você não faz isso com o iptables. Você precisa alterar as métricas de roteamento.

Defina as métricas de roteamento para uma interface de rede - Diretório do Ubuntu Apps

Para dar a todas as outras interfaces uma prioridade mais alta do que a wlan0, simplesmente execute:

ifmetric wlan0 1

Para redefinir as métricas das rotas anexadas à wlan0, basta executar:

 ifmetric wlan0 0

mais informações aqui: link

    
por Xavier J 09.01.2014 / 02:45