shyrikos 0 Опубликовано: 2008-02-14 15:43:27 Share Опубликовано: 2008-02-14 15:43:27 Следующая задача: имеется асинхронное соединение с Интернетом со скоростью 4000 kbit\s - входящая, и 128+128+128 kbit\s - исходящая(3 турбо модема). Сервер: suse 10.3(в планах gentoo). поднят NAT и благополучно работает. Распределение нагрузки между 3 модемами. Требуется: 1)порезать скорость исходящую(с точки зрения пользователя) до "не более 64 kbit\s" , и входящую (с точки зрения пользователя) "не более 512 kbit\s" 2)сделать динамическое распределение пропускной способности канала. Тобищь распределить по классам трафик и установить разные приоритеты. 3)поставить все это в автозапуск. Пока что мои наработки по решению задач и сразу вопросы: 1)Ни как ни могу определиться, что использовать для первой задачи CBQ.init или HTB.init - google находит примеры 5 летней давности. что лучше CBQ.init или HTB.init? по CBQ.init гугл дал больще результата: #................................---------..............192.1 68.1.0 ... #ВНЕШНИЙ КАНАЛ ----- eth1-| linux |-eth0------[локальная сеть] #................................---------................... ...... ... #трафик к клиенту поднимаем на eth0 смотрящей в сеть #cbq-512.client-out DEVICE=eth0,10Mbit,1Mbit RATE=512Kbit WEIGHT=50Kbit PRIO=5 RULE=192.168.1.0/24 # трафик от клиента привязываем к интерфейсу eth1 смотрящей # на следующий комп на котором стоят исходящие турбо-модемы. # предполагаю так делать, чтобы не гонять трафик за зря с одного # компа шлюза на другой с большой скоростью. #cbq-64.client-in DEVICE=eth1,10Mbit,1Mbit RATE=64Kbit WEIGHT=5Kbit PRIO=5 RULE=192.168.1.0/24, Из-за того что правило на eth1 после Nat-a, проблем быть не должно? файлы cbq-512.client-out и cbq-64.client-in просто кидаем в папку с CBQ.init и все? 2)скорость, однако порезали, но с таким каналом исходящим далеко не уйдешь... нужно трафик разбить на классы. Разбивать на классы трафик я буду непосредственно на каждом модеме находящемся на втором компе шлюза .Напомню, что весь трафик пришедший с первого компа шлюза(тот который мы резали в пункте 1) распределен равномерно между всеми модемами. Скрипты будут абсолютно идентичные кроме номера интерфейсов,через которые работают модемы. Опять же стает вопрос HTB или CBQ? склоняюсь к htb, так как он проще. И на ядре 2.6 не нужно не каких патчей, да? что меньше жрет ресурсов не знаю... Решение задачи не раз приводилось в интернете. я нашел вот такой вариант, пока что даже не пробовал но вроде все ясно: #!/bin/sh IPTABLES=/sbin/iptables TC=/sbin/tc DEV_IN=eth0 RATE_IN=360 case "$1" in start) ########################## IN ############################# $TC qdisc add dev $DEV_IN root handle 1:0 htb default 99 $TC class add dev $DEV_IN parent 1:0 classid 1:1 htb rate ${RATE_IN}kbit ceil ${RATE_IN}kbit $TC class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[$RATE_IN/8]kbit ceil ${$RATE_IN/2}kbit prio 0 $TC class add dev $DEV_IN parent 1:1 classid 1:25 htb rate $[$RATE_IN/8]kbit ceil ${$RATE_IN/2}kbit prio 1 $TC class add dev $DEV_IN parent 1:1 classid 1:50 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 2 $TC class add dev $DEV_IN parent 1:1 classid 1:75 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 3 $TC class add dev $DEV_IN parent 1:1 classid 1:99 htb rate $[$RATE_IN/4]kbit ceil ${RATE_IN}kbit prio 4 $TC qdisc add dev $DEV_IN parent 1:10 handle 10: pfifo limit 5 $TC qdisc add dev $DEV_IN parent 1:25 handle 25: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:50 handle 50: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:75 handle 75: sfq perturb 10 $TC qdisc add dev $DEV_IN parent 1:99 handle 99: sfq perturb 10 #### Маркировка пакетов # добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу,которую будем # использовать для фильтрациии установки fwmark iptables -t mangle -N MYSHAPER-IN iptables -t mangle -I POSTROUTING -o $DEV_IN -j MYSHAPER-IN # маркируем пакеты с помощью fwmark - устанавливаем значения 10-99 в зависимости от # нужного класса. Высший приоритет - 10. # Низкоприоритетный трафик iptables -t mangle -A MYSHAPER-IN -p tcp --sport 0:1024 -j MARK --set-mark 99 iptables -t mangle -A MYSHAPER-IN -p tcp --dport 0:1024 -j MARK --set-mark 99 # интернет-пейджер aol iptables -t mangle -A MYSHAPER-IN -p tcp --sport 5190 -j MARK --set-mark 75 # irc iptables -t mangle -A MYSHAPER-IN -p tcp --sport 6667 -j MARK --set-mark 75 iptables -t mangle -A MYSHAPER-IN -p tcp --sport 9944 -j MARK --set-mark 75 # ICMP (ping) - высокий приоритет, # будем удивлять друзей iptables -t mangle -A MYSHAPER-IN -p icmp -j MARK --set-mark 25 # распознавание имен DNS (маленькие пакеты) iptables -t mangle -A MYSHAPER-IN -p udp -j MARK --set-mark 25 # secure shell iptables -t mangle -A MYSHAPER-IN -p tcp --dport 22 -j MARK --set-mark 10 iptables -t mangle -A MYSHAPER-IN -p tcp --sport 22 -j MARK --set-mark 10 # telnet (ew...) iptables -t mangle -A MYSHAPER-IN -p tcp --dport 23 -j MARK --set-mark 25 iptables -t mangle -A MYSHAPER-IN -p tcp --sport 23 -j MARK --set-mark 25 # маленькие пакеты, скорее всего ACK-пакеты iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 25 #тут ускрил кого нибудь в офисе iptables -t mangle -A MYSHAPER-IN -d 192.168.1.7 -j MARK --set-mark 10 # избыточно - смаркировать все неотмаркированые пакеты как 99 (низкий проиритет) iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 99 $TC filter add dev $DEV_IN parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10 $TC filter add dev $DEV_IN parent 1:0 prio 1 protocol ip handle 25 fw flowid 1:25 $TC filter add dev $DEV_IN parent 1:0 prio 2 protocol ip handle 50 fw flowid 1:50 $TC filter add dev $DEV_IN parent 1:0 prio 3 protocol ip handle 75 fw flowid 1:75 $TC filter add dev $DEV_IN parent 1:0 prio 4 protocol ip handle 99 fw flowid 1:99 echo "Shaper on $DEV_IN started ($RATE_IN kbit/s)" ;; stop) tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null iptables -t mangle -D POSTROUTING -o $DEV_OUT -j MYSHAPER-OUT 2> /dev/null > /dev/null iptables -t mangle -F MYSHAPER-OUT 2> /dev/null > /dev/null iptables -t mangle -X MYSHAPER-OUT 2> /dev/null > /dev/null iptables -t mangle -D POSTROUTING -o $DEV_IN -j MYSHAPER-IN 2> /dev/null > /dev/null iptables -t mangle -F MYSHAPER-IN 2> /dev/null > /dev/null iptables -t mangle -X MYSHAPER-IN 2> /dev/null > /dev/null echo "Shaper removed" ;; restart) $0 stop $0 start ;; status) echo "[qdisc IN]" $TC -s qdisc show dev $DEV_IN echo "[class IN]" $TC -s class show dev $DEV_IN echo "[filter IN]" $TC -s filter show dev $DEV_IN ;; *) echo "Usage: $0 {start|stop|restart|status}" ;; esac exit 0 Вот, и так на каждый модем. 3) Возникает вопрос куда положить скрипт из 2-го пункта?как запускать автоматом 1 пункт и второй? Ссылка на сообщение Поделиться на других сайтах
Cell 7 Опубліковано: 2008-02-15 19:01:09 Share Опубліковано: 2008-02-15 19:01:09 Из-за того что правило на eth1 после Nat-a, проблем быть не должно? Как это не должно - должно да еще как )) см. соседнюю ветку файлы cbq-512.client-out и cbq-64.client-in просто кидаем в папку с CBQ.init и все? файлы надо как минимум кидать не туда ))) а в /etc/sysconfig/cbq/ Ссылка на сообщение Поделиться на других сайтах
shyrikos 0 Опубліковано: 2008-02-16 11:02:47 Автор Share Опубліковано: 2008-02-16 11:02:47 Из-за того что правило на eth1 после Nat-a, проблем быть не должно? Как это не должно - должно да еще как )) см. соседнюю ветку файлы cbq-512.client-out и cbq-64.client-in просто кидаем в папку с CBQ.init и все? файлы надо как минимум кидать не туда ))) а в /etc/sysconfig/cbq/ ну я туда их и кидаю.а толку не какого!не пашет нечего... вторая задача работает,там где просто на htb написанно,но весь трафик идет через 99 и 25, а остальные правила не работают! Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас