<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://miac.volmed.org.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=187.49.174.245</id>
	<title>Wiki МИАЦ ВО - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://miac.volmed.org.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=187.49.174.245"/>
	<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/187.49.174.245"/>
	<updated>2026-05-17T14:34:24Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.44.0</generator>
	<entry>
		<id>https://miac.volmed.org.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%88%D0%B5%D0%B9%D0%BF%D0%B5%D1%80%D0%B0&amp;diff=2447</id>
		<title>Настройка шейпера</title>
		<link rel="alternate" type="text/html" href="https://miac.volmed.org.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D1%88%D0%B5%D0%B9%D0%BF%D0%B5%D1%80%D0%B0&amp;diff=2447"/>
		<updated>2010-07-18T16:43:39Z</updated>

		<summary type="html">&lt;p&gt;187.49.174.245: /* Ð¡ÐºÑÐ¸Ð¿Ñ Ð¿Ð¾ ÑÐ±ÑÐ¾ÑÑ Ð²ÑÐµÑ ÑÑÑÐ°Ð½Ð¾Ð²Ð¾Ðº */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Тут я приведу пример своего шейперра. Для того, что бы все функции его заработали нужно пропачить ядро, iptables и iproute.&amp;lt;br&amp;gt;&lt;br /&gt;
Смотри [[Наложение патчей IMQ, ESFQ и Layer7]]&lt;br /&gt;
==Задачи, решаемые шейпером==&lt;br /&gt;
1. Обеспечить справедливое разделение internet канала между пользователями &amp;lt;br&amp;gt;&lt;br /&gt;
2. Ввести ограничение на входящий трафик, что бы у исходящего трафика не было задержек.&amp;lt;br&amp;gt;&lt;br /&gt;
3. Использовать IMQ интерфейсы&amp;lt;br&amp;gt;&lt;br /&gt;
4. Использовать справедливое деление канала ESFQ&lt;br /&gt;
==Литература==&lt;br /&gt;
Использовалась [http://www.mgul.ac.ru/~t-alex/Linux/Traffic-Control-HOWTO/ Linux Advanced Routing &amp;amp; Traffic Control HOWTO]&lt;br /&gt;
==Сам скрипт==&lt;br /&gt;
Файл speed.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#set -x&lt;br /&gt;
# Загружаем модули, если они были не загружены&lt;br /&gt;
/sbin/modprobe ip_tables&lt;br /&gt;
/sbin/modprobe ip_conntrack&lt;br /&gt;
/sbin/modprobe iptable_filter&lt;br /&gt;
/sbin/modprobe iptable_mangle&lt;br /&gt;
/sbin/modprobe iptable_nat&lt;br /&gt;
/sbin/modprobe ipt_LOG&lt;br /&gt;
/sbin/modprobe ipt_limit&lt;br /&gt;
/sbin/modprobe ipt_state&lt;br /&gt;
/sbin/modprobe ipt_owner&lt;br /&gt;
/sbin/modprobe ipt_REJECT&lt;br /&gt;
/sbin/modprobe ipt_MASQUERADE&lt;br /&gt;
/sbin/modprobe ip_conntrack_ftp&lt;br /&gt;
/sbin/modprobe ip_conntrack_irc&lt;br /&gt;
/sbin/modprobe ip_nat_ftp&lt;br /&gt;
/sbin/modprobe ip_nat_irc&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
#eth2 - внешний интерфейс&lt;br /&gt;
#eth0 - внутренний интерфейс&lt;br /&gt;
&lt;br /&gt;
# IP адрес человека, которог надо ограничить более низкой скоростью&lt;br /&gt;
ip_bad=172.16.131.13&lt;br /&gt;
ip_bad1=172.16.131.49&lt;br /&gt;
&lt;br /&gt;
ipt=/usr/local/sbin/iptables&lt;br /&gt;
ipr=/usr/sbin/tc&lt;br /&gt;
# Интернетовская внутренняя сеть VPN&lt;br /&gt;
in_net=172.16.131.0/24&lt;br /&gt;
# Внешния IP адрес сервера&lt;br /&gt;
out_adr=78.36.15.11&lt;br /&gt;
touch /var/lock/subsys/local&lt;br /&gt;
#DEV_OUT=eth0&lt;br /&gt;
# Внешний интерфейс&lt;br /&gt;
DEV_OUT=eth2&lt;br /&gt;
# Внутренний интерфейс&lt;br /&gt;
DEV_IN=eth1&lt;br /&gt;
# Загружаем модуль IMQ&lt;br /&gt;
modprobe imq numdevs=4&lt;br /&gt;
&lt;br /&gt;
# Максимальная входящая от прова скорость интернета (kbit)- Делаем четь меньше скорости, которую&lt;br /&gt;
# +дает провайдер &lt;br /&gt;
RATEOUT=500&lt;br /&gt;
&lt;br /&gt;
# Максимальная исходящая от прова  скорость интернета (kbit)- Делаем четь меньше скорости, которую&lt;br /&gt;
# +дает провайдер &lt;br /&gt;
RATEDN=500&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Сбросить все в известное состояние (очищеное)&lt;br /&gt;
$ipr qdisc del dev imq0 root 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipr qdisc del dev imq1 root 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# очистка таблицы mangle&lt;br /&gt;
$ipt -t mangle -F&lt;br /&gt;
&lt;br /&gt;
$ipr qdisc del dev imq0 root &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
$ipr qdisc del dev imq1 root &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ipt -t mangle -D POSTROUTING -o ppp+ -d $in_net -j POST_MY 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipt -t mangle -F POST_MY 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipt -t mangle -X POST_MY 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipt -t mangle -F MYSHAPER-IN 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipt -t mangle -X MYSHAPER-IN 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
$ipt -t mangle -D PREROUTING -i ppp+ -s $in_net -j PRE_MY  2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipt -t mangle -F PRE_MY 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
$ipt -t mangle -X PRE_MY 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
ip link set imq0 down 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
ip link set imq1 down 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
rmmod imq 2&amp;gt; /dev/null &amp;gt; /dev/null&lt;br /&gt;
&lt;br /&gt;
modprobe imq numdevs=4&lt;br /&gt;
#ip link set imq0 up&lt;br /&gt;
ip link set imq0  up&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# ограничение скорости канала -----------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
###########################################################&lt;br /&gt;
#&lt;br /&gt;
# Ограничение исходящего потока (ограничивает пропускную способность до RATEUP)&lt;br /&gt;
&lt;br /&gt;
# установить размер очереди, соответствующий двухсекундной задержке на низкоприоритетном трафике&lt;br /&gt;
ip link set dev imq0 qlen 10&lt;br /&gt;
&lt;br /&gt;
# изменяем значение mtu на исходящем устройстве. Понижение значения mtu уменьшит задержку, но&lt;br /&gt;
# и немного понизит пропускную способность из-за увеличения числа&lt;br /&gt;
# заголовков протоколов IP и TCP .&lt;br /&gt;
ip link set dev imq0 mtu 1400&lt;br /&gt;
&lt;br /&gt;
$ipr qdisc add dev imq0 root handle 1: htb default 14 r2q 1&lt;br /&gt;
#$ipr qdisc add dev $ethi root handle 1: htb&lt;br /&gt;
&lt;br /&gt;
$ipr class add dev imq0  parent 1:  classid 1:1  htb rate $[$RATEOUT]kbit  ceil ${RATEOUT}kbit&lt;br /&gt;
&lt;br /&gt;
# ssh, DNS, Голосовая почта&lt;br /&gt;
$ipr class add dev imq0 parent 1:1  classid 1:10  htb rate $[$RATEOUT/3]kbit  ceil ${RATEOUT}kbit prio 0&lt;br /&gt;
&lt;br /&gt;
# HTTP&lt;br /&gt;
$ipr class add dev imq0 parent 1:1  classid 1:11  htb rate $[$RATEOUT/4]kbit  ceil ${RATEOUT}kbit prio 1&lt;br /&gt;
&lt;br /&gt;
# ftp, bittonet&lt;br /&gt;
$ipr class add dev imq0 parent 1:1  classid 1:12  htb rate $[$RATEOUT/6]kbit  ceil ${RATEOUT}kbit prio 4&lt;br /&gt;
&lt;br /&gt;
# bad users&lt;br /&gt;
$ipr class add dev imq0 parent 1:1  classid 1:13  htb rate $[$RATEOUT/8]kbit  ceil $[$RATEOUT/3]kbit  prio 6&lt;br /&gt;
&lt;br /&gt;
# Other&lt;br /&gt;
$ipr class add dev imq0 parent 1:1  classid 1:14  htb rate $[$RATEOUT/4]kbit  ceil ${RATEOUT}kbit prio 3&lt;br /&gt;
&lt;br /&gt;
$ipr qdisc  add dev imq0 parent 1:10  handle 100: esfq perturb 10&lt;br /&gt;
$ipr qdisc  add dev imq0 parent 1:11  handle 110: esfq perturb 10&lt;br /&gt;
$ipr qdisc  add dev imq0 parent 1:12  handle 120: esfq perturb 10&lt;br /&gt;
$ipr qdisc  add dev imq0 parent 1:13  handle 130: esfq perturb 10&lt;br /&gt;
$ipr qdisc  add dev imq0 parent 1:14  handle 140: esfq perturb 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ipr filter add dev imq0 protocol ip parent 1:0 prio 0 handle 1 fw flowid 1:10&lt;br /&gt;
$ipr filter add dev imq0 protocol ip parent 1:0 prio 1 handle 2 fw flowid 1:11&lt;br /&gt;
$ipr filter add dev imq0 protocol ip parent 1:0 prio 2 handle 3 fw flowid 1:12&lt;br /&gt;
$ipr filter add dev imq0 protocol ip parent 1:0 prio 4 handle 4 fw flowid 1:13&lt;br /&gt;
$ipr filter add dev imq0 protocol ip parent 1:0 prio 3 handle 5 fw flowid 1:14&lt;br /&gt;
&lt;br /&gt;
#set -x&lt;br /&gt;
$ipt -t mangle -N POST_MY&lt;br /&gt;
$ipt -t mangle -N PRE_MY&lt;br /&gt;
&lt;br /&gt;
$ipt -t mangle -I POSTROUTING -o ppp+ -d $in_net   -j POST_MY&lt;br /&gt;
$ipt -t mangle -I PREROUTING -i ppp+ -s $in_net -j PRE_MY&lt;br /&gt;
&lt;br /&gt;
$ipt -t mangle -A POST_MY -p tcp --sport 5190 -j MARK --set-mark 0x2&lt;br /&gt;
# интернет-пейджер aol&lt;br /&gt;
# ICMP (ping) - высокий приоритет,&lt;br /&gt;
$ipt -t mangle -A  POST_MY -p icmp  -j MARK --set-mark 0x1&lt;br /&gt;
$ipt -t mangle -A  POST_MY -m tos --tos Minimize-Delay  -j MARK --set-mark 0x1&lt;br /&gt;
$ipt -t mangle -A  POST_MY -m tos --tos Maximize-Throughput  -j MARK --set-mark 0x4&lt;br /&gt;
$ipt -t mangle -A  POST_MY -p tcp -m length --length :64 -j MARK --set-mark 0x1&lt;br /&gt;
# маленькие пакеты&lt;br /&gt;
# скорее всего ACK-пакеты&lt;br /&gt;
&lt;br /&gt;
#set -x&lt;br /&gt;
# SSH&lt;br /&gt;
$ipt -t mangle -A POST_MY -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1&lt;br /&gt;
&lt;br /&gt;
# Голсовая почта&lt;br /&gt;
$ipt -t mangle -A POST_MY -p tcp -m tcp --sport 5038 -j MARK --set-mark 0x1&lt;br /&gt;
#$ipt -t mangle -A PRE_MY -p tcp -m tcp --sport 2000 -j MARK --set-mark 0x1&lt;br /&gt;
&lt;br /&gt;
# SYN&lt;br /&gt;
$ipt -t mangle -A  POST_MY  -p tcp -m tcp --tcp-flags SYN,RST,ACK, SYN -j MARK --set-mark 0x1&lt;br /&gt;
# DNS&lt;br /&gt;
$ipt -t mangle -A  POST_MY -p UDP  -j MARK --set-mark 1&lt;br /&gt;
$ipt -t mangle -A  POST_MY -p tcp -m tcp --sport 53 -j MARK --set-mark 1&lt;br /&gt;
#set +x&lt;br /&gt;
&lt;br /&gt;
# HTTP трафик&lt;br /&gt;
$ipt -t mangle -A POST_MY  -m layer7 --l7proto http -j MARK --set-mark 0x2&lt;br /&gt;
$ipt -t mangle -A PRE_MY -p tcp -m layer7 --l7proto http -j MARK --set-mark 0x2&lt;br /&gt;
&lt;br /&gt;
# Плохие пользователи&lt;br /&gt;
$ipt -t mangle -A POSTROUTING -o ppp+  -p tcp -s $ip_bad/255.255.255.255 -j MARK --set-mark 0x4&lt;br /&gt;
$ipt -t mangle -A POSTROUTING -o ppp+  -p tcp -d $ip_bad/255.255.255.255 -j MARK --set-mark 0x4&lt;br /&gt;
$ipt -t mangle -A POSTROUTING -o ppp+  -p tcp -s $ip_bad1/255.255.255.255 -j MARK --set-mark 0x4&lt;br /&gt;
$ipt -t mangle -A POSTROUTING -o ppp+  -p tcp -d $ip_bad1/255.255.255.255 -j MARK --set-mark 0x4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# FTP Bittonet&lt;br /&gt;
$ipt -t mangle -A POST_MY  -m layer7 --l7proto bittorrent -j MARK --set-mark 0x3&lt;br /&gt;
$ipt -t mangle -A POST_MY  -m layer7 --l7proto directconnect -j MARK --set-mark 0x3&lt;br /&gt;
$ipt -t mangle -A POST_MY   -m layer7 --l7proto ftp -j MARK --set-mark 0x3&lt;br /&gt;
&lt;br /&gt;
# Паренаправляем очередь на IMQ&lt;br /&gt;
$ipt -t mangle -A POST_MY -j IMQ --todev 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ipt -t mangle -A FORWARD -i eth0 -o eth0 -j DROP&lt;br /&gt;
$ipt -t mangle -A FORWARD -i eth1 -o eth1 -j DROP&lt;br /&gt;
$ipt -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu&lt;br /&gt;
&lt;br /&gt;
####################################################&lt;br /&gt;
#&lt;br /&gt;
# Ограничение входящего потока (ограничивает пропускную способность до RATEDN)&lt;br /&gt;
&lt;br /&gt;
# убедимся, что модуль imq загружен&lt;br /&gt;
#exit&lt;br /&gt;
modprobe imq numdevs=4&lt;br /&gt;
&lt;br /&gt;
ip link set imq1 up&lt;br /&gt;
&lt;br /&gt;
ip link set dev imq1 qlen 1000&lt;br /&gt;
# добавляем дисциплину - низкоприоритетный класс по умолчанию 1:21&lt;br /&gt;
&lt;br /&gt;
tc qdisc add dev imq1 handle 1: root htb default 21&lt;br /&gt;
&lt;br /&gt;
# добавляем общее ограничение скорости по классу&lt;br /&gt;
tc class add dev imq1 parent 1: classid 1:1 htb rate ${RATEDN}kbit&lt;br /&gt;
&lt;br /&gt;
# добавляем подклассы - TCP traffic in 21, non TCP traffic in 20&lt;br /&gt;
#&lt;br /&gt;
tc class add dev imq1 parent 1:1 classid 1:20 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 0&lt;br /&gt;
tc class add dev imq1 parent 1:1 classid 1:21 htb rate $[$RATEDN/2]kbit ceil ${RATEDN}kbit prio 1&lt;br /&gt;
&lt;br /&gt;
# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.&lt;br /&gt;
# SFQ обеспечит почти честное деление полосы пропускания между соединениями&lt;br /&gt;
# внутри каждого класса.&lt;br /&gt;
tc qdisc add dev imq1 parent 1:20 handle 20: sfq perturb 10&lt;br /&gt;
tc qdisc add dev imq1 parent 1:21 handle 21: red limit 1000000 min 5000 max 100000 avpkt 1000 burst 50&lt;br /&gt;
&lt;br /&gt;
# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением&lt;br /&gt;
#                                        fwmark установленном на пакете (мы будем устанавливать это&lt;br /&gt;
#                                        значение утилитой iptables позже). Обратите внимание, что&lt;br /&gt;
#                                        выше мы установили класс по умолчанию 1:26, так что&lt;br /&gt;
#                                        немаркированные пакеты (или с неизвестными значениями fwmark&lt;br /&gt;
#                                        будут направлены в низкоприоритетный класс.&lt;br /&gt;
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20&lt;br /&gt;
tc filter add dev imq1 parent 1:0 prio 0 protocol ip handle 21 fw flowid 1:21&lt;br /&gt;
&lt;br /&gt;
# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу, которую будем&lt;br /&gt;
#                                                  использовать для фильтрации и установки fwmark&lt;br /&gt;
$ipt -t mangle -N MYSHAPER-IN&lt;br /&gt;
$ipt -t mangle -I PREROUTING -i $DEV_OUT -j MYSHAPER-IN&lt;br /&gt;
&lt;br /&gt;
# маркируем пакеты с помощью fwmark - устанавливаем значения 20-26 в зависимости от&lt;br /&gt;
#                                     нужного класса. Высший приоритет - 20.&lt;br /&gt;
$ipt -t mangle -A MYSHAPER-IN -p ! tcp -j MARK --set-mark 20              # Маркировать не-tcp пакеты как высокоприоритетные&lt;br /&gt;
$ipt -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -j MARK --set-mark 20 # маленькие TCP-пакеты - вероято ACK&lt;br /&gt;
$ipt -t mangle -A MYSHAPER-IN -p tcp --dport ssh -j MARK --set-mark 20    # secure shell&lt;br /&gt;
$ipt -t mangle -A MYSHAPER-IN -p tcp --sport ssh -j MARK --set-mark 20    # secure shell&lt;br /&gt;
#$ipt -t mangle -A MYSHAPER-IN -p tcp --dport telnet -j MARK --set-mark 20 # telnet (ew...)&lt;br /&gt;
#$ipt -t mangle -A MYSHAPER-IN -p tcp --sport telnet -j MARK --set-mark 20 # telnet (ew...)&lt;br /&gt;
$ipt -t mangle -A MYSHAPER-IN -m mark --mark 0 -j MARK --set-mark 21      # избыточно - маркировать немаркированные&lt;br /&gt;
                                                                              # пакеты как 26 (низкий приоритет)&lt;br /&gt;
&lt;br /&gt;
# Наконец, пропустить все эти пакеты через imq0&lt;br /&gt;
$ipt -t mangle -A MYSHAPER-IN -j IMQ --todev 1&lt;br /&gt;
&lt;br /&gt;
# Конец ограничения входящего потока&lt;br /&gt;
#&lt;br /&gt;
####################################################&amp;lt;/pre&amp;gt;&lt;br /&gt;
C8cJnh  &amp;lt;a href=&amp;quot;http://jtnnsagpluav.com/&amp;quot;&amp;gt;jtnnsagpluav&amp;lt;/a&amp;gt;, [url=http://sqefikbovffc.com/]sqefikbovffc[/url], [link=http://ccgwfbrvolyb.com/]ccgwfbrvolyb[/link], http://rdxcgznqgaoe.com/&lt;br /&gt;
&lt;br /&gt;
===Тестирование===&lt;br /&gt;
С помощью команды&lt;br /&gt;
&amp;lt;pre&amp;gt;$/usr/local/sbin/iptables -L -n -v -t mangle&amp;lt;/pre&amp;gt;&lt;br /&gt;
Можно посмотреть цепочки таблицы mangle и попадает туда трафик или нет&amp;lt;br&amp;gt;&lt;br /&gt;
С помощью команды&lt;br /&gt;
&amp;lt;pre&amp;gt;/usr/sbin/tc -s  class show dev imq0&amp;lt;/pre&amp;gt;&lt;br /&gt;
можно просмотреть очереди и их изменения.&lt;/div&gt;</summary>
		<author><name>187.49.174.245</name></author>
	</entry>
</feed>