Контроль за исходящим и маршрутизируемым трафиком очень важен. Один из простейших способов это использовать tc -Traffic Control.
Для того, что бы просмотреть существующие правила выполните :
Результат будет приблизительно такой :
Sent 7344577001 bytes 16278666 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 0p requeues 0
Для того, что бы убедиться в работе нашего шейпера используем команду ping. Эталонным я использую хост google.com:
на выходе:
64 bytes from hb-in-f99.1e100.net (74.125.87.99): icmp_seq=1 ttl=57 time=24.6 ms
64 bytes from hb-in-f99.1e100.net (74.125.87.99): icmp_seq=2 ttl=57 time=24.9 ms
64 bytes from hb-in-f99.1e100.net (74.125.87.99): icmp_seq=3 ttl=57 time=24.6 ms
64 bytes from hb-in-f99.1e100.net (74.125.87.99): icmp_seq=4 ttl=57 time=25.1 ms
64 bytes from hb-in-f99.1e100.net (74.125.87.99): icmp_seq=5 ttl=57 time=24.7 ms
64 bytes from hb-in-f99.1e100.net (74.125.87.99): icmp_seq=6 ttl=57 time=25.1 ms
Теперь добавим шейпер:
и снова запустим ping:
результат:
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=1 ttl=57 time=225 ms
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=2 ttl=57 time=226 ms
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=3 ttl=56 time=225 ms
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=4 ttl=56 time=226 ms
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=5 ttl=57 time=225 ms
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=6 ttl=57 time=226 ms
64 bytes from hb-in-f104.1e100.net (74.125.87.104): icmp_seq=7 ttl=56 time=226 ms
Просмотрев текущие правила:
мы увидим следующее:
Sent 169701 bytes 1000 pkt (dropped 0, overlimits 0 requeues 0)
rate 0bit 0pps backlog 0b 3p requeues 0
Для того, что бы удалить все правила выполните :
Рассмотрим вариант с использованием алгоритма Token Bucket (Алгоритм текущего ведра). Для того, что бы создать TBF с максимальной скоростью 1mb/s, пиковой скоростью 2mb/s и 10 kb буфер:
Другой алгоритм, это HTB — Hierarchy Token Bucket(иерархический буфер токенов) реализует мощную иерархию классов с упором на согласование с существующей практикой. HTB обеспечивает гарантированную полосу пропускания для классов, также позволяет устанавливать верхние пределы межклассового разделения очереди. Содержит объекты ограничения, базирующиеся на TBF, и может устанавливать приоритеты для классов.
Как пример, давайте зашейпим исходящий HTTP трафик. Первое удалим все текущие правила:
Включим очередь :
Созадем клас с ограничениями в 512 kb/s и бурстом в 640 kb/s на 80 порту:
Дальше нам необходимо в iptables добавить правило, которое будет маркировать все макеты идущие с 80 порта:
Сохраняем текущие правила:
И последнее, мы назначаем qdisc:
Для того, что бы протестировать ваши правила воспользуйтесь одной из следующих утилит:
iptables -t mangle -n -v -L
iptraf
watch /sbin/tc -s -d class show dev eth0