25.05.2010 18:02
John Doe
 
Я не претендую на гуру организации сети, но ...
Сам я достаточно часто сижу по ssh на домашнем компьютере, который одновременно является прокси для нескольких других точек, раскиданных по интернету. Так надо. И при попытке скачать что-то объемное, мой ssh мягко говоря замедляет скорость отклика на нажатия клавиш, меня это очень огорчало. Возник вопрос: "Каким образом распределить сетевые приложения, чтобы они мне не мешали?". Сначала решение было в лоб. Проксей был squid, а в нем есть ограничители траффика:
Код:
delay_pools 3
delay_class 1 2
delay_access 1 allow my_out outshared
delay_access 1 deny all
delay_parameters 1 10000/20000 5000/10000

delay_class 2 2
delay_access 2 allow localnet timekillers cleartime
delay_access 2 allow localnet multimedia cleartime
delay_access 2 allow localnet streaming_media cleartime
delay_access 2 deny all
delay_parameters 2 5000/1000000 5000/1000000

delay_class 3 2
delay_access 3 allow forall
delay_access 3 deny all
delay_parameters 3 10000/20000 5000/10000
т.е. я вывел несколько портов в squid для подключения снаружи
Цитата:
acl outshared myportname
acl forall myportname
и тупо зарезал для них траффик, попутно задавливая потоковое видео, скачки и прочее. Народ сильно огорчился, что не может смотреть свою любимую порнографию в рабочее время, но тем не менее, мелкими объектами умудрялся портить мне жизнь. Я понял, что пришло время разобраться с шейпером. Задача последнего была в том, чтобы расставить приоритеты сетевым потокам и отправлять мои пакеты в первую очередь, а когда моих нет - отдавать все моим иждивенцам.
Во-первых, необходимо залезть в настройки ядра и включить QoS.
Далее, помечаем проходящие нужные нам пакеты через iptables (приведу часть конфига):
Код:
IPTABLES='/sbin/iptables'
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t mangle -N BalanceLoad
$IPTABLES -t mangle -A OUTPUT -s мой ип -j BalanceLoad

$IPTABLES -t mangle -A BalanceLoad -p tcp --sport 443 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A BalanceLoad -p tcp --sport 53 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A BalanceLoad -p udp --sport 53 -j MARK --set-mark 0x1

$IPTABLES -t mangle -A BalanceLoad -p tcp --sport 8123 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A BalanceLoad -p tcp --sport 8124 -j MARK --set-mark 0x4

$IPTABLES -t mangle -A BalanceLoad -p tcp --sport 10005 -j MARK --set-mark 0x5
поясню код... создается цепочка BalanceLoad. Выходящие порты помечаются метками от 1 до 5. В моем примере 8123 и 443 получают бОльший приоритет, чем 10005. Собственно, пока они получают просто метку, а не приоритет... Приоритеты расставляются ниже (не забываем ставить iproute2)
Код:
CEIL=9000
tc qdisc del root dev eth1
tc qdisc add dev eth1 root handle 1: htb default 15
tc class add dev eth1 parent 1: classid 1:1 htb rate ${CEIL}kbit ceil ${CEIL}kbit
tc class add dev eth1 parent 1:1 classid 1:10 htb rate 80kbit ceil ${CEIL}kbit prio 0
tc class add dev eth1 parent 1:1 classid 1:11 htb rate 100kbit ceil ${CEIL}kbit prio 1
tc class add dev eth1 parent 1:1 classid 1:12 htb rate 10kbit ceil ${CEIL}kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:13 htb rate 10kbit ceil ${CEIL}kbit prio 2
tc class add dev eth1 parent 1:1 classid 1:14 htb rate 10kbit ceil ${CEIL}kbit prio 3
tc class add dev eth1 parent 1:1 classid 1:15 htb rate 10kbit ceil ${CEIL}kbit prio 3
tc qdisc add dev eth1 parent 1:12 handle 120: sfq perturb 10
tc qdisc add dev eth1 parent 1:13 handle 130: sfq perturb 10
tc qdisc add dev eth1 parent 1:14 handle 140: sfq perturb 10
tc qdisc add dev eth1 parent 1:15 handle 150: sfq perturb 10
tc filter add dev eth1 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
tc filter add dev eth1 parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
tc filter add dev eth1 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
tc filter add dev eth1 parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
tc filter add dev eth1 parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14
tc filter add dev eth1 parent 1:0 protocol ip prio 6 handle 6 fw classid 1:15
здесь немного сложнее... Создается дерево root, с классами 1:10-1:15. По умолчанию выбирается 15 класс, т.е. все, что мы забудем выделить - идет по минимальному приоритету. rate в данном случае описывает гарантированную ширину канала, т.е. сколько пакеты этого класса получат в любом случае. $CEIL - потолок канала (нельзя брать полностью все). По тому хендлу, которым мы выше метили пакеты, пакеты укладываются в классы. От гарантированной ширины канала до $CEIL канал будет выдаваться уже по приоритетам, т.е. сначала тому, что в 1:10, а 1:15 - в последнюю очередь.
Вы себе представить не можете, насколько комфортно стало работать. И овцы целы (клиенты рады, что перестала резаться порнуха и достаточно быстро все грузится) и волки сыты, все, что у меня в ssh крутится - просто летает.
Может показаться сложным, но для работы достаточно скопипастить приведенный выше текст и поправить маркировку в iptables-части.
Часовой пояс GMT +3, время: 08:58.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.