The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Шейпер ADSL для домовой сети (shaper traffic adsl bandwidth linux fedora)


<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>
Ключевые слова: shaper, traffic, adsl, bandwidth, linux, fedora,  (найти похожие документы)
From: Донченко Евгений <donchenko@tecon.org.ua.> Попов Александр <popov2al@gmail.com.> Newsgroups: email Date: Mon, 2 Sep 2009 17:02:14 +0000 (UTC) Subject: Шейпер ADSL для домовой сети Хотим предоставить на суд общественности реально работающий шейпер, который применяю для справедливой раздачи инета в домовой сети. Признаемся честно, источником вдохновения стала статья Anton Shuko Управление трафиком на роутере небольшой сети под Linux Итак: В нашем доме и парочке соседних прокинута локалка. Всего в сети 22 машины, находящиеся в общей подсети 192.168.100.0 Имеется модем ADSL, обеспечивающий 8 Мбит/с входящий, около 850кбит/с исходящий скорости. Задача: Обеспечить пользователям собственную гарантированную полосу пропускания трафика и возможность заимствования неиспользуемой полосы у соседей. При этом требуется: - Обеспечить низкую задержку отклика при Web серфинге. - Обеспечить низкие пинги и отсутствие лагов в on-line играх, причем порты могут меняться произвольно. - Обеспечить работу torrenta для всех пользователей. Для этого мы используем NAT на IPTABLES. Все это работает под Redhat Linux Fedora 11. За подробными пояснениями по работе шейпера и дополнительными ссылками отсылаю к оригиналу, Управление трафиком на роутере небольшой сети под Linux моя задача предоставить реально _работающую_ программу. ВАРИАНТ 1. Дальше идет текст adsl_qos. #!/bin/bash #запускается как #adsl_qos {start|stop|status} ppp_интерфейс адрес_интерфейса. DEV_OUT=$2 IP=$3 QLEN_OUT=10. RATE_OUT=650 # Ограничиваю исходящую скорость MTU_OUT=1492 DEV_IN=eth0 # Это интерфейс внутренней сети RATE_IN=7000 # Ограничиваю входящую скорость QLEN_IN=1000 RATE_LOCAL=100mbit IP_LOCAL=192.168.100.1 # Это адрес моего сервера в локальной сети ICMP="match ip protocol 1 0xff" TCP="match ip protocol 6 0xff" UDP="match ip protocol 17 0xff" DPORT="match ip dport" SPORT="match ip sport" SRC="match ip src" DST="match ip dst" MRK="match mark" U32="protocol ip u32" # Сделано это для запуска из ip-up/ip-down скрипта ppp.. # xxx_OUT - относится к adsl интерфейсу, исходящему потоку. # xxx_IN - относится к интерфейсу локальной сети, но входящему на adsl модем потоку :) #Адреса пользователей. ADR01="192.168.100.10" ADR02="192.168.100.20" ADR03="192.168.100.25" ADR04="192.168.100.35" ADR05="192.168.100.2" ADR06="192.168.100.11" ADR07="192.168.100.17" ADR08="192.168.100.33" ADR09="192.168.100.36" ADR10="192.168.100.48" ADR11="192.168.100.51" ADR12="192.168.100.55" ADR13="192.168.100.15" ADR14="192.168.100.39" ADR15="192.168.100.18" ADR16="192.168.100.7" ADR17="192.168.100.133" ADR18="192.168.100.9" ADR19="192.168.100.52" ADR20="192.168.100.45" ADR21="192.168.100.4" ADR22="192.168.100.26" ADR23="192.168.100.8" # Резерв ADR24="192.168.100.255" # Количество полос NNN=24+3 # Количество пользователей + специальные полосы #Ставлю ограничение 650kbit для исходящего потока и 6000kbit для входящего. status(){ # Это если интересно посмотреть на работу шейпера echo "[qdisc out]" tc -s -d qdisc show dev $DEV_OUT echo echo "[class out]" tc -s -d class show dev $DEV_OUT echo echo "[filter out]" tc -s filter show dev $DEV_OUT echo echo "-----------------------------------------------------------------" echo "[qdisc in]" tc -s -d qdisc show dev $DEV_IN echo echo "[class in]" tc -s -d class show dev $DEV_IN echo echo "[filter in]" tc -s filter show dev $DEV_IN exit } stop(){ # Если больше ненужен и для перезапуска tc qdisc del dev $DEV_OUT ingress 2> /dev/null > /dev/null tc qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null tc qdisc del dev $DEV_IN ingress 2> /dev/null > /dev/null tc qdisc del dev $DEV_IN root 2> /dev/null > /dev/null } start_out(){ # Старт исходящего интерфейса. Например ppp0. #ip link set dev $DEV_OUT qlen $QLEN_OUT mtu $MTU_OUT # В оригинале правили MTU. Я не стал - и так все в порядке! #добавляем особый тип очереди - ingress, которая пропускает трафик не выше. #заданной скорости, при этом заметьте, что очередь #не имеет размещения (всегда root), что позволяет добавлять к интерфейсу. #очередь ingress не мешая htb (или любой другой очереди), подключенной к #этому же интерфейсу: # (На самом деле это просто очередь на входе, что бы не писали переводчики. # Но реально ограничивает количество соединений в секунду ) tc qdisc add dev $DEV_OUT handle ffff: ingress tc filter add dev $DEV_OUT parent ffff: protocol ip prio 0 handle 1 fw police rate 100kbit burst 1500 mtu 9k drop flowid :1 #Мы установили лимит SYN пакетов до 320 пакетов в секунду (пакет с SYN #флагом занимает 320 бит, но 320 пакетов в секунду несколько многовато, хотя #точно должно обеспечить обработку всех запросов на соединение). tc qdisc add dev $DEV_OUT root handle 1: htb default 17 # Весь неклассифицированный трафик пойдет на очередь 17 tc class add dev $DEV_OUT parent 1: classid 1:1 htb rate $[$RATE_OUT]kbit tc class add dev $DEV_OUT parent 1:1 classid 1:10 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/30]kbit prio 1 tc class add dev $DEV_OUT parent 1:1 classid 1:12 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/3]kbit prio 2 #Полоса для неопределенного трафика tc class add dev $DEV_OUT parent 1:1 classid 1:17 htb rate $[$RATE_OUT/$NNN]kbit ceil ${RATE_OUT/3}kbit prio 7 # Полосы для моих машин. Приоритет чуть повыше, я же себя не обижу :-) tc class add dev $DEV_OUT parent 1:1 classid 1:21 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 4 tc class add dev $DEV_OUT parent 1:1 classid 1:22 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 4 # Полосы для остальных машин tc class add dev $DEV_OUT parent 1:1 classid 1:23 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:24 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:25 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:26 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:27 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:28 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:29 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:30 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:31 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:32 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:33 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:34 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:35 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:36 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:37 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:38 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:39 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:40 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:41 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:42 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:43 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 tc class add dev $DEV_OUT parent 1:1 classid 1:44 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/2]kbit prio 5 #rate - гарантированная полоса пропускания. #ceil - максимальная, если очереди с более высоким приоритетом незагружены #prio - приоритет полосы. 0 - максимальный #Ниже будут заданы фильтры, которые направляют пакеты в нужные полосы (классы). #Прошу обратить внимание на prio. Чем меньше, тем выше. Это не имеет отношения #к приоритету полос. Это приоритет для выборки пакета фильтром. # DNS запросы самые приоритетные tc filter add dev $DEV_OUT parent 1:0 prio 1 $U32 $SPORT 53 0xffff classid 1:10 tc filter add dev $DEV_OUT parent 1:0 prio 1 $U32 $DPORT 53 0xffff classid 1:10 #Все прочие udp пакеты. Возможно, некоторые пиринговые сети будут жить в этой полосе. #Но в основном для игрушек, которые не попали в более приоритетную полосу. tc filter add dev $DEV_OUT parent 1:0 prio 3 $U32 $UDP classid 1:12 # Фильруем все машины моей сети в попытке выбраться в модем по полосам tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 21 handle 21 fw flowid 1:21 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 22 handle 22 fw flowid 1:22 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 23 handle 23 fw flowid 1:23 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 24 handle 24 fw flowid 1:24 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 25 handle 25 fw flowid 1:25 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 26 handle 26 fw flowid 1:26 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 27 handle 27 fw flowid 1:27 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 28 handle 28 fw flowid 1:28 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 29 handle 29 fw flowid 1:29 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 30 handle 30 fw flowid 1:30 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 31 handle 31 fw flowid 1:31 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 32 handle 32 fw flowid 1:32 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 33 handle 33 fw flowid 1:33 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 34 handle 34 fw flowid 1:34 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 35 handle 35 fw flowid 1:35 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 36 handle 36 fw flowid 1:36 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 37 handle 37 fw flowid 1:37 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 38 handle 38 fw flowid 1:38 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 39 handle 39 fw flowid 1:39 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 40 handle 40 fw flowid 1:40 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 41 handle 41 fw flowid 1:41 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 42 handle 42 fw flowid 1:42 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 43 handle 43 fw flowid 1:43 tc filter add dev $DEV_OUT parent 1:0 protocol ip prio 44 handle 44 fw flowid 1:44 # Этот фильтр использует маркировку пакетов в IPTABLES. # Напряжно конечно, зато работает! #Ну, и наконец, организуем очереди tc qdisc add dev $DEV_OUT parent 1:10 handle 10: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:12 handle 12: sfq perturb 5 # Это прочий трафик. tc qdisc add dev $DEV_OUT parent 1:17 handle 17: sfq perturb 10 # Это машины сети. Лучше конечно esfq, но у меня не заработало. # Но ничего, пусть каждый делит свой трафик сам. # Если кого задалбывают вирусы, то это так и остается его персональной # проблемой! А без шейпера - это было проблемой всех. tc qdisc add dev $DEV_OUT parent 1:21 handle 21: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:22 handle 22: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:23 handle 23: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:24 handle 24: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:25 handle 25: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:26 handle 26: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:27 handle 27: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:28 handle 28: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:29 handle 29: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:30 handle 30: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:31 handle 31: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:32 handle 32: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:33 handle 33: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:34 handle 34: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:35 handle 35: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:36 handle 36: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:37 handle 37: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:38 handle 38: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:39 handle 39: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:40 handle 40: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:41 handle 41: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:42 handle 42: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:43 handle 43: sfq perturb 5 tc qdisc add dev $DEV_OUT parent 1:44 handle 44: sfq perturb 5 echo "Outbound shaping added to $DEV_OUT. Rate: ${RATE_OUT}Kbit/sec." } start_in(){ # Это шейпер на внутреннюю сеть, то есть на входящий трафик ip link set dev $DEV_IN qlen $QLEN_IN #добавляем особый тип очереди - ingress, что сидин на входе. # Собственно, ограничиваем количество коннектов в секунду. tc qdisc add dev $DEV_IN handle ffff: ingress tc filter add dev $DEV_IN parent ffff: protocol ip prio 0 handle 1 fw police rate 200kbit burst 1500 mtu 9k drop flowid :1 #Мы установили лимит SYN пакетов до 620 пакетов в секунду (пакет с SYN #флагом занимает 320 бит, но 620 пакетов в секунду несколько многовато, хотя #точно должно обеспечить обработку всех запросов на соединение). tc qdisc add dev $DEV_IN root handle 1: htb default 17 tc class add dev $DEV_IN parent 1: classid 1:1 htb rate ${RATE_IN}kbit tc class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/30]kbit prio 0 tc class add dev $DEV_IN parent 1:1 classid 1:12 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/3]kbit prio 2 #Полоса для неопределенного трафика tc class add dev $DEV_IN parent 1:1 classid 1:17 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/3]kbit prio 7 # Полосы для моих машин tc class add dev $DEV_IN parent 1:1 classid 1:21 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 4 tc class add dev $DEV_IN parent 1:1 classid 1:22 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 4 # Полосы для остальных машин tc class add dev $DEV_IN parent 1:1 classid 1:23 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:24 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:25 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:26 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:27 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:28 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:29 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:30 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:31 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:32 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:33 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:34 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:35 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:36 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:37 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:38 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:39 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:40 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:41 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:42 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:43 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 tc class add dev $DEV_IN parent 1:1 classid 1:44 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/2]kbit prio 5 #Примерно тоже самое, только этот интерфейс работает с локальной сетью. tc class add dev $DEV_IN parent 1: classid 1:2 htb rate $RATE_LOCAL prio 7 #Через этот класс пропускается не транзитный с adsl модема трафик, а исходящий #с роутера, поэтому используется другой, более высокий rate tc filter add dev $DEV_IN parent 1:0 prio 1 $U32 $SRC $IP_LOCAL classid 1:2 #а это фильтр для него tc filter add dev $DEV_IN parent 1:0 prio 2 $U32 $SPORT 53 0xffff classid 1:10 tc filter add dev $DEV_IN parent 1:0 prio 3 $U32 $UDP classid 1:12 tc filter add dev $DEV_IN parent 1:0 prio 4 $U32 $DST $ADR01 classid 1:21 tc filter add dev $DEV_IN parent 1:0 prio 4 $U32 $DST $ADR02 classid 1:22 tc filter add dev $DEV_IN parent 1:0 prio 4 $U32 $DST $ADR03 classid 1:23 tc filter add dev $DEV_IN parent 1:0 prio 4 $U32 $DST $ADR04 classid 1:24 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR05 classid 1:25 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR06 classid 1:26 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR07 classid 1:27 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR08 classid 1:28 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR09 classid 1:29 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR10 classid 1:30 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR11 classid 1:31 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR12 classid 1:32 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR13 classid 1:33 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR14 classid 1:34 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR15 classid 1:35 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR16 classid 1:36 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR17 classid 1:37 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR18 classid 1:38 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR19 classid 1:39 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR20 classid 1:40 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR21 classid 1:41 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR22 classid 1:42 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR23 classid 1:43 tc filter add dev $DEV_IN parent 1:0 prio 5 $U32 $DST $ADR24 classid 1:44 # Тут все просто. Фильтруем по адресу машины-получателя в сети. # Можно было маркировать в IPTABLES, как и для DEV_OUT, но я не стал. # Но Вам не мешаю! tc qdisc add dev $DEV_IN parent 1:2 handle 2: pfifo #Использую самую простую и легкую для процессора очередь pfifo для исходящего #с роутера трафика (не транзитный!) Очереди для DNS и UDP tc qdisc add dev $DEV_IN parent 1:10 handle 10: sfq perturb 10 tc qdisc add dev $DEV_IN parent 1:12 handle 12: sfq perturb 5 # Это прочий неклассифицированный трафик tc qdisc add dev $DEV_IN parent 1:17 handle 17: sfq perturb 15 # Это трафик по машинам tc qdisc add dev $DEV_IN parent 1:21 handle 21: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:22 handle 22: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:23 handle 23: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:24 handle 24: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:25 handle 25: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:26 handle 26: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:27 handle 27: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:28 handle 28: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:29 handle 29: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:30 handle 30: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:31 handle 31: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:32 handle 32: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:33 handle 33: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:34 handle 34: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:35 handle 35: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:36 handle 36: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:37 handle 37: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:38 handle 38: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:39 handle 39: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:40 handle 40: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:41 handle 41: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:42 handle 42: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:43 handle 43: sfq perturb 5 tc qdisc add dev $DEV_IN parent 1:44 handle 44: sfq perturb 5 echo "Outbound shaping added to $DEV_IN. Rate: ${RATE_IN}Kbit/sec." } #Процедура для ограничения входящего трафика закончена. case "$1" in start) stop iptables -t mangle -F iptables -A PREROUTING -t mangle -s 192.168.100.10 -j MARK --set-mark 21 iptables -A PREROUTING -t mangle -s 192.168.100.20 -j MARK --set-mark 22 iptables -A PREROUTING -t mangle -s 192.168.100.25 -j MARK --set-mark 23 iptables -A PREROUTING -t mangle -s 192.168.100.35 -j MARK --set-mark 24 iptables -A PREROUTING -t mangle -s 192.168.100.2 -j MARK --set-mark 25 iptables -A PREROUTING -t mangle -s 192.168.100.11 -j MARK --set-mark 26 iptables -A PREROUTING -t mangle -s 192.168.100.17 -j MARK --set-mark 27 iptables -A PREROUTING -t mangle -s 192.168.100.33 -j MARK --set-mark 28 iptables -A PREROUTING -t mangle -s 192.168.100.36 -j MARK --set-mark 29 iptables -A PREROUTING -t mangle -s 192.168.100.48 -j MARK --set-mark 30 iptables -A PREROUTING -t mangle -s 192.168.100.51 -j MARK --set-mark 31 iptables -A PREROUTING -t mangle -s 192.168.100.55 -j MARK --set-mark 32 iptables -A PREROUTING -t mangle -s 192.168.100.15 -j MARK --set-mark 33 iptables -A PREROUTING -t mangle -s 192.168.100.39 -j MARK --set-mark 34 iptables -A PREROUTING -t mangle -s 192.168.100.18 -j MARK --set-mark 35 iptables -A PREROUTING -t mangle -s 192.168.100.7 -j MARK --set-mark 36 iptables -A PREROUTING -t mangle -s 192.168.100.133 -j MARK --set-mark 37 iptables -A PREROUTING -t mangle -s 192.168.100.9 -j MARK --set-mark 38 iptables -A PREROUTING -t mangle -s 192.168.100.52 -j MARK --set-mark 39 iptables -A PREROUTING -t mangle -s 192.168.100.45 -j MARK --set-mark 40 iptables -A PREROUTING -t mangle -s 192.168.100.4 -j MARK --set-mark 41 iptables -A PREROUTING -t mangle -s 192.168.100.26 -j MARK --set-mark 42 iptables -A PREROUTING -t mangle -s 192.168.100.8 -j MARK --set-mark 43 iptables -A PREROUTING -t mangle -s 192.168.100.255 -j MARK --set-mark 44 # Маркируем syn пакеты iptables -A PREROUTING -t mangle -p tcp --syn -j MARK --set-mark 1 # Назначаем одинаковое время жизни для пакетов iptables -t mangle -A PREROUTING -i eth0 -j TTL --ttl-set 64 start_in start_out ;; stop) stop #Очистим таблицу прероутинга iptables -t mangle -F echo "Shaping removed on $DEV_OUT/$DEV_IN." ;; status) iptables -L -n -v -t mangle # Это полюбоваться на маркирование пакетов status ;; *) echo "Usage: $0 {start|stop|status} ppp_interface ip" esac # Это конец программы Для запуска использую: adsl_qos start ppp0 Разумеется, ppp0 должен быть поднят. Почему ppp0? Сознательно использую бридж, т.к. при большом числе соединений даже Zyxel 660HT2 в режиме роутера начинает тормозить и лагать. А так - установил на сервере 512Мб памяти, и желающие пользователи спокойно пользуют torrent. Для этого в файл iptables добавляем цепочки типа: # Торрент Юры -A PREROUTING -i ppp0 -p tcp -m tcp --dport 63737 -j DNAT --to-destination 192.168.100.11:63737 -A PREROUTING -i ppp0 -p udp -m udp --dport 63737 -j DNAT --to-destination 192.168.100.11:63737 Все входящие вызовы на 63737 порт автоматом переадресовываются на машину Юры. Естественно, что в его торренте тоже настроен порт 63737. Только количество соединений в IPTABLES лучше все-таки ограничить. А то вирусы часто теряют всякую наглость! Для чего уместно добавить в файл iptables: # Максимум 105 одновременных соединений c одного IP eth0 (ЛВС) -A FORWARD -p tcp -m connlimit -i eth0 -j DROP --syn --connlimit-above 105 Продолжая тему вирусов в сети, замечу, что разумно заблокировать и 25 порт, что бы Вас не внесли в список массовых спамеров. Это конечно полумера, но: # Максимум 1 одновременное соединение c одного IP eth0 для smtp -A FORWARD -p tcp -m connlimit -i eth0 --dport smtp -j DROP --syn --connlimit-above 1 И может быть интересным ограничение числа пингов во входящей цепочке (ЛВС): # Защита от пинга смерти -A FORWARD_IN -p icmp -m limit --icmp-type echo-request --limit 10/s -j ACCEPT Теперь о впечатлениях от работы. Думаю, лучшей рекомендацией для шейпера является ОДНОВРЕМЕННАЯ игра в on-line игры до 10 пользователей сети без ЛАГОВ и тормозов с высоким пингом! ВАРИАНТ 2 Шейпера для ADSL Приведенный выше скрипт предназначен прежде всего для понимания работы многополосного шейпера для раздачи интернета в домовой сети, хотя и полностью функционален. Благодаря Александру Попову, удалось сократить размер скрипта, одновременно повысив его функциональность и облегчить настройку для пользователей. Внесены дополнительные комментарии, облегчающие понимание причин выбора отдельных настроек. Дальше идет текст adsl_qos. #!/bin/bash # vim: sw=4 ts=4 expandtab ai TC="/sbin/tc" IPT="/sbin/iptables" IPROUTE="/sbin/ip" USAGE="Usage: $0 {start|stop|restart|status} output_interface" # Это сделано для запуска из ip-up/ip-down скрипта ppp. # Если скрипт запустили вручную то нужно проверить наличие параметров DEV_OUT. if [ -z "$2" ] ; then # Интерфейс, для подкоючения к интернету, указываем обязательно. echo "Not present output_interface" echo $USAGE exit 1 else DEV_OUT=$2 fi ################################################################################ # Настройки шейпинга # # xxx_OUT - относится к adsl интерфейсу, исходящему потоку. # xxx_IN - относится к интерфейсу локальной сети, но входящему # на adsl модем потоку :). # Длина очереди fifo на выходном интерфейсе. QLEN_OUT=10 # Ограничение исходящей скорости, кбит/с. # Рассчитывается на основании фактической исходящей скорости минус 15-20% в # зависимости от того, как плавает скорость при ADSL соединении. # Если скорость постоянна, можно снижать от фактической на 10%. RATE_OUT=650 # Размер MTU на выходном интерфейсе. В настройке указано для ADSL. MTU_OUT=1492 # Интерфейс внутренней сети. DEV_IN=eth0 # Ограничение входящей скорости. # Рассчитывается на основании фактической входящей скорости минус 10-15%. RATE_IN=7000 # Длина очереди fifo на входном интерфейсе # (сетевой карте сервера, обращенной в локалку). QLEN_IN=1000 # Скорость внутреннего интерфейса (сетевой карты сервера, обращенной в локалку). RATE_LOCAL=100mbit # Адрес самого сервера в локальной сети. IP_LOCAL="192.168.100.1" # Переменные, сокращающие длины команд и облегчающие их понимание. # Может используются не очень часто :) - но вдруг кому пригодится. TCP="match ip protocol 6 0xff" UDP="match ip protocol 17 0xff" DPORT="match ip dport" SPORT="match ip sport" SRC="match ip src" DST="match ip dst" MRK="match mark" U32="protocol ip u32" ################################################################################ ################################################################################ # Настройки пользователей # Массив содержит информацию о пользователях сервера из локальной сети # Адреса пользователей принадлежат локальной сети. Формат записи: # [Порядк_ном]="IP Приоритет Мин_канала Макс_канала", где # Порядк_ном - Номер строки по порядку. Повторение не допускается; # IP - IP адрес пользователя; # Приоритет - Приоритет пользователя, чем меньше значение тем лучше; # Мин_канала - Число обозначающее сколько частей пропускной способности # канала нужно гарантировано выделить пользователю, например # есть Вася с 2, Петя с 1 и Коля с 1, тогда канал распреде- # литься так - Васе достанется 2/(2+1+1)=0,5 канала, # Пете - 1/(2+1+1)=0,25 и Коле тоже 0,25; # Макс_канала - Число от 1 до 100, показывающее какую часть общего канала # можно выделить пользователю, если канал свободен. Значение # 1 будет равно 0,01 канала, 100 соответствует каналу целиком; # Для временного отключения клиентов допускается комментировать строки. LOCAL_IPS=( [1]="192.168.100.10 4 1 80" [2]="192.168.100.20 4 1 70" [3]="192.168.100.25 4 1 50" [4]="192.168.100.35 5 1 50" [5]="192.168.100.2 5 1 50" [6]="192.168.100.11 5 1 50" [7]="192.168.100.17 5 1 50" [8]="192.168.100.33 5 1 50" [9]="192.168.100.36 5 1 50" [10]="192.168.100.48 5 1 50" [11]="192.168.100.51 5 1 50" [12]="192.168.100.55 5 1 50" [13]="192.168.100.15 5 1 50" [14]="192.168.100.39 5 1 50" [15]="192.168.100.18 5 1 50" [16]="192.168.100.7 5 1 50" [17]="192.168.100.133 5 1 50" [18]="192.168.100.9 5 1 50" [19]="192.168.100.52 5 1 50" [20]="192.168.100.45 5 1 50" [21]="192.168.100.4 5 1 50" [22]="192.168.100.26 5 1 50" [23]="192.168.100.8 5 1 50" #[24]="192.168.100.4 5 1 50" #[25]="192.168.100.254 5 1 50" ) ################################################################################ # Шейпер подразумевает разбиение выделенной полосы пропускания на конечное # число полос. Каждая полоса обеспечивает гарантированный трафик в выделенных # пределах. Чем больше полос, тем меньший гарантированный трафик приходится на # одну. Расчет общего количества полос производится так: # Количество полоc = Cпециальные полосы + Общее количество полос пользователей # Спец полосы - по ним пойдет общий для всех пользователей трафик по UDP и ASK # пакеты, но с наивысшим приоритетом, а так же прочий неклассифицированный # трафик, с низким приоритетом. # Число меняется только при изменении в программе. NNN=3 # Общее количество полос. # Получается сложением полос для всех пользователей, и спец полос. for client in "${LOCAL_IPS[@]}"; do if [ -z "$client" ]; then continue; fi let "NNN += `echo $client | awk '{print $3}'`" done ShaperStatus(){ # Показываем настройки шэйпера. echo "SHAPER SETTINGS" echo echo "[qdisc out]" $TC -s -d qdisc show dev $DEV_OUT echo echo "[class out]" $TC -s -d class show dev $DEV_OUT echo echo "[filter out]" $TC -s filter show dev $DEV_OUT echo echo "-----------------------------------------------------------------" echo "[qdisc in]" $TC -s -d qdisc show dev $DEV_IN echo echo "[class in]" $TC -s -d class show dev $DEV_IN echo echo "[filter in]" $TC -s filter show dev $DEV_IN echo } ShaperStopAll(){ # Удаляем все настройки шэйпинга. Используется для остановки # или перезапуска. $TC qdisc del dev $DEV_OUT ingress 2> /dev/null > /dev/null $TC qdisc del dev $DEV_OUT root 2> /dev/null > /dev/null $TC qdisc del dev $DEV_IN ingress 2> /dev/null > /dev/null $TC qdisc del dev $DEV_IN root 2> /dev/null > /dev/null echo "Shaping removed on $DEV_OUT/$DEV_IN." } ShaperStartOut(){ ############################################################################ # Ограничение скорости для SYN пакетов. Закомментировать если не требуется # ограничить скорость создания новых подключений. # На входном интерфейсе используется для защиты от SYN-атаки из интернета. # Актуально, если разрешены любые входящие подключения из интернета. $TC qdisc add dev $DEV_OUT handle ffff: ingress $TC filter add dev $DEV_OUT parent ffff: protocol ip prio 0 handle 1 fw police rate 100kbit burst 1500 mtu 9k drop flowid :1 ############################################################################ $TC qdisc add dev $DEV_OUT root handle 1: htb default 17 $TC class add dev $DEV_OUT parent 1: classid 1:1 htb rate $[$RATE_OUT]kbit # Специальным видам трафика выделяем по одной полосе. $TC class add dev $DEV_OUT parent 1:1 classid 1:10 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/20]kbit prio 1 $TC class add dev $DEV_OUT parent 1:1 classid 1:12 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/4]kbit prio 2 $TC class add dev $DEV_OUT parent 1:1 classid 1:17 htb rate $[$RATE_OUT/$NNN]kbit ceil $[$RATE_OUT/4]kbit prio 7 # DNS запросы самые приоритетные. $TC filter add dev $DEV_OUT parent 1:0 prio 1 $U32 $SPORT 53 0xffff classid 1:10 $TC filter add dev $DEV_OUT parent 1:0 prio 2 $U32 $DPORT 53 0xffff classid 1:10 ############################################################################ # Короткие SYN пакеты, для установки соединения, отправляем в ту же полосу. # Это увеличит скорость установления новых соединий, что при сильной загрузке # канала обеспечит сохранение минимальной паузы при открытии новой Web страницы. # Закоментировать, если используется очередь ingress на входном интерфейсе # и Вы не доверяете локальной сети. $TC filter add dev $DEV_OUT parent 1:0 protocol ip prio 3 handle 1 fw flowid 1:10 ############################################################################ # Все прочие udp пакеты. Возможно, некоторые пиринговые сети будут жить в # этой полосе. Но в основном для игрушек, которые не попали в более # приоритетную полосу. $TC filter add dev $DEV_OUT parent 1:0 prio 4 $U32 $UDP classid 1:12 #Организуем очереди для специальных полос. $TC qdisc add dev $DEV_OUT parent 1:10 handle 10: sfq perturb 5 $TC qdisc add dev $DEV_OUT parent 1:12 handle 12: sfq perturb 5 # Это прочий (неклассифицированный) трафик. $TC qdisc add dev $DEV_OUT parent 1:17 handle 17: sfq perturb 10 # Классы клиентов. j=21 for client in "${LOCAL_IPS[@]}"; do if [ -z "$client" ]; then continue; fi # Это определяются переменные для выражения. prio=`echo $client | awk '{print $2}'` let "rate= $RATE_OUT / $NNN * `echo $client | awk '{print $3}'`" let "cell= $RATE_OUT / 100 * `echo $client | awk '{print $4}'`" # Создаем полосы для клиентов. $TC class add dev $DEV_OUT parent 1:1 classid 1:$j htb rate $[$rate]kbit ceil $[cell]kbit prio $prio # Создаем фильтры для машин сети. $TC filter add dev $DEV_OUT parent 1:0 protocol ip prio $j handle $j fw flowid 1:$j # Теперь создаем очереди для машин сети. $TC qdisc add dev $DEV_OUT parent 1:$j handle $j: sfq perturb 5 let "j += 1" done echo "Outbound shaping added to $DEV_OUT. Rate: ${RATE_OUT}Kbit/sec." } ShaperStartIn(){ # Это шейпер на внутреннюю сеть, то есть на входящий трафик. $IPROUTE link set dev $DEV_IN qlen $QLEN_IN ############################################################################ # Добавляем особый тип очереди - ingress, что контролирует вход интерфейса. # Собственно, ограничиваем количество входящих! коннектов в секунду. # Раскомментировать, если Вы не доверяете локальной сети. #$TC qdisc add dev $DEV_IN handle ffff: ingress #$TC filter add dev $DEV_IN parent ffff: protocol ip prio 0 handle 1 fw police rate 200kbit burst 1500 mtu 9k drop flowid :1 ############################################################################ $TC qdisc add dev $DEV_IN root handle 1: htb default 17 $TC class add dev $DEV_IN parent 1: classid 1:1 htb rate ${RATE_IN}kbit $TC class add dev $DEV_IN parent 1:1 classid 1:10 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/20]kbit prio 0 $TC class add dev $DEV_IN parent 1:1 classid 1:12 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/4]kbit prio 2 # Полоса для неопределенного трафика. $TC class add dev $DEV_IN parent 1:1 classid 1:17 htb rate $[$RATE_IN/$NNN]kbit ceil $[$RATE_IN/4]kbit prio 7 # Примерно тоже самое, только этот интерфейс работает с локальной сетью. $TC class add dev $DEV_IN parent 1: classid 1:2 htb rate $RATE_LOCAL prio 7 # Через этот класс пропускается не транзитный с adsl модема трафик, а # исходящий с роутера, поэтому используется другой, более высокий rate, # а это фильтр для него. $TC filter add dev $DEV_IN parent 1:0 prio 1 $U32 $SRC $IP_LOCAL classid 1:2 # это фильтр для DNS. $TC filter add dev $DEV_IN parent 1:0 prio 2 $U32 $SPORT 53 0xffff classid 1:10 $TC filter add dev $DEV_IN parent 1:0 prio 3 $U32 $DPORT 53 0xffff classid 1:10 ############################################################################ # Короткие SYN пакеты, для установки соединения, отправляем в ту же полосу. # Раскоментировать, если не используется (закоментирована) очередь ingress # на исходящем интерфейсе. #$TC filter add dev $DEV_IN parent 1:0 protocol ip prio 4 handle 1 fw flowid 1:10 ############################################################################ # Это фильтр для прочих UDP соединений. $TC filter add dev $DEV_IN parent 1:0 prio 5 $U32 $UDP classid 1:12 # Использую самую простую и легкую для процессора очередь pfifo для # исходящего с роутера трафика (не транзитный!). $TC qdisc add dev $DEV_IN parent 1:2 handle 2: pfifo # Очереди для DNS и UDP. $TC qdisc add dev $DEV_IN parent 1:10 handle 10: sfq perturb 5 $TC qdisc add dev $DEV_IN parent 1:12 handle 12: sfq perturb 5 # Это прочий неклассифицированный трафик. $TC qdisc add dev $DEV_IN parent 1:17 handle 17: sfq perturb 15 # Полосы для клиентских машин. j=21 for client in "${LOCAL_IPS[@]}"; do if [ -z "$client" ]; then continue; fi # Это определяются переменные для выражения. ip=`echo $client | awk '{print $1}'` prio=`echo $client | awk '{print $2}'` let "rate= $RATE_IN / $NNN * `echo $client | awk '{print $3}'`" let "cell= $RATE_IN / 100 * `echo $client | awk '{print $4}'`" # Создаем полосы для клиентов. $TC class add dev $DEV_IN parent 1:1 classid 1:$j htb rate $[$rate]kbit ceil $[cell]kbit prio $prio # Фильтры для них же. $TC filter add dev $DEV_IN parent 1:0 prio $j $U32 $DST $ip classid 1:$j # Очереди. $TC qdisc add dev $DEV_IN parent 1:$j handle $j: sfq perturb 5 let "j += 1" done echo "Outbound shaping added to $DEV_IN. Rate: ${RATE_IN}Kbit/sec." } Marking(){ action=$1 j=21 for client in "${LOCAL_IPS[@]}"; do if [ -z "$client" ]; then continue; fi ip=`echo $client | awk '{print $1}'` # Маркируем пакеты для клиентов. # Это действие требуется для распределения клиентов по полосам. $IPT $action PREROUTING -t mangle -s $ip -j MARK --set-mark $j let "j += 1" done # Маркируем syn пакеты. $IPT $action PREROUTING -t mangle -p tcp --syn -j MARK --set-mark 1 # Назначаем одинаковое время жизни для пакетов. $IPT $action PREROUTING -t mangle -i $DEV_IN -j TTL --ttl-set 64 } case "$1" in start) Marking "-A" ShaperStartIn ShaperStartOut ;; stop) ShaperStopAll Marking "-D" ;; status) ShaperStatus ;; restart) ShaperStopAll Marking "-D" Marking "-A" ShaperStartIn ShaperStartOut ;; *) echo $USAGE esac exit 0 Опытная эксплуатация второго варианта скрипта подтвердила его отличные характеристики (разумеется, в связке с соответствующе настроенным фаерволом). Дальнейшая наша разработка (скрипт фаервол+шейпер+проброс DNS), будет приведен в последующей статье.

<< Предыдущая ИНДЕКС Исправить src / Печать Следующая >>

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, alex2ndr (?), 12:38, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Очень хорошая статья - вот только чтобы изменить скрипт под например 10 пользователей надо делать много поправок в нем. ИМХО лучше сделать список пользователей не набором переменных а массивом и засунуть все повторяющиеся действия в циклы. И скрипт короче будет и достаточно будет изменить список пользователей в начале чтобы все заработало. Если вам интересно этим заняться то могу помочь (в меру своих скромных возможностей). Сам такое переделывание не осилю ибо негде тестировать.
     
  • 1.2, Донченко (?), 13:14, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я уже думал над этим. Действительно, получится много короче. Единственно, представленный вариант позволяет легко менять приоритеты и ширину полосы для отдельных пользователей, Ваш вариант тоже должен это уметь. Если возметесь - готов потестить и поделиться впечатлениями.
     
     
  • 2.15, alex2ndr (?), 18:50, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Если не возражаете я свяжусь в Вми по email указанному в заголовке статьи. Я начал разработку - но есть кое-какие неясности.
     
     
  • 3.25, Донченко (ok), 13:18, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Прошу Вашего разрешения для публикации в статье с новым вариантом шейпера Ваших персональных данных.

     
     
  • 4.28, alex2ndr (?), 00:08, 05/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Не возражаю. Данные см. в письме.
     

  • 1.3, demimurych (?), 13:20, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мне _кажется_ что нужно
    Автору ознакомится с
    http://gazette.linux.ru.net/rus/articles/index-abs-guide.html

    И переписать скрипт по уму.

     
     
  • 2.26, Донченко (ok), 13:19, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Мне _кажется_ что нужно
    >Автору ознакомится с
    >http://gazette.linux.ru.net/rus/articles/index-abs-guide.html
    >И переписать скрипт по уму.

    Спасибо, Александр все сделал :-)

     
  • 2.27, alex2ndr (?), 00:05, 05/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Я конечно хорошо знаком с данным опусом. Им и руководствовался.
     

  • 1.4, Донченко (?), 13:46, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо! Но времени у меня не так уж и много. Это не коммерческая разработка, но она реально работает, и те кто хотят ее использовать, не вникая в тонкости, могут легко это сделать.
    Почему-то никто из уважаемых знатоков не выложил даже такого косо-кривой, но реально работающей программы.

    Что бы не заканчивать на такой минорной ноте, внесу небольшое дополнение.
    В цепочку форварда iptables приведенные в статье рекомендации включаются так:

    :limiting - [0:0]
    :FORWARD_IN - [0:0]

    #Личные цепочки
    :T10 - [0:0]
    :T20 - [0:0]
    # и т.д.

    # Автоматически уменьшать размер передаваемого   пакета для ADSL
    -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS  --clamp-mss-to-pmtu

    -A FORWARD -o ppp0 -j FORWARD_IN
    -A FORWARD -i ppp0 -j FORWARD_OUT

    # Эта цепочка для блокировки пользователей автоматическими скриптами
    # Но можно и руками
    -A FORWARD_IN -j limiting

    # В этих цепочках ограничиваем каждого пользователя отдельно

    # Кабинет
    -A FORWARD_IN -s 192.168.100.20 -j T20
    # Максимум 1 одновременное соединение c  одного IP  eth0 для smtp
    #-A T20 -p tcp -m connlimit -i eth0 --dport smtp -j DROP  --syn --connlimit-above 1
    # Максимум 105 одновременных соединений c  одного IP  eth0 (ЛВС)
    #-A T20 -p tcp -m connlimit -i eth0 -j DROP  --syn --connlimit-above 105
    # Защита от пинга смерти
    -A T20 -p icmp -m limit --icmp-type echo-request --limit 10/s -j ACCEPT
    -A T20 -p icmp --icmp-type echo-request -j DROP
    -A T20 -j ACCEPT

    # И так далее...

     
     
  • 2.14, Docent (??), 18:36, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > Почему-то никто из уважаемых знатоков не выложил даже такого косо-кривой, но реально работающей программы.

    зря вы так. такой скрипт существует уже несколько лет и называется он HTB (не путать с телеканалом).
    #    htb.init v0.8.5
    #    Copyright (C) 2002-2004  Lubomir Bulej <pallas@kadan.cz>
    ...
    #    To get the latest version, check on Freshmeat for actual location:
    #
    #               http://freshmeat.net/projects/htb.init

    правда по этой ссылке его уже давно нет, но можно у гугла спросить
    есть описание даже на этом сайте http://www.opennet.dev/docs/RUS/adv_route_qos/

     
     
  • 3.24, Донченко (ok), 12:58, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Скрипт я смотрел, давно правда Но цели у него были другие Это скрипт для созда... большой текст свёрнут, показать
     

  • 1.5, Донченко (?), 13:50, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Прошу прощения, нужно убрать # из строчек
    #-A T20 -p tcp -m connlimit -i eth0 --dport smtp -j DROP  --syn --connlimit-above 1
    и #-A T20 -p tcp -m connlimit -i eth0 -j DROP  --syn --connlimit-above 105
     
     
  • 2.8, Донченко (?), 14:28, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Так будет абсолютно верно:
    -A T20 -p tcp -m connlimit -i eth0 --dport smtp -j DROP --syn --connlimit-above 2


     

  • 1.6, TrueHead (ok), 13:55, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как проверялась справедливость?
    Дисциплина SFQ не позволяет абсолютно справедливо делить канал, она пытается равномерно размазать соединения, а надо, чтобы распределение шло на конкретный айпишник, в независимости от количества соединений.
     
     
  • 2.7, Донченко (?), 14:26, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Это верно! Но Вы говорите об несправедливости внутри одной полосы. А я завожу по полосе на каждого пользователя, обеспечиваю ему гарантированную полосу пропускания и остаток от неиспользованных чужих полос, согласно приоритету пользователя.
     
     
  • 3.9, Донченко (?), 14:35, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    А несправедливость между отдельными программами самого клиента меня не беспокоит. Пусть выключает torrent, если хочет поиграть!
     

  • 1.10, olex (ok), 15:32, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Скрипр рабочий
    но IMHO шейпить входной трафик - не оправдано
    >>>tc qdisc add dev $DEV_OUT handle ffff: ingress

    PS шейпить входной трафик вообще практически невозможно

     
     
  • 2.12, Донченко (?), 17:36, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    На шейпинг входного трафик и не претендую. Эта цепочка только ограничивает скорость поступления SYN пакетов на вход. Если напрягает - можно и отключить. Нам не мешает, но сказать что вижу пользу я тоже не могу, не проверял.
     

  • 1.11, mx (??), 16:28, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Повесил бы squid на сервак что ли ;)

    А вообще если касается федоры то я бы сделал через СБКу /etc/sysconfig/cbq/...

     
     
  • 2.13, Донченко (?), 17:40, 03/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Повесил бы squid на сервак что ли ;)

    Я использую NAT. Соответственно шейпер работает по всем портам, почти вне зависимости от вида трафика, а не только 80 порт.

    >А вообще если касается федоры то я бы сделал через СБКу /etc/sysconfig/cbq/...

    Очень поддерживаю! И с удовольствием посмотрю на реально работающий _ВАШ_ вариант шейпера.


     
     
  • 3.19, mx (??), 08:10, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > Я использую NAT. Соответственно шейпер работает по всем портам,
    > почти вне зависимости от вида трафика, а не только 80 порт.

    Пусть мне мои домашнии квалифицировано объяснят зачем им инет окромя 80 порта.
    ( аська в мессагах мало жрет а за фиреваллом все равно файло слать нельзя )

    > И с удовольствием посмотрю на реально работающий _ВАШ_ вариант шейпера.

    был как то лет 5 подобный вопрос. Подумали и сказали что не нужно. А цбку-шку
    на серваке-почтовом заюзал по портам ( 110,25) чтобы пересылаемое мыло-файло в 50 мег
    не ложило канал !

    Эту фигню как у тебя лучше не для домашней сети юзать а провам.

     
     
  • 4.20, Донченко (?), 09:55, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Я не говорил, что у меня домашняя сеть на 20 компьютеров - Сеть _домовая_ Эт... большой текст свёрнут, показать
     

  • 1.16, hand (?), 21:48, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Очень актуальная и нужная вещь.
    Жду переработанной версии.
     
     
  • 2.21, Донченко (?), 10:03, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Очень актуальная и нужная вещь.
    >Жду переработанной версии.

    Благодаря самоотверженному труду Александра (alex2ndr) такая версия наконец появилась. Сейчас провожу тестовую проверку (хотя и так видно, что работает нормально, генерируемый пробный скрипт отличается от оригинала только размещением команд, но все же...)
    Буду просить администратора ресурса внести изменения в статью, с учетом новой версии.

     

  • 1.17, XoRe (ok), 21:50, 03/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > start_out(){
    >     # Старт исходящего интерфейса. Например ppp0.
    >     #ip link set dev $DEV_OUT qlen $QLEN_OUT mtu $MTU_OUT
    >     # В оригинале правили MTU. Я не стал - и так все в порядке!

    Если не секрет, что есть "оригинал"?

     
     
  • 2.18, Донченко (?), 00:12, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Не секрет :-)
    [[http://www.opennet.dev/base/net/adsl_qos.txt.html статья Anton Shuko]]
    Об этом в начале написано, там и остальные ссылки есть.
    Только там немного другой подход.
    Я поставил во главу угла раздачу полос пользователям,
    а в оригинале - раздавали полосы нужным протоколам и портам.
     
     
  • 3.22, XoRe (ok), 11:30, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Не секрет :-)
    >[[http://www.opennet.dev/base/net/adsl_qos.txt.html статья Anton Shuko]]
    >Об этом в начале написано, там и остальные ссылки есть.
    >Только там немного другой подход.
    >Я поставил во главу угла раздачу полос пользователям,
    >а в оригинале - раздавали полосы нужным протоколам и портам.

    И правда.
    Плохо читал статью, сорри.

    Могу порекомендовать выяснить точные значения скоростей, на которых соединился adsl модем.
    И выставить RATE_IN и RATE_OUT чуть-чуть меньше реальных скоростей.
    При выедании физического канала (входящего и исходящего) пинг все равно резко возрастает, несмотря на политики/приоритеты/шейперы.
    А если программно шейпить трафик и не давать ему подойти к физическим границам, вы этого избежите.

     
     
  • 4.23, Донченко (ok), 12:52, 04/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Так и есть! Реальная скорость входящего трафика 8000кбит/с, а я выставляю 7000. Т.е. на скачки загрузки я отвожу 1000кбит/с. В оригинале, если Вы обратили внимание, еще больше резервируют. То же самое касается исходящего канала. Но в нем скорость плавает, в зависимости от удачности подключения (я все-таки смотрел, и не раз), поэтому там запас выставлен больше
     

  • 1.29, alex2ndr (?), 17:32, 13/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    У Вас там в конце второго варианта почему-то 2 раза exit 0 - уберите один
     
     
  • 2.30, Донченко (ok), 22:57, 13/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Понятия не имею, откуда взялся, нажмите на правку - увидете, что там только один! Но на всякий случай вставил перенос строки перед меткой конца блока кода - может в этом дело?
    И не у Вас, а у Нас ;-)
     

  • 1.31, AlexX (??), 02:12, 16/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Статья - супер!
    Спасибо Вам за труд.
    У меня как раз аналогичная сеть :) 8/~1 mbps + 22 клиента.
    Подредактировал 2й скрипт под себя - все работает отлично!

    THX

     
     
  • 2.32, Донченко (ok), 09:33, 16/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Статья - супер!
    >Спасибо Вам за труд.
    >У меня как раз аналогичная сеть :) 8/~1 mbps + 22 клиента.
    >Подредактировал 2й скрипт под себя - все работает отлично!

    Подождите, есть еще и вариант шейпер+фаервол+проброс портов/DNS.
    Основанный на варианте 2, он еще и корректно (по списку правил) управляет IPTABLES, обеспечивая высокий уровень защиты и требуемый доступ к серверу, проброс портов (для работы torrent и скачки файлов ICQ), а так же проброс DNS запросов от клиентов к провайдеру на 2 DNS сервера с вероятностью 50% (без использования BIND, что важно для начинающих).
    Мы с Александром готовим новую статью, поэтому если есть замечания - особенно по шейперу, очень просим высказываться!

     

  • 1.33, evol (?), 11:32, 18/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    вопрос .
    будит ли работать этот шейпер. если в качестве клиента будит выступать та машина где он крутить?
    и вообще возможно ли это? поскажите что нужно для етого дописать.
     
     
  • 2.34, Донченко (ok), 13:03, 18/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Не совсем понятно, будут ли работать в интернете еще клиенты, кроме Вас Ну, пол... большой текст свёрнут, показать
     

  • 1.35, evol (?), 13:55, 18/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    сильно не пинаете, я тока разбираюсь в этом


    повторю вопрос более корректно.

    есть машина где крутится шейпер. есть три клиента, два из них безумно юзают торренты, третий неочень активен.Так вот мой вопрос заключался в том смогули я запустить на машине где шейпер к примеру торрент клиент, чтобы шейпер делил соответственно скорость для всех клиентов в том числе и для этой машины?.

     
     
  • 2.36, Донченко (ok), 15:27, 18/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Да, сможете запустить Но Представленный в статье шейпер должен быть переписан,... большой текст свёрнут, показать
     
     
  • 3.39, Донченко (ok), 11:37, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Да, сможете запустить.
    >Но! Представленный в статье шейпер должен быть переписан, что бы входной шейпер
    >(у меня он висит на eth0, смотрящей в локалку) повис на
    >виртуальном интерфейсе, к которому и будет обращаться Ваша машина и все
    >клиенты. Для этого либо используется IMQ, либо собственный виртуальный интерфейс и
    >соответствующая маршрутизация сервера.

    Если Ваш вопрос еще терпит, то как раз сейчас мы с Александром изучаем этот вопрос.
    Действительно, удобнее всего размещать torrent на сервере.
    Так что, надеюсь, через некоторое время будет модификация шейпера, использующая виртуальный интерфейс на входных каналах для ограничения входящего трафика.

     
     
  • 4.44, evol (?), 20:27, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    терпит.!
    спасибо что откликнулись. буду ждать
     
  • 4.50, Rusty (??), 02:25, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Мы используем NX Server - решение от No Machine для удаленной одновременной работе на серваке. Возможно ли так же создание двух виртуальных интерфейсов для двух сессий пользователей для справедливого разделение трафа между пользователями? В противном случае получается у одного (торренты на серваке+траф локально) у другого просто траф локально?
    Сейчас разбираюсь с вашим скриптом. Потом хочу заняться этой проблемой. Что посоветуете?
     

  • 1.37, hand (?), 11:00, 20/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Тестил скрипт через прозрачный прокси - работает. Почему то пришлось поднять RATE_OUT=5000 (реальная скорость 590кбит), т.к. отдавало клиенту только 10-20кбит при RATE_OUT=530.
    Подскажите, пожалуйста, как включить (после шейпера) NAT для хостов в локалке, что бы были доступны другие сервисы/порты при данных в статье параметрах?
     
     
  • 2.38, Донченко (ok), 11:31, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    У Вас получился правильный результат Если конечно Вы спутали кбит с и кбайт с ... большой текст свёрнут, показать
     
     
  • 3.40, hand (?), 12:20, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Я Вас понял. При первых запусках скрипта все было в норме, только после многократных перезапусков (для подбора ширины канала) скорость стала неудовлетворительной, возможно я внес ошибку в скрипт. Меряю вот так http://www.speedtest.net/result/569938750.png
    (подключен только один хост, т.е. отдает ~80% свободного канала и половину). На счет тормозов сказать не могу, нагрузка сейчас к удивлению очень мала.
    Благодарю за подробный ответ.

    Отвечу на свой вопрос (tnx bioname), внешний адрес выдается динамический:
    sudo iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE
    sudo iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT

     
     
  • 4.41, Донченко (ok), 14:13, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Попробуйте начать с начала и менять по шагам, с проверкой По себе знаю - сделае... большой текст свёрнут, показать
     
  • 4.42, hand (?), 14:27, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >после многократных перезапусков (для подбора ширины канала) скорость стала неудовлетворительной, возможно
    >я внес ошибку в скрипт. Меряю вот так http://www.speedtest.net/result/569938750.png
    >(подключен только один хост, т.е. отдает ~80% свободного канала и половину). На
    >счет тормозов сказать не могу, нагрузка сейчас к удивлению очень мала.
    >
    >Благодарю за подробный ответ.
    >
    >Отвечу на свой вопрос (tnx bioname), внешний адрес выдается динамический:
    >sudo iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE
    >sudo iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT

    sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

     
     
  • 5.43, Донченко (ok), 14:45, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >> Меряю вот так http://www.speedtest.net/result/569938750.png

    По моему, все правильно! Исходящая скорость как раз 50% от исходящего канала - формулу я Вам писал. Ну уберите /2, раз она Вас так смущает из формулы и будет весь канал.

    >>Отвечу на свой вопрос (tnx bioname), внешний адрес выдается динамический:
    >>sudo iptables -t nat -D POSTROUTING -o ppp0 -j MASQUERADE
    >>sudo iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT
    >
    >sudo iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

    ?
    Я и так понял, не беспокойтесь.

     
     
  • 6.45, hand (?), 21:41, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Возможно это баг системы. Но у меня не работает на 530kbit.
    Я понимаю, что в килобайте 8 килобит. Скорость смотрю iptraf.
    Скрипт переделывал заново (_xttp://home.ddns.mobi/tmp/adsl_qos.sh).
     
     
  • 7.46, Донченко (ok), 22:28, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    1. Почему 127.0.0.1 попал в список локальных адресов? Ведь тогда он снижает гарантированную полосу на входящем шейпере. Ну да ладно, допустим хотим шейпить выход самого сервера.
    2. LOCAL_IPS=(
    [1]="127.0.0.1 2 2 80"
    [2]="10.0.1.65 4 1 70"
    [3]="10.0.1.71 4 1 50"
    [4]="10.0.1.72 5 1 50"
    3. RATE_OUT=550
    4. Тогда предельная скорость, разрешенная пользователям:
    [1]=550*0,8=440 кбит/с
    [2]=550*0.7=385 кбит/с
    [3]=550*0.5=275 кбит/с
    [4]=275 кбит/с
    Ну и где Вы видите 530кБит/с?
    Или Ваши клиенты вместе с Вами позабивали канал?
    Тогда вопрос: а без шейпера, какая скорость? Вы можете ведь четко наблюдать изменение? Сделайте это.
    Если в скрипте есть ошибка,ее нужно исправить.
     
     
  • 8.47, hand (?), 23:05, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален Вот такая без шейпера это минимум что показывало http ... текст свёрнут, показать
     
     
  • 9.48, Донченко (ok), 23:30, 20/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    1 На рисунках разное время Поэтому они мало о чем говорят, это должны быть два... большой текст свёрнут, показать
     
     
  • 10.49, Донченко (ok), 00:00, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Только что еще раз проверил работу шейпера, на исходящем канале У меня стоит ог... большой текст свёрнут, показать
     
     
  • 11.51, hand (?), 10:29, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    хttp www onlinedisk ru file 222671 У меня IPTraf настроен на отображение в kb... текст свёрнут, показать
     
     
  • 12.59, Донченко (ok), 19:13, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Раскрыл Не понравилось отсутствие внятных подписей приходится догадываться Н... текст свёрнут, показать
     
     
  • 13.61, hand (?), 21:21, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Предлагаю забыть про эти результаты В скором времени я проведу более точные изм... текст свёрнут, показать
     
     
  • 14.71, Донченко (ok), 15:16, 23/09/2009 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В общем, проблема заключается в попытке шейпить трафик предназначенный клиенту н... текст свёрнут, показать
     

  • 1.52, Rusty (??), 11:40, 21/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Мы используем NX Server - решение от No Machine для удаленной одновременной работе на серваке. Возможно ли так же создание двух виртуальных интерфейсов для двух сессий пользователей для справедливого разделение трафа между пользователями? В противном случае получается у одного (торренты на серваке+траф локально) у другого просто траф локально?
    Сейчас разбираюсь с вашим скриптом. Потом хочу заняться этой проблемой. Что посоветуете? Читал комменты, я так понимаю IMQ?
     
     
  • 2.53, alex2ndr (?), 14:54, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    C imq навскидку сложновато. Там надо ядро и iptables патчить и пересобирать. Но я думаю мы к этому придем (уже в процессе :) ). Насчет вашей ситуации - если я правильно понимаю можно попробовать обойтись параметром Мин_Канала. У того пользователя что локально это будет 2 а у того что есть и сервер и локалка и там и там будет 1. Как вам тут могут помочь виртуальные интерфейсы я не знаю.
     
  • 2.54, alex2ndr (?), 15:14, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Кажется понимаю о чем вы. Написав предыдущий пост я забыл, что то о чем говорил пока находиться в разработке.
    Да - в том варианте что сейчас представлен в статье не учитывается трафик на самом сервере - соответственно он может сожрать весь входящий канал и ничего ему не будет. Да - в таком варианте надо использовать какой-то виртуальный интерфейс. Если у вас время терпит то ждите следующую версию - мы работаем над этим.
     
     
  • 3.55, Rusty (??), 15:52, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Да нужно учитывать траф сервера и делить еще его по пользователям сервера )). Я могу подождать (в течение какого времени?), но и сам пока буду разбираться если вы скажете куда копать.
     
     
  • 4.56, alex2ndr (ok), 16:13, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    С учетом трафика сервера мы работаем - сейчас как раз пытаемся ввести виртуальны... большой текст свёрнут, показать
     
  • 4.57, alex2ndr (ok), 16:29, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Заодно и с точки зрения безопасности нормальная виртуальная машина будет правильнее. Сейчас у вас для торентов наверно порты открыты фактически на ваш сервер(т е в цепочках INPUT для iptables). Это есть дырка в безопасности.
     
     
  • 5.58, Донченко (ok), 18:46, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Сейчас у вас для торентов наверно порты открыты фактически на ваш сервер(т
    >е в цепочках INPUT для iptables). Это есть дырка в безопасности.

    С чего бы это?
    Разве через порты торрента можно залезть в систему?

     
     
  • 6.62, alex2ndr (ok), 21:54, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Неизвестно можно ли залезть через порты торента в систему Это зависит от ошибок... большой текст свёрнут, показать
     
  • 5.60, Rusty (??), 19:56, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Идея с Xen привлекательная (полное разделение), но ресурсов будет много требовать у нас с серваке всего то 512 МБ.
     
     
  • 6.63, alex2ndr (ok), 21:54, 21/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Идея с Xen привлекательная (полное разделение), но ресурсов будет много требовать у
    >нас с серваке всего то 512 МБ.

    Ну память нынче дешева :) можно еще 512 прикупить. Если такой возможности нету то подумать что и как надо сделать - если сервер используется только в качестве площадки для торентов то подумать о установке минимальной конфигурации линуха + торент-клиент с веб интерфейсом - по моим оценкам в 64 мб уложитесь. Если нужно еще что-то кроме торента то можно поставить Иксы по минимуму - lxde там какое-нить (не спец в этом). Или поставить ХР :) - сожрет 128 мб - но по минимуму будет работать.

     
     
  • 7.64, Rusty (??), 17:24, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Нащет ограничения трафа для пользователей сервака: можно маркировать пакеты по UID, так же маркировать по ИП а затем уже фильтровать в tc? Вариант? Тада и виртуальных сетевых интерфейсов не надо (IMQ).
     
     
  • 8.65, Донченко (ok), 17:35, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Отмаркировать пакеты не проблема Проблема - на чем создать очередь Если как в ... текст свёрнут, показать
     
     
  • 9.66, Rusty (??), 17:41, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Ага и для этого вы делаете виртуальный интерфейс ... текст свёрнут, показать
     
     
  • 10.67, Rusty (??), 17:47, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Еще прочитал в википедии Для того, чтобы использовать очереди на входящий траф... текст свёрнут, показать
     
     
  • 11.68, Донченко (ok), 19:42, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Не следует так уж безоговорочно верить всему написанному в википедии Авторы это... текст свёрнут, показать
     
     
  • 12.69, Rusty (??), 20:31, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Нет не мало Вопрос в загрузке проца если при таком раскладе - 90 это не хорош... текст свёрнут, показать
     
     
  • 13.70, alex2ndr (ok), 22:05, 22/09/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Пока только собираемся На самом деле есть еще одна задача которая его требует -... текст свёрнут, показать
     

  • 1.72, Rusty (??), 15:59, 30/09/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В общем можно ограничить скорость по ип для пользователей на локальном интерфейсе отдельно от ограничения скорости для самого сервака на IMQ.

    А вот как ограничить суммарную скорость сервака + какой-нить пользователь (это случай когда он используется как терминальный для запуска торрентов и можно маркировать пакеты по UID пользователя) очереди разные для этих интерфейсов... =( ??

     
     
  • 2.73, alex2ndr (ok), 14:23, 01/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >В общем можно ограничить скорость по ип для пользователей на локальном интерфейсе
    >отдельно от ограничения скорости для самого сервака на IMQ.
    >
    >А вот как ограничить суммарную скорость сервака + какой-нить пользователь (это случай
    >когда он используется как терминальный для запуска торрентов и можно маркировать
    >пакеты по UID пользователя) очереди разные для этих интерфейсов... =( ??
    >

    Почему очереди разные - очереди одни и те же. Просто маркируйте пользователя на серваке и на локальном компе теми же номерами. У нас для идентификации используется ip, поэтому вам придется переписать наш скрипт с использованием ip и UID. Если клиентов мало можно все ручками прописать.

     
     
  • 3.74, Rusty (??), 16:05, 01/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Почему одни и те же? У IMQ своя очередь у интерфейса смотрящего в локальную сеть своя. Или я ошибаюсь?
     
     
  • 4.75, alex2ndr (ok), 16:58, 01/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Почему одни и те же? У IMQ своя очередь у интерфейса смотрящего
    >в локальную сеть своя. Или я ошибаюсь?

    А это как организуете. Просто если есть imq то нужда организовывать очереди на интерфейсе в локалку отпадает. Пример - раньше вы ставили шейпер исходящего трафика на ppp0 а входящего на eth0. Теперь у вас есть imq - шейпер исходящего трафика вы оставляете на ppp0 а шейпер входящего переносите на imq. Остается по прежнему 2 очереди, только трафик сервера теперь попадает и во входящую (на eth0 он не попадал) - т е на imq вместе с трафиком клиентов.

     
     
  • 5.76, Rusty (??), 14:26, 03/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Классно, получилось ограничить скорость сервака и пользователей сети на IMQ как вы и писали. Это радует. Только опять проблема. Хочу ограничить скорость для пользователя сервака. Если маркировать по uid (-m owner --uid-owner user1) то это будет работать для исходящих пакетов. Как быть с входящими?
     
     
  • 6.77, alex2ndr (ok), 15:30, 03/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Могу предложить теоретическое решение - на практике не проверялось Есть такая ш... большой текст свёрнут, показать
     
     
  • 7.78, Rusty (??), 19:08, 03/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    1) Борюсь с connmark хочу проверить хватит ли мне ограничения только tcp соединений. В принципе на сервере только торренты юзаются думаю хватит.

    пишу
    iptables -A OUTPUT -t mangle -m owner --uid-owner user1 -j MARK --set-mark 22
    iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark
    iptables -A INPUT -t mangle -m connmark --mark 22 -j MARK --set-mark 22
    и всеравно пакеты попадают в дефолтную очередь а не в указанную фильтром
    tc filter add dev $IMQ_IN parent 1:0 prio 5 handle 22 fw flowid 1:22

    2) второе решение это направлять пакеты в NFQUEUE iptables. Писать прогу демон который будет смотреть порты назначения пакетов искать пользователя и ставить метку. Ну а дальше обычный путь в IMQ и т.д. жесть конечно но лучше не нашел пока что ))

    О результатах отпишусь.

     
     
  • 8.79, alex2ndr (ok), 19:21, 03/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален А --restore-mark разве на входе не требуется Либо я чег... большой текст свёрнут, показать
     
     
  • 9.80, Rusty (??), 21:20, 03/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    значит заработало с CONNMARK следующим образом надо было добавить protocol ip ч... текст свёрнут, показать
     
     
  • 10.81, Донченко (ok), 10:00, 04/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Описанным образом мы загнали в шейпер пакеты TCP, единственно принадлежащие соед... текст свёрнут, показать
     

  • 1.82, RebelX (ok), 14:23, 08/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Интересная система. Было бы здорово, если бы список пользователей хранился в отдельном файле. И ещё, как можно организовать работу с несколькими аплинками? Я вижу следующие сложности: несколько аплинков могут иметь разные скорости (можно несколько раз запускать скрипт с разными параметрами), а как быть с интерфейсом смотрящим в сеть (он же один для всех аплинков)? Чувствую и для этого понадобится imq.
     
     
  • 2.83, Донченко (ok), 09:50, 09/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Уже над этим думали и даже были варианты Например - список пользователей можно ... большой текст свёрнут, показать
     
     
  • 3.85, RebelX (ok), 18:24, 13/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Но даже если IMQ нет - ничего страшного. Мы же используем на
    >DEV_IN раздельные классы для интернет и локального трафика? Ну, будем использовать
    >не 2, а три или четыре раздельных класса, что не заимствуют
    >друг у друга скорость. А клиентов отправлять по классам через маркировку
    >в IPTABLES, и кстати, такая же маркировка позволит нам легко выполнять
    >маршрутизацию пакетов по интерфейсам.

    Не могли бы Вы опубликовать эту реализацию, хотя бы в сыром виде без оснастки.
    С радостью протестирую такой вариант.

     
     
  • 4.86, Донченко (ok), 16:26, 15/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Вариант уже готов. Разумеется бета. Но выкладывать пока не будем, а вот если хотите потестить - пишите на мой ящик, перешлю.
     
  • 2.84, alex2ndr (ok), 12:18, 09/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Как уже сказал Евгений мы работаем над этим Вот только честно говоря реализация... большой текст свёрнут, показать
     

  • 1.87, Донченко (ok), 09:30, 16/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Для насыщения новой версии примерами использования, значительно облегчающими жизнь неопытным пользователям, что затрудняются с описательной частью скрипта, прошу излагать Ваши обстоятельства (сетевые интерфейсы, подсети, установленные  на сервере службы или используемые на сервере интернет клиенты, необходимость удаленного доступа и т.д.). Если хотите - пишите лично.
     
  • 1.88, Федор (?), 18:37, 18/10/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Этот скрипт будет работать на mandrivе?
    Linux Mandriva 2009 i586
    Заранее благодарен.
     
     
  • 2.89, alex2ndr (ok), 12:21, 19/10/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Этот скрипт будет работать на mandrivе?
    >Linux Mandriva 2009 i586
    >Заранее благодарен.

    Будет. Данный скрипт не зависит от конкретного дистрибутива. Главное чтобы были все используемые утилиты - ip, tc и iptables.

     

  • 1.90, evol (?), 13:35, 24/11/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    что то тишина !
    проект загнулся?
     
     
  • 2.91, hand (?), 21:17, 24/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    нет.
     
  • 2.92, Донченко (ok), 00:33, 27/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Ни в коем случае! В ближайшее время планируется выход следующей статьи, с расширенным вариантом шейпер+фаервол. На баше, и если Александр успеет выгладить баги, на питоне. Функционал, естественно, в рамках необходимых авторам проекта (пока), а также тем добровольцам, что согласились участвовать в тестировании (это в основном про Антона).
     
     
  • 3.93, Alex (??), 09:53, 27/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    классная идея!
    Возможно ли вычислять max_rate машине самостоятельно (т.е. скачивание файла с инета), хранить его в качестве переменной?
     
     
  • 4.96, alex2ndr (ok), 14:07, 30/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >классная идея!
    >Возможно ли вычислять max_rate машине самостоятельно (т.е. скачивание файла с инета), хранить
    >его в качестве переменной?

    max_rate это максимальная скорость канала?
    Мы думали над этим - но это сложная затея. Он разный для разных сегментов интернета в одинаковые промежутки времени. Например можно качать исходники ядра одновременно с разных зеркал - и скорость будет разная. К тому же такой замер занимет определенное время(несколько минут наверно) - поэтому сложно его сделать интерактивным. Пока есть идея просто пинговать ДНС провайдера и вносить изменения в max_rate в  соответствии с задержкой. НО пока только на стадии идеи.

     

  • 1.94, p31 (?), 23:24, 27/11/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А когда выйдет последующая статья?
     
     
  • 2.95, alex2ndr (ok), 13:29, 30/11/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >А когда выйдет последующая статья?

    Мы ее пишем - но пока еще не могу назвать конкретных сроков. Уж больно много частных случаев попалось - пытаемся обобщить и упростить.

     

  • 1.97, Alex (??), 17:53, 03/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    73: Syntax error: "(" unexpected

    ругается на эту скобку... что делать?
    LOCAL_IPS=(

     
     
  • 2.98, alex2ndr (ok), 10:25, 04/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Кусок скрипта с массивом LOCAL_IPS целиком дайте. Или просто свяжитесь со мной по почте.
     
  • 2.99, Alex (??), 12:03, 04/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Во втором варианте скрипта задаем айпишники клиентов

    LOCAL_IPS=(
    [1]="192.168.100.10 4 1 80"
    [2]="192.168.100.20 4 1 70"
    [3]="192.168.100.25 4 1 50"
    ...
    ...
    )

    при попытке запуска вылетает с ошибкой Syntax error: "(" unexpected

     
     
  • 3.100, alex2ndr (ok), 13:13, 04/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Такое ощущение что где-то скобку забыли(или лишнюю написали) - но это по всему файлу искать надо. Также может быть вы не из под bash это запускаете(например в busybox). Если сами не найдете - присылайте.
     
     
  • 4.101, Day Anger (?), 03:56, 09/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Было бы интересно посмотреть на реализацию этого скрипта (да и испытать :)) для схемы:
    eth0 смотрит в сеть
    eth1 в интернет
    стоит VPN сервер (pptpd) к которому подключаются(ppp0, ppp1 и т.д.) из сети и получают интернет через nat
    но с учетом того к примеру, что у одного IP максимум входящий/исходящий канал 512/64, а у остальных 8192/1024
     
     
  • 5.102, alex2ndr (ok), 13:40, 09/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Было бы интересно посмотреть на реализацию этого скрипта (да и испытать :))
    >для схемы:
    >eth0 смотрит в сеть
    >eth1 в интернет
    >стоит VPN сервер (pptpd) к которому подключаются(ppp0, ppp1 и т.д.) из сети
    >и получают интернет через nat
    >но с учетом того к примеру, что у одного IP максимум входящий/исходящий
    >канал 512/64, а у остальных 8192/1024

    Думаю что такое возможно. Даже могу примерно представить схему как это реализуется. Но мы сейчас это реализовать не успеваем - готовим следующую статью.

    Если вам хочется такой вариант (получить и испытать) то предлагаю разработать его самолично с нашей помощью. Свяжитесь со мной или Евгением, мы постараемся выдать направление и наброски куда копать. Но саму работу придется осуществлять Вам.

     
     
  • 6.103, Донченко (ok), 00:24, 11/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Александр преувеличивает сложность. В новом варианте, что сейчас готовится к публикации, эта задача решается в стандартных настройках. Единственно - ядро должно поддерживать IMQ.
    Т.е. входящий трафик шейпится сразу на eth0 (это конечно не так, но для простоты...), а затем раздается клиентам, с необходимыми полосами пропускания. В этом случае все равно, куда идут пакеты - на ETH1 или через ppp*.
     
     
  • 7.104, alex2ndr (ok), 11:44, 11/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Александр преувеличивает сложность. В новом варианте, что сейчас готовится к публикации, эта
    >задача решается в стандартных настройках. Единственно - ядро должно поддерживать IMQ.
    >
    >Т.е. входящий трафик шейпится сразу на eth0 (это конечно не так, но
    >для простоты...), а затем раздается клиентам, с необходимыми полосами пропускания. В
    >этом случае все равно, куда идут пакеты - на ETH1 или
    >через ppp*.

    Я предложил вариант направить весь трафик с ppp в ifb и шейпить его там. Решается это скриптом в 3 строки. Мне показалось что скрипт в 3 строки проще чем пересборка ядра и iptables. Но в любом случае запасной вариант с imq есть.

     
     
  • 8.106, alex2ndr (ok), 12:31, 14/12/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Погорячился я с ifb Пришли к мнению что сделать такой фокус с помощью ifb не по... текст свёрнут, показать
     

  • 1.105, alex2ndr (ok), 11:52, 11/12/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Так как наша разработка уже вырастает за рамки отдельного скрита и появилось много интересующихся, то мы решили куда-нить все это выложить - http://asfs.sourceforge.net/

    Те кому интересен конкретная ситуация могут посмотреть в git - http://asfs.git.sourceforge.net/git/gitweb.cgi?p=asfs/asfs;a=summary

    Пока обтачиваем то что есть и пишем статью.

     
  • 1.108, PhoeDOS (ok), 09:29, 18/01/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Пользуюсь вашим шейпером на домашнм роутере (Ubuntu 9.10) Шейпит 6 человек. Скорость на нашем безлим меняется по времени суток, поэтому лежат несколько копий шейпера(с разными скоростями вход. канала), настроил cron на запуск по времени.
    Пожелания на будущее...
    1. выдавать icmp и dns максимальный приоритет
    2. поскольку у одного клиента м.б. несколько ПК, делать одно ограничение скорости на эту группу ПК, например:
    канал 1 мегибит
    192.168.1.1 - клиент 1, шейпинг 0,5 мбит
    192.168.1.2 - клиент 2 ноутбук
    192.168.1.3 - клиент 2 сервер
    у 2 и 3 динамический шейпинг в рамках своих 0,5 мегабит (т.е. по 0,25 мегабит) с последующим повышением до 0,5 при отключении клиента 1.

    Спасибо за ваш труд, у радостью потестим ваши новые версии!

     
     
  • 2.109, alex2ndr (ok), 10:30, 19/01/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Собственно новая версия на shell почти готова. Осталось ее потестить для функционала, отличного от того что есть у нас(т е в других условиях). Ваши пожелания там в принципе реализованы(1 точно, а о 2-м мы просто не думали - мне кажется с имеющимся функционалом это можно сделать - тестировать надо :) ). Лежит она пока тут -
    http://asfs.git.sourceforge.net/git/gitweb.cgi?p=asfs/asfs;a=blob;f=shell/ads
    Если желаете можете тестировать - если будут какие-то вопросы, проблемы и тд - связывайтесь с нами по почте. К сожаления без статьи которую мы готовим в ней трудно разобраться с налету.
     

  • 1.110, evol (?), 13:12, 17/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    когда ждать релиза?
     
     
  • 2.111, alex2ndr (ok), 15:17, 18/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >когда ждать релиза?

    Со статьей тормозим. У обоих работа навалилась. Наброски всех частей есть, но их еще нужно объединить в читабельную статью...

    Сам скрипт в двух вариациях(python и shell) уже готов.
    Python в пакетах можно взять тут -
    http://sourceforge.net/projects/asfs/files/
    или скачать с git и собрать.
    версию на shell лучше брать из git - git://asfs.git.sourceforge.net/gitroot/asfs/asfs
    или вот - http://asfs.git.sourceforge.net/git/gitweb.cgi?p=asfs/asfs;a=blob;f=shell/ads

     
     
  • 3.112, evol (?), 08:28, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    значит подождем ман)
     
     
  • 4.113, alex2ndr (ok), 11:01, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Вы не поверите Man я тоже написал правда только для питона Пока такого соде... большой текст свёрнут, показать
     

  • 1.114, evol (?), 13:03, 19/05/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    это снова я )) как там дела.?
     
  • 1.115, netc (ok), 12:10, 16/06/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    очень интересно.
    тоже с нетерпением жду релиза ;)
     
  • 1.116, netc (ok), 12:15, 16/06/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    кто нибудь пробывал ставить из пакетов подготовленных автором ?
     
     
  • 2.117, alex2ndr (ok), 13:03, 16/06/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >кто нибудь пробывал ставить из пакетов подготовленных автором ?

    Есть люди, которые ставили. Вроде работает. Только надо этот пакет самому собирать из репозитория. Та версия(собранный пакет), что лежит на sourceforge немного устарела.

    Пишите нам, господа, если что-то не получается. Наброски статьи выложу. Текст написан почти весь, но, увы, рисунки не все. Как-то не доходят руки нарисовать. Если кто возьмется помочь - милости прошу. Евгений начал делать в ms visio, а я с visio не очень... А переделать в dia у меня рука не поднимается. А самому Евгению - некогда.

     
     
  • 3.118, evol (?), 09:45, 17/06/2010 [^] [^^] [^^^] [ответить]  
  • +/
    а что на этих рисунках отображено? что то я не могу представить!
     
     
  • 4.119, alex2ndr (ok), 10:55, 17/06/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >а что на этих рисунках отображено? что то я не могу представить!
    >

    Много всякого. Статья будет состоять из 2-х частей. Теория, в которой описываются общие аспекты, и которая содержит наибольшее количество рисунков и Практика, которая описывает как работать с новым скриптом шейпера. Практика рисунков не содержит.
    Теорию выложил здесь:
    http://ubuntologia.ru/forum/viewtopic.php?f=109&t=3324
    Отсутствующие рисунки сами увидите. В принципе они рисуются на основе уже нарисованного и исходники есть, но с visio я не очень...

     
     
  • 5.120, alex2ndr (ok), 11:21, 17/06/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Картинки там теперь почему-то плоховатого качества, но у меня есть все оригиналы нормального качества. Вероятно этот radikal со временем сжимает большие картинки.
     
  • 2.123, Valera (??), 21:25, 04/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >кто нибудь пробывал ставить из пакетов подготовленных автором ?

    да и получилось:
    [root@server Документы]# ./adsl_qos restart
    Shaping removed on ppp0/eth0.
    Поднимаем шейпер на выходном интерфейсе ppp0
    Поднимаем шейпер на входном интерфейсе eth0
    Illegal "match"
    Что делать?


     
     
  • 3.124, alex2ndr (ok), 11:08, 05/07/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >>кто нибудь пробывал ставить из пакетов подготовленных автором ?
    >
    >да и получилось:
    >[root@server Документы]# ./adsl_qos restart
    >Shaping removed on ppp0/eth0.
    > Поднимаем шейпер на выходном интерфейсе ppp0
    > Поднимаем шейпер на входном интерфейсе eth0
    >Illegal "match"
    > Что делать?

    Правила то применились? Какой дистриб, какая версия баша и тд.? Заполнили настройки верно?
    Вы ее из репа взяли или откуда?

    Как-то было такое, что сыпались похожие ощибки, но вроде все пофиксили. Похоже на опечатку. Тестировать можно так: расставить в коде всякие echo с разными номерами и смотреть после какого вылезает ошибка. У нас мало тестеров, поэтому кое-что может быть не отлажено.

     

  • 1.121, evol (?), 12:24, 17/06/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    да статейка хорошая . прочел. сохранил.
    Но это теория ,а как на счет самой установки на настройки shell скрипта , со всеми последствиями и с вариантом IMQ.?
     
  • 1.122, evol (?), 14:57, 17/06/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ой. не сразу догнал!
    ждем практику
     
  • 1.125, evol (?), 21:43, 02/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    ребята ! когда ожидать практику !?
     
     
  • 2.128, alex2ndr (ok), 11:02, 31/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >ребята ! когда ожидать практику !?

    Лето, поэтому нам не до этого - отпуска :)
    Сейчас осенью постараемся добить.

     

  • 1.126, sau (?), 09:54, 28/08/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    есть предложение в секции проброса портов добавить возможность указания IP адреса источника.
     
     
  • 2.127, alex2ndr (ok), 11:00, 31/08/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Это предлагается сделать для безопасности? Или есть какой-то иной смысл?

    Если я правильно понял, то что вы предлагаете сделать называется фильтрацией. И ее можно отдельно настроить в таблицах доступа(для последнего скрипта). А добавлять фильтрацию в правила для DNAT не стоит - авторы iptables не рекомендуют.

     

  • 1.129, Андрей (??), 15:27, 27/09/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я поражен! Спасибо огромное, буду изучать.
     
  • 1.130, DAN (??), 21:28, 16/01/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Ребята, спасибо за скрипт, но не пойму почему не работает. Нет ошибок, но роутинг не работает. Ось убунту 10.10 server.
    eth0 на DHTP он к модему, соединении есть.
    eth1 локала. Статика. В чем может быть проблема.
     
  • 1.131, DAN (??), 21:28, 16/01/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Да, http://sourceforge.net/projects/asfs/files/Debian%20Lenny/ это что за зверь, ваша робота или других людей. Он, как я понял на питоне. Кто-то пробовал.
     
  • 1.133, Андрей (??), 02:06, 24/10/2011 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    В общем ситуация такая: сервера нет, но есть Роутер D-Link DIR 320 (Флеш - 4MB, ОЗУ - 32MB(есть возможность расширить до 64) и USB флешка на 4GB) с альтернативной пришивкой от "Олега" на базе Linux, версия 1.9.2.7-d, ядро 2.4.37. Вопрос будет ли данный шейпер работать на нём?
    PS: Пробовал запустить, выдаёт ошибку
    "/usr/local/sbin/adsl_qos: line 73: syntax error: unexpected "(""
     

    игнорирование участников | лог модерирования

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру