В конце данного поста размещён полный текст скрипта который я использую. А пока опишу кусочками
Пытаюсь настроить шейпер для деления интернета. Выходящий поток (идёт в интернет), который висит на внешнем интерфейсе 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Подскажите пожалуйста.