Wed, Jul 06, 2005 at 09:56:29AM +0800, sem написал:
Юра wrote:
Ю> какой п-мой можно задать приоритеты портам ТСП и п-мам , юзающим
сетевой
Ю> интерфейс (ppp) ?
Ю> напр. обозреватель - главный , почта - второй , закачки - третий .
Ю> а также допустимую широту канала(скорость) для каждого процесса ?
tc. http://lartc.org
Если кому интересно - могу рассказать как сделал. Но только для программ
, для
процессов пока нестал делать .
Если не сложно расскажи :)
А реализация для процессов будет иметь принципиальные отличия?
Спасибо.
++++++++++++++++++++++++
TRAFFIC CONTROL
pacets : iproute , iptables
docs : man iptables ,lartc - Linux Advanced Routing & Traffic Control HOWTO
(есть на русском)
Прим.
1)модуль owner работает только в цепочке OUTPUT (man iptables)
2)Чтобы иметь возможность маркировать пакеты, вы должны собрать
ядро с рядом включенных опций:
IP: advanced router (CONFIG IP ADVANCED ROUTER) [Y/n/?]
IP: policy routing (CONFIG IP MULTIPLE TABLES) [Y/n/?]
IP: use netfilter MARK value as routing key (CONFIG IP ROUTE
FWMARK) [Y/n/?]
(lartc).
см. /boot/config-2.4.27-...(напр.)
У этого ядра они включены .
этот скрипт можно поместить в /etc/ppp/ip-up.d
*****************************************************************
#!/bin/zsh
#opera-главный приоритет , elinks - второй , wget - последний
#назначение любых меток TCP пакетам по отправившей их программе
iptables -A OUTPUT -t mangle -m owner --cmd-owner opera -j MARK --set-mark 2
iptables -A OUTPUT -t mangle -m owner --cmd-owner elinks -j MARK --set-mark 5
iptables -A OUTPUT -t mangle -m owner --cmd-owner wget -j MARK --set-mark 8
#создаем корневую дисциплину prio с дескриптором 1 и 4-мя(например)
классами(полосами)
#принцип действия :
#пакеты беруться сначала из первой полосы , потом из второй и т.п.
#пока есть пакеты в первой полосе , пакеты из второй не берутся .
tc qdisc add dev ppp0 root handle 1: prio bands 4 priomap
#каждой полосе - по безклассовой дисциплине sfq (следит равным
#использованием процессами канала). Вроде как можно и без этого - но так удобнее
#просматривать куда идет траффик .
tc qdisc add dev ppp0 parent 1:1 handle 10: sfq
tc qdisc add dev ppp0 parent 1:2 handle 20: sfq
tc qdisc add dev ppp0 parent 1:3 handle 30: sfq
tc qdisc add dev ppp0 parent 1:4 handle 40: sfq
###################################################
#назначение фильтров
#parent 1: -корневая дисциплина
#handle 2 - метки пакетов
#flowid 1:1 - класс назначения
#prio -приоритет фильтра , порядок их обработки , от меньшего к большему
#траффик от wget - в полосу с низким приоритетом
tc filter add dev ppp0 protocol ip parent 1: prio 1 handle 2 fw flowid 1:1
tc filter add dev ppp0 protocol ip parent 1: prio 2 handle 5 fw flowid 1:2
tc filter add dev ppp0 protocol ip parent 1: prio 3 handle 8 fw flowid 1:4
#остальной неклассифицированный трафик - в среднюю полосу- неполучается
#tc filter add dev ppp0 protocol ip parent 1: prio 4 fw
#tc filter add dev ppp0 protocol ip parent 1: prio 4 flowid 1:3
#eof
***************************************************************************
Подключаюсь к тестовому вохду провайдера , закачиваю его сайт сначала через
wget ,
потом захожу через elinks , потом черезх оперу .
просмотр командой
# tc -s qdisc ls dev ppp0
(у меня это скрипт ./l)
после wget
inf 12:45# ./l
qdisc sfq 40: limit 128p quantum 1000b
Sent 1647 bytes 32 pkts (dropped 0, overlimits 0)
qdisc sfq 30: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 20: limit 128p quantum 1000b
Sent 239 bytes 5 pkts (dropped 0, overlimits 0)
qdisc sfq 10: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc prio 1: bands 4 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 1886 bytes 37 pkts (dropped 0, overlimits 0)
Весь траффик идет через 4-ю , самую низкоприоритетную полосу .
какой-то(системный что ли) траффик проходит через вторую полосу .Ничего не смог
придумать - как
направить остальной траффик , точнее пробовал - неработает .
пробовал так, как написано в lartc :
inf 1:30# tc filter add dev ppp0 protocol ip parent 1: prio 4 flowid 1:3
tc filter add dev ppp0 protocol ip parent 1: prio 4 flowid 1:3
Unknown filter "flowid", hence option "1:3" is unparsable
inf 3:47#
--------------------------
после elinks
inf 12:45# ./l
qdisc sfq 40: limit 128p quantum 1000b
Sent 1647 bytes 32 pkts (dropped 0, overlimits 0)
qdisc sfq 30: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 20: limit 128p quantum 1000b
Sent 3378 bytes 55 pkts (dropped 0, overlimits 0)
qdisc sfq 10: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc prio 1: bands 4 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 5025 bytes 87 pkts (dropped 0, overlimits 0)
Прошел через вторую полосу .
----------------------------
после opera
inf 12:46# ./l
qdisc sfq 40: limit 128p quantum 1000b
Sent 1647 bytes 32 pkts (dropped 0, overlimits 0)
qdisc sfq 30: limit 128p quantum 1000b
Sent 0 bytes 0 pkts (dropped 0, overlimits 0)
qdisc sfq 20: limit 128p quantum 1000b
Sent 4678 bytes 84 pkts (dropped 0, overlimits 0)
qdisc sfq 10: limit 128p quantum 1000b
Sent 16558 bytes 137 pkts (dropped 0, overlimits 0)
qdisc prio 1: bands 4 priomap 1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
Sent 22883 bytes 253 pkts (dropped 0, overlimits 0)
inf 12:46#
траффик прошел через первую полосу .Все как надо .
----------------------------------
--
With best regards , Yura .
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]