MyDC.ru _ PtokaX под *nix _ Отдаем Ptokax Гарантированную Часть Интернет Канала
Автор: mariner 26.1.2009, 18:34
Есть такая отличная штука на линукс, как пакет IpRoute2 -> http://mydc.ru/r/?http://lartc.org/ <- Сейчас данный пакет входит в состав ядра (версия 2.6, в 2.4 его не было, необходимо было накатывать модулем). Так вот, с помошью этого пакета можно задать необходимую вам скорость отдачи данных и\или приема на каждый порт. Задача может быть жесткая (то бишь тока определенная скорость), либо динамическая. Ошишу свою ситуацию - есть хаб, кроме того сервер с хабом раздает файлы по dc++, torrent и http протоколу. И в результате траффик хаба перекрывался другим траффиком (в основном от вэбсервера, что вызывало дикие тормоза чата на хабе). Тогда решил озаботиться этой проблемой и начал "шэйпить" траффик.
Для этого написал скрипт и добавил в автозапуск. Как это сделать не буду писать, ибо это проблемы каждого человека, что и как он будет автозапускать....
Код
#!/bin/bash # переменные, меняем если надо. ETHERNET_DEVICE="ppp0" # линк к провайдеру LINK_SPEED_PROV="100000Kbit" # максимальная скорость по линку UPLOAD_SPEED1="8000Kbit" # скорость первого типа траффика (это вэбсервер) UPLOAD_SPEED2="3000Kbit" # скорость второго типа траффика (это хаб) UPLOAD_SPEED3="9000Kbit" # скорость для остального траффика PORT1="80" # порт для первого типа PORT2="411" # порт для второго типа
# удаляем предыдущие фильтры tc qdisc del dev $ETHERNET_DEVICE root
# задаем максимальную скорость интерфейса tc class add dev $ETHERNET_DEVICE parent 1: classid 1:1 htb rate $LINK_SPEED_PROV
# задаем классы "шейпинга" # тут надо поподробней. Как мы видим, у классвов есть номера. К примеру [b]classid 1:10[/b] # по ним в дальнейшем будут задаваться вильтры. # Кроме того, у каждого класса есть rate - это скорость, минимальная для данного класса. # То есть, при полной занятости канала, эта скорость будет только у данного типа траффика. # А вот ceil задает максимально возможную скорость. То есть представьте, что у вас вдруг вырос остальной траффик #(3ий подвид), а траффика вэбсервера нет или он ниже 8ми мегабит. Тогда остатока канала будет отдан траффику 3его вида. # И так везде. То есть канал будет максимально забит, но проблем с чатом хаба или отдачей не будет возникать :) # Добавление: по умолчанию, , если ceil не задан, то ceil=rate! В классах задаются приоритеты - от 0 до 7 (7 - самый низкий) tc class add dev $ETHERNET_DEVICE parent 1:1 classid 1:10 htb rate $UPLOAD_SPEED1 ceil $LINK_SPEED_PROV prio 1 tc class add dev $ETHERNET_DEVICE parent 1:1 classid 1:11 htb rate $UPLOAD_SPEED2 ceil $LINK_SPEED_PROV prio 0 # create our REST class for unutilized bandwidth tc class add dev $ETHERNET_DEVICE parent 1:1 classid 1:12 htb rate $UPLOAD_SPEED3 ceil $LINK_SPEED_PROV prio 2
# Задание фильтров и привязка их к нужным портам. Так же здесь задается приоритеты траффика (это цифра после [b]prio[/b]) tc filter add dev $ETHERNET_DEVICE protocol ip parent 1:0 prio 1 u32 match ip sport $PORT1 0xffff flowid 1:10 tc filter add dev $ETHERNET_DEVICE protocol ip parent 1:0 prio 1 u32 match ip sport $PORT2 0xffff flowid 1:11
# Сообщение о завершении работы скрипта. echo "Shaper loaded!"
Собственно все. Можно добавлять много фильтров. Заметно больше. Можно рулить траффиком компьютеров внутри локальной сети, находящейся за сервером. Но об этом нужно читать на -> http://mydc.ru/r/?http://lartc.org/ <- или http://mydc.ru/r/?http://remizov.pp.ru/ru/trn/doc/manuals/htb-manual (по русски)
PS Ну как, полезно?
PPS обновил и кое-что добавил
Автор: Jaska 26.1.2009, 20:48
Спасибо. Именно как раз то что мне надо!
Автор: mariner 26.1.2009, 21:15
как бэ пиши, если чо надо подскажу ;)
Автор: intlive 27.1.2009, 7:46
А под Win2003 можно трафиком порулить?
Автор: mariner 27.1.2009, 12:30
хз, под венду НИЧЕГО такого не видел. Если и есть программное решение - то скорее всего оно нехило грузит компа и оперативку есть.
Автор: hkk 3.2.2009, 17:44
добрый вечер подскажите пожалуйста мне надо ограничить скорость п2п клиента microdc2 порт 16099 - udp
#!/bin/bash # переменные, меняем если надо. ETHERNET_DEVICE="eth0" # линк к провайдеру LINK_SPEED_PROV="1000000Kbit" # максимальная скорость по линку UPLOAD_SPEED1="8000Kbit" # скорость первого типа траффика (это вэбсервер) UPLOAD_SPEED2="2000Kbit" # скорость второго типа траффика (это хаб) UPLOAD_SPEED3="9000Kbit" # скорость для остального траффика PORT1="80" # порт для первого типа PORT2="16099" # порт для второго типа
tc class add dev $ETHERNET_DEVICE parent 1: classid 1:1 htb rate $LINK_SPEED_PROV
tc class add dev $ETHERNET_DEVICE parent 1:1 classid 1:10 htb rate $UPLOAD_SPEED1 ceil $LINK_SPEED_PROV tc class add dev $ETHERNET_DEVICE parent 1:1 classid 1:11 htb rate $UPLOAD_SPEED2 ceil $LINK_SPEED_PROV
tc class add dev $ETHERNET_DEVICE parent 1:1 classid 1:12 htb rate $UPLOAD_SPEED3 ceil $LINK_SPEED_PROV
tc filter add dev $ETHERNET_DEVICE protocol ip parent 1:0 prio 1 u32 match ip sport $PORT1 0xffff flowid 1:10 tc filter add dev $ETHERNET_DEVICE protocol ip parent 1:0 prio 1 u32 match ip dport $PORT2 0xffff flowid 1:11 tc filter add dev $ETHERNET_DEVICE protocol ip parent 1:0 prio 1 u32 match ip sport $PORT2 0xffff flowid 1:11
echo "Shaper loaded!"
Не работает почемуто.. Ось SLES 10 SP2
uname -a Linux LuberNETX1 2.6.16.60-0.34-bigsmp #1 SMP Fri Jan 16 14:59:01 UTC 2009 i686 athlon i386 GNU/Linux
Автор: mariner 3.2.2009, 18:42
вроде как бы так... но, у тебя лишний фильтр.
Код
tc filter add dev $ETHERNET_DEVICE protocol ip parent 1:0 prio 1 u32 match ip sport $PORT2 0xffff flowid 1:11
PS а в слесе есть iproute2 ? точнее, он включен или нет? PPS у тя будет 2 мбита на дц.
в таком случае я не знаю, почему не работает. PS а в чем нерабочесть выражается. Вы уж простите за глупый вопрос.
Автор: hkk 4.2.2009, 7:55
запустил тот скрипт, а скорость на 1699 порту (этот порт прописан в настройках дц клиента) не ограничивается. скачана с клиента достигает 8 мегабайт\с
Автор: mariner 4.2.2009, 8:37
посмотрика в iotop iftop откуда реально оно качает. PS этот скрипт для tcp любого порта и кроме того, почитай повнимательнее описание. думаю поймешь,что надо ceil вконце нужного правила убрать
Кроме того дцшка может сама порты открывать случайные, если она в активе!
Автор: mariner 20.4.2009, 12:35
Прошу. Обновил статейку. Добавить приоритеты к классам. Сделал более мягкие переходы. (для этого в конец добавлены определения краевых классов)