Estou jogando com os recursos de controle de tráfego do Linux para restringir a largura de banda de saída do KVM VM e fico preso ao usar filtros para corresponder destinos para uma classe rápida e para uma classe lenta (padrão) para uma determinada VM.
A interface de saída de rede física é "eth0" (1 Gbit) e faz parte do dispositivo de ligação "bond0". "bond0" é parte de "br0" ao longo das placas de rede virtual de máquinas virtuais "vmn {0,1,2,3,4}".
O caminho de um pacote de rede VM para a Internet é: eth0 (vm) - > vmn0 (host) - > br0 (host) - > bond0 (host) - > nic0 (host) - > A Internet.
Estou tentando definir duas classes:
- Rápido: saída de 500 Mbps para destinos 10.0.1.0/24 e 10.0.2.0/24
- Lenta (padrão): 100 Mbps de saída para todos os outros destinos
Eu tentei a seguinte abordagem no host:
# If the qdisc was previously created, delete it
tc qdisc del dev vmn0 root
# New HTB qdisc. By default it goes to our slow traffic class (1:11)
tc qdisc add dev vmn0 root handle 1: htb default 11
# Classes. 1:1 default (500 Mbit) ; 1:10 -> fast (500Mbit); 1:11 -> slow (100Mbit)
tc class add dev vmn0 parent 1: classid 1:1 htb rate 500000kbit ceil 500000kbit quantum 1500
tc class add dev vmn0 parent 1:1 classid 1:10 htb rate 1000kbit ceil 500000kbit
tc class add dev vmn0 parent 1:1 classid 1:11 htb rate 1000kbit ceil 100000kbit
# Associates the fast traffic class with our desireed networks
tc filter add dev vmn0 parent 1: protocol ip prio 10 u32 match ip dst 10.0.1.0/24 flowid 1:10
tc filter add dev vmn0 parent 1: protocol ip prio 10 u32 match ip dst 10.0.2.0/24 flowid 1:10
# Default match if any of previous rules not applied to a slow rate 1:11. Superfluous like traffic goes to 1:11 by default?
tc filter add dev vmn0 parent 1: protocol ip prio 20 u32 match ip dst 0.0.0.0/0 flowid 1:11
Da VM "vma" com dispositivo de rede "vmn0" associado e endereço IP "10.0.1.2" eu corri "iperf -s".
De uma VM "vmb" em um host e endereço IP diferentes "10.0.2.2" Eu executei "iperf -c 10.0.1.2" com os seguintes resultados:
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 57.8 MBytes 485 Mbits/sec 0 1.84 MBytes
[ 4] 1.00-2.00 sec 56.2 MBytes 472 Mbits/sec 0 1.84 MBytes
[ 4] 2.00-3.00 sec 56.2 MBytes 472 Mbits/sec 0 1.84 MBytes
[ 4] 3.00-4.00 sec 55.0 MBytes 461 Mbits/sec 0 1.84 MBytes
[ 4] 4.00-5.00 sec 56.2 MBytes 472 Mbits/sec 0 1.84 MBytes
Parece bom ", 10.0.2.2" é taxa limitada a ~ 500 Mbit como deveria.
Agora, a partir de uma VM "vmc" em um host diferente novamente e do endereço IP "192.168.1.2":
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-1.00 sec 57.3 MBytes 481 Mbits/sec 0 1.21 MBytes
[ 4] 1.00-2.00 sec 56.4 MBytes 473 Mbits/sec 0 1.21 MBytes
[ 4] 2.00-3.00 sec 56.7 MBytes 476 Mbits/sec 0 1.21 MBytes
[ 4] 3.00-4.00 sec 56.7 MBytes 476 Mbits/sec 0 1.21 MBytes
[ 4] 4.00-5.00 sec 56.5 MBytes 474 Mbits/sec 0 1.21 MBytes
Isso não é o que eu esperava, pois ele deve ter ~ 100 Mbit (classe padrão e uma correspondência para qualquer não correspondido anteriormente).
Alguém pode ajudar com isso?