Можно ли ограничить пропускную способность загрузки на основе «IP» с помощью «tc», «htb» и «iptables»? (Ограничение на загрузку не требуется)

Вы не можете. Bash будет работать только с целыми числами. Для большей точности используйте что-то вроде bc.

4
12.06.2015, 13:38
1 ответ

почему вы использовали 172.16.16.11 в качестве исходного IP-адреса вместо.10.3 и/или.10.4 ?!

Я использовал локальные виртуальные машины (, работающие под управлением «nc -klvp 42 >/dev/null» ), подключенные к локальному открытому -интерфейсу vswitch. чтобы продемонстрировать формирование трафика для некоторых IP-адресов src, я удалил параметр «ceil» в «классе 1 :20».

мой скрипт:

#!/bin/bash
export IF_INET=ovs-br0
export UNIT=kbps

export BW_MAX=2048
export BW_CLIENT=128

tc qdisc del dev ${IF_INET} root &>/dev/null
tc qdisc add dev ${IF_INET} root handle 1: htb default 10

tc class add dev ${IF_INET} parent 1: classid 1:1 htb rate ${BW_MAX}$UNIT
tc class add dev ${IF_INET} parent 1:1 classid 1:10 htb rate $((${BW_MAX} - ${BW_CLIENT}))$UNIT ceil ${BW_MAX}$UNIT
tc class add dev ${IF_INET} parent 1:1 classid 1:20 htb rate ${BW_CLIENT}$UNIT 

tc filter add dev ${IF_INET} parent 1:0 protocol ip prio 1 u32 match ip src 172.16.10.3/32 flowid 1:20
tc filter add dev ${IF_INET} parent 1:0 protocol ip prio 1 u32 match ip src 172.16.10.4/32 flowid 1:20

локальные IP-адреса/маршруты с разными исходными IP-адресами:

section61:~ # ip a s dev ovs-br0 | grep 172.16.1
inet 172.16.10.4/24 scope global ovs-br0
inet 172.16.10.3/24 scope global secondary ovs-br0
inet 172.16.10.5/24 scope global secondary ovs-br0
inet 172.16.10.6/24 scope global secondary ovs-br0

section61:~ # ip route get 172.16.10.13 | grep -v cache 
172.16.10.13 dev ovs-br0 src 172.16.10.3 uid 0 
section61:~ # ip route get 172.16.10.14 | grep -v cache 
172.16.10.14 dev ovs-br0 src 172.16.10.4 uid 0 
section61:~ # ip route get 172.16.10.15 | grep -v cache 
172.16.10.15 dev ovs-br0 src 172.16.10.5 uid 0 
section61:~ # ip route get 172.16.10.16 | grep -v cache 
172.16.10.16 dev ovs-br0 src 172.16.10.6 uid 0 

два потока данных с использованием разных исходных IP-адресов

section61:~ # dd if=/dev/zero of=/dev/stdout count=$((1*1024*1024)) bs=1024 | pv | nc 172.16.10.13 42
7.03MiB 0:00:58 [ 120KiB/s] [                                                                          <=>               ]

section61:~ # dd if=/dev/zero of=/dev/stdout count=$((4*1024*1024)) bs=1024 | pv | nc 172.16.10.15 42
 135MiB 0:01:17 [1.76MiB/s] [                                        <=>                                                 ]

для проверки формирования трафика классов qdisc я настоятельно рекомендую запустить bmon

подсказки:

  • Если вы используете "ceil" в классе 1 :20, то вам придется создать два потока данных одновременно, чтобы полностью насытить 1 :10! иначе 1 :20 получит неиспользованное напоминание 1 :10
  • использование «iptables mangle.. match -set» для классификации пакетов тоже должно работать.

ХТХ
С уважением!

Стефан К.

openSUSE Leap 15.1 -Linux 4.12.14 -lp151.28.75 -по умолчанию

0
30.10.2020, 16:30

Теги

Похожие вопросы