LinuxForum.Fans
Тема

Управление трафиком

Автор: White 7 сообщений 3416 просмотров
#85764

Есть шлюз с 2-мя интерфейсами, eth1 - локалка и ppp0 - Internet.
На ppp0 прикручен шейпер:
RATEUP=340
# добавить корневую дисциплину HTB
tc qdisc add dev ppp0 root handle 1: htb default 40
# добавить общее ограничение скорости по классу
tc class add dev ppp0 parent 1: classid 1:1 htb rate ${RATEUP}kbit
# добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
# Этим способом мы избегаем возможности "голодания" классов. Каждому классу
# разрешается занимать всю полосу пропускания, если другие классы не
# используются.
tc class add dev ppp0 parent 1:1 classid 1:10 htb rate $[$RATEUP/3]kbit ceil ${RATEUP}kbit prio 0
tc class add dev ppp0 parent 1:1 classid 1:20 htb rate $[$RATEUP/15]kbit ceil 100kbit prio 1
tc class add dev ppp0 parent 1:1 classid 1:30 htb rate $[$RATEUP/35]kbit ceil 100kbit prio 2
tc class add dev ppp0 parent 1:1 classid 1:40 htb rate $[$RATEUP/200]kbit ceil 100kbit prio 3
# подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
# SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
# внутри каждого класса.
tc qdisc add dev ppp0 parent 1:10 handle 10: sfq perturb 10
tc qdisc add dev ppp0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ppp0 parent 1:30 handle 30: sfq perturb 10
# направляем трафик в классы по fwmark
tc filter add dev ppp0 parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10
tc filter add dev ppp0 parent 1:0 prio 0 protocol ip handle 20 fw flowid 1:20
tc filter add dev ppp0 parent 1:0 prio 0 protocol ip handle 30 fw flowid 1:30
#online игры попадают в высокоприорететный класс
#WarCraft
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 3724,1119,4000,6111,6112,6113,6114 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 3724,1119,4000,6111,6112,6113,6114 -j RETURN
iptables -t mangle -A POSTROUTING -p udp -m multiport --destination-port 3724 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p udp -m multiport --destination-port 3724 -j RETURN
#Линейка
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 7777,2106,17453 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 7777,2106,1745 -j RETURN
#iptables -t mangle -A POSTROUTING -p udp -m multiport --destination-port .,.,. -j MARK --set-mark 10
#iptables -t mangle -A POSTROUTING -p udp -m multiport --destination-port .,.,. -j RETURN
#Контра
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 27000:27050 -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 27000:27050 -j RETURN
#для ping
iptables -t mangle -A POSTROUTING -p icmp -j MARK --set-mark 10
iptables -t mangle -A POSTROUTING -p icmp -j RETURN
#для пакетов, с которых начинается TCP-соединение, т.е. SYN-пакетов
iptables -t mangle -I POSTROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 20
iptables -t mangle -I POSTROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
#для www
iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j MARK --set-mark 30
iptables -t mangle -A POSTROUTING -p tcp --dport 80 -j RETURN

По идее при полной загрузке канала на ping и всё что попадает в класс 1:10 эта загрузка ни как влиять не должна.
Но ping увеличивается и с игрушек выкидывает. Хотя трафик, вроде,разруливается по классам Что я сделал не так??? Помогите разобраться!!!!!

P.S. Сильно не наезжайте я в Linux новичок!!!!!

#86042

Я сам новичок но у тебя не что не попадает в классы потомуч-то mark ставишь на выходе а надо в prerouting.
Вроде так.

#86249
Kettler написал:
Я сам новичок но у тебя не что не попадает в классы потомуч-то mark ставишь на выходе а надо в prerouting.
Вроде так.

А разница какая?? порт назначения остаётся тот же, что в PREROUTING, что в POSTROUTBNG (изнутри наружу, даже если стоит NAT). Эт если с наружи лезишь во внутрь и NAT стоит, тогда маркировать надо в POSTROUNING. Эт я так понимаю. Хотя я могу очень даже неправильно понимать.

Пакеты то по классам разруливаются!!!!!! Так что попадают!!!

#86281

Тут посмотри прохождения пакетов! http://ru.wikipedia.org/wiki/Iptables
У тя на выходе маркируются пакеты и не попадаю под локальные процессы filter
Как же у тебя фильтруются пакеты если ты маркируешь на выходе?
Короче man iptables.

#86283

Вот из LARTC пример

По метке пакета
Пакеты могут маркироваться либо средствами ipchains, либо средствами iptables. Это бывает полезно, например, для наложения ограничений на трафик, который следует с интерфейса eth1 на интерфейс eth0:

# tc filter add dev eth1 protocol ip parent 1:0 prio 1 handle 6 fw flowid 1:1

Обратите внимание -- этот фильтр не является селектором u32!
Установить метку можно следующим образом:

# iptables -A PREROUTING -t mangle -i eth0 -j MARK --set-mark 6

В данном случае число 6 выбрано произвольным образом.
Если вы не хотите с головой погружаться в синтаксис tc, тогда просто пользуйтесь возможностями iptables и запомните принцип отбора по метке.

#86304
Kettler написал:
Тут посмотри прохождения пакетов! http://ru.wikipedia.org/wiki/Iptables
У тя на выходе маркируются пакеты и не попадаю под локальные процессы filter
Как же у тебя фильтруются пакеты если ты маркируешь на выходе?
Короче man iptables.

А причём здесь iptables????
Он нужен, только для того, чтобы метку поставить, а не фильтровать. Или я чего-то не допонимаю.
Ради эксперимента побывал менять POSTROUTING на PREROUTING, пакеты по классам разруливаются одинаково.

#86310

Смотри фильтр выполняется локально значиться метку надо ставить в PREROUTING если делать в POSTROUTING тогда фильтр не видит твои метки потомуч-то лепишь их на выходе.
Прохождение пакета посмотри как правильно в iptables. Скрипт выполняется при поднятии ppp0?

Смотри ты пакеты гоняешь ток лишний раз, тебе это на фиг не надо если бушь ставить метки в PREROUTING.
iptables -t mangle -A POSTROUTING -p tcp -m multiport --destination-port 7777,2106,1745 -j RETURN

Войдите или зарегистрируйтесь, чтобы ответить.