htb, tc. Правильная настройка на обоих интерфейсах роутера (загвоздка с интерфейсом смотрящим в локальную сеть)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
dduck
Сообщения: 64
ОС: Debian

htb, tc. Правильная настройка на обоих интерфейсах роутера

Сообщение dduck »

Имеется компьютер (Debian 5 Lenny. amd64. netinstall) через который, около 10 пользователей, выходят в интернет. На этом компьютере ещё запущен OpenDCHub, и TeamSpeaker (программа для передачи речи). Администрируется из локальной сети по ssh.

В конце данного поста размещён полный текст скрипта который я использую. А пока опишу кусочками

Пытаюсь настроить шейпер для деления интернета. Выходящий поток (идёт в интернет), который висит на внешнем интерфейсе INET="eth1", настроил и он работает нормально и стабильно. Я добавил корневую дисциплину HTB:

Код: Выделить всё

tc qdisc add dev $INET root handle 1: htb default 100


добавил класс с общим ограничением скорости по классу (интерфейс eth1):

Код: Выделить всё

tc class add dev $INET parent 1: classid 1:1 htb rate 256kbit ceil 256kbit


потом нацеплял подклассы и фильтры.

А вот со входящим потоком (идёт из интернета), который висит на внутреннем интерфейсе LNET="eth0", возникли затруднения следующего плана:
1)Не могу понять как разделить трафик выходящий из внутреннего интерфейса на тот, что идёт из интернета и тот, что идёт из этой же локальной сети. Я просто думаю, что если я ограничу этот интерфейс одним классом со скоростью 256кбит (это ширина канала из интернета), то приложения которые висят на роутере (OpenDCHub, и TeamSpeaker) будут съедать часть канала. Правильно ли я думаю, что эти приложения будут съедать часть канала?

Поэтому я создал правила деления трафика на внутреннем интерфейсе (eth0). Вкратце суть:
я вешу на интерфейс корневую дисциплину HTB:

Код: Выделить всё

tc qdisc add dev $LNET root handle 1: htb default 100


опишу весь канал на интерфейсе eth0:

Код: Выделить всё

tc class add dev $LNET parent 1: classid 1:1 htb rate 90mbit ceil 90mbit


создам класс который пойдёт из интеренета (Download):

Код: Выделить всё

tc class add dev $LNET parent 1:1 classid 1:2 htb rate 256kbit ceil 256kbit


создам класс который пойдёт из локальной сети:

Код: Выделить всё

tc class add dev $LNET parent 1:1 classid 1:110 htb rate 80mbit ceil 80mbit


опишу все подклассы которые пойдут из интернета:

Код: Выделить всё

tc class add dev $LNET parent 1:2 classid 1:10 htb rate [256/10]kbit ceil 256kbit prio 1
tc class add dev $LNET parent 1:2 classid 1:20 htb rate [256/10]kbit ceil 256kbit prio 2
...............


опишу все подклассы которые пойдут из локальной сети:

Код: Выделить всё

tc class add dev $LNET parent 1:110 classid 1:1100 htb rate 80mbit ceil 80mbit


потом опишу все фильтры для класса "идущего из интернета":

Код: Выделить всё

tc filter add dev $LNET protocol ip parent 1:0 prio 1 handle 11  fw flowid 1:10


опишу все фильтры для класса "гуляющего по локальной сети":

Код: Выделить всё

tc filter add dev $LNET protocol ip parent 1:0 prio 8 handle 111  fw flowid 1:1100


и промаркирую пакеты при помощи iptables.

Код: Выделить всё

............


2)В результате выполнения правил по настройке шейпера на внутреннем (локальном) интерфейсе у меня компьютер сразу начинает жутко тормозить. При выполнении правил только внешнего интерфейса всё в порядке. Подскажите пожалуйста в чём я ошибся? Может быть надо как то по другому именовать корневую дисциплину (не 1: а, например 2:) висящую на локальном интерфейсе (возможно происходит путаница с именами)? Может есть какие нибудь принципиальные ошибки?
Полный текст скрипта:

Код: Выделить всё

#!/bin/sh

#определяем сетевые интерфейсы в сокращениях
INET="eth1"
INETIP="192.168.110.2"
LNET="eth0"
LNETIP="192.168.111.1"
#определяем скорость Download и Upload
RATEDN=256
RATEUP=256


#if [ "$1" = "status" ]
#then
#        echo "[qdisc]"
#        tc -s qdisc show dev $INET
#        tc -s qdisc show dev $LNET
#        echo "[class]"
#        tc -s class show dev $INET
#        tc -s class show dev $LNET
#        echo "[filter]"
#        tc -s filter show dev $INET
#        tc -s filter show dev LNET
#        echo "[iptables]"
#        iptables -t mangle -L MYSHAPER-OUT
#        iptables -t mangle -L MYSHAPER-IN
#        iptables -t mangle -L MYSHAPER-LOCAL
#        exit
#fi

# Сбросить все в известное состояние (очищеное)
tc qdisc del dev $INET root
tc qdisc del dev $LNET root
iptables -t mangle -D POSTROUTING -o $INET -j MYSHAPER-OUT
iptables -t mangle -F MYSHAPER-OUT
iptables -t mangle -X MYSHAPER-OUT
iptables -t mangle -D POSTROUTING -o $LNET -j MYSHAPER-IN
iptables -t mangle -F MYSHAPER-IN
iptables -t mangle -X MYSHAPER-IN
iptables -t mangle -D POSTROUTING -o $LNET -j MYSHAPER-LOCAL
iptables -t mangle -F MYSHAPER-LOCAL
iptables -t mangle -X MYSHAPER-LOCAL



###########################################################
#
# Ограничение исходящего потока (ограничивает пропускную способность до RATEUP)
echo ""
echo "= LAN -> Internet =============================================="
echo ""

# установить размер очереди, соответствующий двухсекундной задержке на низкоприоритетном трафике
#ip link set dev $INET qlen 30

# изменяем значение mtu на исходящем устройстве. Понижение значения mtu уменьшит задержку, но
# и немного понизит пропускную способность из-за увеличения числа
# заголовков протоколов IP и TCP .
ip link set dev $INET mtu 1000

# добавить корневую дисциплину HTB
tc qdisc add dev $INET root handle 1: htb default 100

# добавить общее ограничение скорости по классу
tc class add dev $INET parent 1: classid 1:1 htb rate ${RATEUP}kbit


# добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
#                       Этим способом мы избегаем возможности "голодания" классов. Каждому классу
#                       разрешается занимать всю полосу пропускания, если другие классы не
#                       используются.
# ---------------------------------------------------------
echo "Creating class id: 10-100 for LNET -> INET"
tc class add dev $INET parent 1:1 classid 1:10 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $INET parent 1:1 classid 1:20 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $INET parent 1:1 classid 1:30 htb rate $[$RATEUP/10]kbit ceil ${RATEUP/5}kbit prio 3
tc class add dev $INET parent 1:1 classid 1:40 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $INET parent 1:1 classid 1:50 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $INET parent 1:1 classid 1:60 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 6
tc class add dev $INET parent 1:1 classid 1:70 htb rate $[$RATEUP/10]kbit ceil ${RATEUP/10}kbit prio 7
tc class add dev $INET parent 1:1 classid 1:80 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 8
tc class add dev $INET parent 1:1 classid 1:90 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 9
tc class add dev $INET parent 1:1 classid 1:100 htb rate $[$RATEUP/10]kbit ceil ${RATEUP}kbit prio 10


# подключаем дисциплины обработки очереди к подклассам - здесь мы используем ESFQ для каждого класса.
#                       SFQ обеспечит почти честное деление полосы пропускания между соединениями
#
# ---------------------------------------------------------
echo "Attach qdisc: sfq to class id: 10-100 for LNET -> INET"
tc qdisc add dev $INET parent 1:10 handle 10 sfq perturb 5
tc qdisc add dev $INET parent 1:20 handle 20 sfq perturb 5
tc qdisc add dev $INET parent 1:30 handle 30 sfq perturb 5
tc qdisc add dev $INET parent 1:40 handle 40 sfq perturb 5
tc qdisc add dev $INET parent 1:50 handle 50 sfq perturb 5
tc qdisc add dev $INET parent 1:60 handle 60 sfq perturb 5
tc qdisc add dev $INET parent 1:70 handle 70 sfq perturb 5
tc qdisc add dev $INET parent 1:80 handle 80 sfq perturb 5
tc qdisc add dev $INET parent 1:90 handle 90 sfq perturb 5
tc qdisc add dev $INET parent 1:100 handle 100 sfq perturb 5


# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением
#                                        fwmark установленном на пакете (мы будем устанавливать это
#                                        значение утилитой iptables позже). Обратите внимание, что
#                                        выше мы установили класс по умолчанию 1:100, так что
#                                        немаркированные пакеты (или с неизвестными значениями fwmark
#                                        будут направлены в низкоприоритетный класс.
# ---------------------------------------------------------
echo "Creating filters for class id: 10-100 for LNET -> INET"
tc filter add dev $INET protocol ip parent 1:0 prio 1 handle 11  fw flowid 1:10 #пакеты ASK и др
tc filter add dev $INET protocol ip parent 1:0 prio 1 handle 12  fw flowid 1:10 #DNS ? какой протокол
tc filter add dev $INET protocol ip parent 1:0 prio 2 handle 21  fw flowid 1:20 #SSH
tc filter add dev $INET protocol ip parent 1:0 prio 3 handle 31  fw flowid 1:30 #IP-телефония
tc filter add dev $INET protocol ip parent 1:0 prio 3 handle 32  fw flowid 1:30 #Timspeaker
tc filter add dev $INET protocol ip parent 1:0 prio 3 handle 33  fw flowid 1:30 #Skype
tc filter add dev $INET protocol ip parent 1:0 prio 4 handle 41  fw flowid 1:40 #Metatrader
tc filter add dev $INET protocol ip parent 1:0 prio 5 handle 51  fw flowid 1:50 #Games
tc filter add dev $INET protocol ip parent 1:0 prio 6 handle 61  fw flowid 1:60 #Http
tc filter add dev $INET protocol ip parent 1:0 prio 6 handle 62  fw flowid 1:60 #Mail
tc filter add dev $INET protocol ip parent 1:0 prio 7 handle 71  fw flowid 1:70 #ICQ
tc filter add dev $INET protocol ip parent 1:0 prio 7 handle 72  fw flowid 1:70 #QIP
tc filter add dev $INET protocol ip parent 1:0 prio 8 handle 81  fw flowid 1:80 #Torrents
tc filter add dev $INET protocol ip parent 1:0 prio 8 handle 82  fw flowid 1:80 #FTP
tc filter add dev $INET protocol ip parent 1:0 prio 9 handle 91  fw flowid 1:90 #резерв
tc filter add dev $INET protocol ip parent 1:0 prio 10 handle 101  fw flowid 1:100 #Не описанный трафик (низкоприоритетный)


# добавить цепочку MYSHAPER-OUT в таблицу mangle - сейчас мы настроим таблицу, которую будем
#                                                  использовать для фильтрации и установки fwmark
# ---------------------------------------------------------
echo "Creating tables MYSHAPER-OUT for LNET -> INET"
iptables -t mangle -N MYSHAPER-OUT
iptables -t mangle -I POSTROUTING -o $INET -j MYSHAPER-OUT

# маркируем пакеты с помощью fwmark - устанавливаем значения 10-100 в зависимости от
#                                     нужного класса. Высший приоритет - 10.
# ---------------------------------------------------------
echo "Creating rules in iptables for LNET -> INET"
iptables -t mangle -A MYSHAPER-OUT -p tcp --syn -j MARK --set-mark 11 # пакеты для открытия соединения TCP(SYN,ACK,FIN SYN)
iptables -t mangle -A MYSHAPER-OUT -p tcp -m length --length :64 -j MARK --set-mark 11 # маленькие пакеты (скорее всего ACK-пакеты)
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 53 -j MARK --set-mark 12     # распознавание имен DNS (маленькие пакеты)
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 53 -j MARK --set-mark 12     # распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-OUT -p udp --dport 53 -j MARK --set-mark 12     # распознавание имен DNS (маленькие пакеты)
#iptables -t mangle -A MYSHAPER-OUT -p udp --sport 53 -j MARK --set-mark 12     # распознавание имен DNS (маленькие пакеты)
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport ssh -j MARK --set-mark 21    # SSH
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport ssh -j MARK --set-mark 21    # SSH
#IP-телефония 31
#Teamspeaker 32
#Skype 33
iptables -t mangle -A MYSHAPER-OUT -p tcp -s 192.168.111.2 -j MARK --set-mark 41   #Metatrader 41
iptables -t mangle -A MYSHAPER-OUT -p tcp -d 192.168.111.2 -j MARK --set-mark 41   #Metatrader 41
#Games 51
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 80 -j MARK --set-mark 61 # Http
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 80 -j MARK --set-mark 61 # Http
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 8080 -j MARK --set-mark 61 # Http
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 8080 -j MARK --set-mark 61 # Http
#Почта 62
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 5190 -j MARK --set-mark 71   # ICQ
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5190 -j MARK --set-mark 71   # ICQ
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 5222 -j MARK --set-mark 72   # QIP
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 5222 -j MARK --set-mark 72 # QIP
#iptables -t mangle -A MYSHAPER-OUT -p tcp --sport 20 -j MARK --set-mark 82 # FTP-data
iptables -t mangle -A MYSHAPER-OUT -p tcp --dport 20 -j MARK --set-mark 82 # FTP-data
iptables -t mangle -A MYSHAPER-OUT -m mark --mark 0 -j MARK --set-mark 101     # смаркировать все неотмаркированые пакеты как 101 (низкий проиритет)

# Конец ограничения исходящего потока
#
####################################################


####################################################
#
# Ограничение входящего потока (ограничивает пропускную способность до RATEDN)
echo ""
echo "= Internet -> LAN =============================================="
echo ""

# установить размер очереди, соответствующий двухсекундной задержке на низкоприоритетном трафике
#ip link set dev $LNET qlen 30

# изменяем значение mtu на входящем устройстве. Понижение значения mtu уменьшит задержку, но
# и немного понизит пропускную способность из-за увеличения числа
# заголовков протоколов IP и TCP .
#ip link set dev $LNET mtu 1000

# добавить корневую дисциплину HTB на интерфейс LNET
tc qdisc add dev $LNET root handle 1: htb default 100

#описываем весь канал на интерфейсе
tc class add dev $LNET parent 1: classid 1:1 htb rate 90mbit ceil 90mbit


### описываем корневой класс который пойдёт из интеренета Download
tc class add dev $LNET parent 1:1 classid 1:2 htb rate ${RATEDN}kbit ceil ${RATEDN}kbit
# ---------------------------------------------------------


# здесь мы опишем все подклассы которые пойдут из интернета
echo "Creating class id: 10-100 for INET -> LNET"
tc class add dev $LNET parent 1:2 classid 1:10 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 1
tc class add dev $LNET parent 1:2 classid 1:20 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 2
tc class add dev $LNET parent 1:2 classid 1:30 htb rate $[RATEDN/10]kbit ceil $[RATEDN/5]kbit prio 3
tc class add dev $LNET parent 1:2 classid 1:40 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 4
tc class add dev $LNET parent 1:2 classid 1:50 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 5
tc class add dev $LNET parent 1:2 classid 1:60 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 6
tc class add dev $LNET parent 1:2 classid 1:70 htb rate $[RATEDN/10]kbit ceil $[RATEDN/10]kbit prio 7
tc class add dev $LNET parent 1:2 classid 1:80 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 8
tc class add dev $LNET parent 1:2 classid 1:90 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 9
tc class add dev $LNET parent 1:2 classid 1:100 htb rate $[RATEDN/10]kbit ceil $[RATEDN]kbit prio 10


# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
#                       SFQ обеспечит почти честное деление полосы пропускания между соединениями
#
# ---------------------------------------------------------
echo "Attach qdisc: sfq to class id: 10-100 for INET -> LNET"
tc qdisc add dev $LNET parent 1:10 handle 10 sfq perturb 5
tc qdisc add dev $LNET parent 1:20 handle 20 sfq perturb 5
tc qdisc add dev $LNET parent 1:30 handle 30 sfq perturb 5
tc qdisc add dev $LNET parent 1:40 handle 40 sfq perturb 5
tc qdisc add dev $LNET parent 1:50 handle 50 sfq perturb 5
tc qdisc add dev $LNET parent 1:60 handle 60 sfq perturb 5
tc qdisc add dev $LNET parent 1:70 handle 70 sfq perturb 5
tc qdisc add dev $LNET parent 1:80 handle 80 sfq perturb 5
tc qdisc add dev $LNET parent 1:90 handle 90 sfq perturb 5
tc qdisc add dev $LNET parent 1:100 handle 100 sfq perturb 5


# направляем трафик в классы по fwmark - мы направляем трафик в классы, в соответствии со значением
#                                        fwmark установленном на пакете (мы будем устанавливать это
#                                        значение утилитой iptables позже). Обратите внимание, что
#                                        выше мы установили класс по умолчанию 1:100, так что
#                                        немаркированные пакеты (или с неизвестными значениями fwmark
#                                        будут направлены в низкоприоритетный класс.
# ---------------------------------------------------------
echo "Creating filters for class id: 10-100 for INET -> LNET"
tc filter add dev $LNET protocol ip parent 1:0 prio 1 handle 11  fw flowid 1:10 #пакеты ASK и др
tc filter add dev $LNET protocol ip parent 1:0 prio 1 handle 12  fw flowid 1:10 #DNS ? какой протокол

tc filter add dev $LNET protocol ip parent 1:0 prio 2 handle 21  fw flowid 1:20 #SSH

tc filter add dev $LNET protocol ip parent 1:0 prio 3 handle 31  fw flowid 1:30 #IP-телефония
tc filter add dev $LNET protocol ip parent 1:0 prio 3 handle 32  fw flowid 1:30 #Timspeaker
tc filter add dev $LNET protocol ip parent 1:0 prio 3 handle 33  fw flowid 1:30 #Skype

tc filter add dev $LNET protocol ip parent 1:0 prio 4 handle 41  fw flowid 1:40 #Metatrader

tc filter add dev $LNET protocol ip parent 1:0 prio 5 handle 51  fw flowid 1:50 #Games

tc filter add dev $LNET protocol ip parent 1:0 prio 6 handle 61  fw flowid 1:60 #Http
tc filter add dev $LNET protocol ip parent 1:0 prio 6 handle 62  fw flowid 1:60 #Mail

tc filter add dev $LNET protocol ip parent 1:0 prio 7 handle 71  fw flowid 1:70 #ICQ
tc filter add dev $LNET protocol ip parent 1:0 prio 7 handle 72  fw flowid 1:70 #QIP

tc filter add dev $LNET protocol ip parent 1:0 prio 8 handle 81  fw flowid 1:80 #Torrents
tc filter add dev $LNET protocol ip parent 1:0 prio 8 handle 82  fw flowid 1:80 #FTP

tc filter add dev $LNET protocol ip parent 1:0 prio 9 handle 91  fw flowid 1:90 #резерв
tc filter add dev $LNET protocol ip parent 1:0 prio 10 handle 101  fw flowid 1:100 #Не описанный трафик (низкоприоритетный)


# добавить цепочку MYSHAPER-IN в таблицу mangle - сейчас мы настроим таблицу, которую будем
#                                                  использовать для фильтрации и установки fwmark
# ---------------------------------------------------------
echo "Creating tables MYSHAPER-IN for INET -> LNET"
iptables -t mangle -N MYSHAPER-IN
iptables -t mangle -I POSTROUTING -o $LNET -j MYSHAPER-IN

# маркируем пакеты с помощью fwmark - устанавливаем значения 10-100 в зависимости от
#                                     нужного класса. Высший приоритет - 10.
# ---------------------------------------------------------
echo "Creating rules in iptables for LNET -> INET"
iptables -t mangle -A MYSHAPER-IN -p tcp --syn -s ! 192.168.111.0/24 -j MARK --set-mark 11 # пакеты для открытия соединения TCP(SYN,ACK,FI$
iptables -t mangle -A MYSHAPER-IN -p tcp -m length --length :64 -s ! 192.168.111.0/24 -j MARK --set-mark 11 # маленькие пакеты (скорее все$
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 53 -s ! 192.168.111.0/24 -j MARK --set-mark 12     # распознавание имен DNS (маленькие па$
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport 53 -s ! 192.168.111.0/24 -j MARK --set-mark 12     # распознавание имен DNS (маленькие п$
iptables -t mangle -A MYSHAPER-IN -p udp --dport 53 -s ! 192.168.111.0/24 -j MARK --set-mark 12     # распознавание имен DNS (маленькие па$
#iptables -t mangle -A MYSHAPER-IN -p udp --sport 53 -s ! 192.168.111.0/24 -j MARK --set-mark 12     # распознавание имен DNS (маленькие п$
iptables -t mangle -A MYSHAPER-IN -p tcp --dport ssh -s ! 192.168.111.0/24 -j MARK --set-mark 21    # SSH
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport ssh -s ! 192.168.111.0/24 -j MARK --set-mark 21    # SSH
#IP-телефония 31
#Teamspeaker 32
#Skype 33
iptables -t mangle -A MYSHAPER-IN -p tcp -s 192.168.111.2 -j MARK --set-mark 41   #Metatrader 41
iptables -t mangle -A MYSHAPER-IN -p tcp -d 192.168.111.2 -j MARK --set-mark 41   #Metatrader 41
#Games 51
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport 80 -s ! 192.168.111.0/24 -j MARK --set-mark 61 # Http
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 80 -s ! 192.168.111.0/24 -j MARK --set-mark 61 # Http
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport 8080 -s ! 192.168.111.0/24 -j MARK --set-mark 61 # Http
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 8080 -s ! 192.168.111.0/24 -j MARK --set-mark 61 # Http
#Почта 62
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport 5190 -s ! 192.168.111.0/24 -j MARK --set-mark 71   # ICQ
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 5190 -s ! 192.168.111.0/24 -j MARK --set-mark 71   # ICQ
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport 5222 -s ! 192.168.111.0/24 -j MARK --set-mark 72   # QIP
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 5222 -s ! 192.168.111.0/24 -j MARK --set-mark 72 # QIP
#iptables -t mangle -A MYSHAPER-IN -p tcp --sport 20 -s ! 192.168.111.0/24 -j MARK --set-mark 82 # FTP-data
iptables -t mangle -A MYSHAPER-IN -p tcp --dport 20 -s ! 192.168.111.0/24 -j MARK --set-mark 82 # FTP-data
iptables -t mangle -A MYSHAPER-IN -m mark --mark 0 -s ! 192.168.111.0/24 -j MARK --set-mark 101     # смаркировать все неотмаркированые па$

# Конец ограничения входящего потока из интернета
#
####################################################


####################################################
#
# Описание потока локальной сети
echo ""
echo "= LAN-LAN =============================================="
echo ""

### описываем класс который будет гулять у нас в локальной сети
tc class add dev $LNET parent 1:1 classid 1:110 htb rate 80mbit ceil 80mbit
# ---------------------------------------------------------
# здесь мы опишем все подклассы которые будут гулять в локальной сети
echo "Creating class id: 110 for LAN <-> LAN"
tc class add dev $LNET parent 1:110 classid 1:1100 htb rate 80mbit ceil 80mbit # (надо проверить)

# здесь мы опишем все фильтры для подклассов которые будут гулять в локальной сети
# ---------------------------------------------------------
echo "Creating filters for class id: 1100 for LAN - LAN"
tc filter add dev $LNET protocol ip parent 1:0 prio 8 handle 111  fw flowid 1:1100 #

# добавить цепочку MYSHAPER-LOCAL в таблицу mangle - сейчас мы настроим таблицу, которую будем
#                                                  использовать для фильтрации и установки fwmark
# ---------------------------------------------------------
echo "Creating tables MYSHAPER-LOCAL for LAN - LAN"
iptables -t mangle -N MYSHAPER-LOCAL
iptables -t mangle -I POSTROUTING -o $LNET -j MYSHAPER-LOCAL

# маркируем пакеты с помощью fwmark - устанавливаем значения 111
#
# ---------------------------------------------------------
echo "Creating rules in iptables for LAN - LAN"
iptables -t mangle -A MYSHAPER-LOCAL -s 192.168.111.0/24 -d 192.168.111.0/24 -j MARK --set-mark 111 #

# Конец описание потока локальной сети
#
####################################################


####################################################
#
#Выводим информацию о том, что получилось

echo ""
echo "Show qdisc"
echo "-----------------------------------------------------------------------"
tc -s -d qdisc show dev eth0
tc -s -d qdisc show dev eth1

echo ""
echo "Show class"
echo "-----------------------------------------------------------------------"
tc -s -d class show dev eth0
tc -s -d class show dev eth1

echo ""
echo "Show filter"
echo "-----------------------------------------------------------------------"
tc -s filter show dev eth0
tc -s filter show dev eth1

echo ""
echo "Show table MYSHAPER-OUT"
echo "-----------------------------------------------------------------------"
iptables -t mangle -L MYSHAPER-OUT

echo ""
echo "Show table MYSHAPER-IN"
echo "-----------------------------------------------------------------------"
iptables -t mangle -L MYSHAPER-IN

echo ""
echo "Show table MYSHAPER-LOCAL"
echo "-----------------------------------------------------------------------"
iptables -t mangle -L MYSHAPER-LOCAL

# конец файла
#EOF

Подскажите пожалуйста.
Спасибо сказали: