Jump to content

Recommended Posts

Posted

Здравствуйте, имеем Linux сервер с NAT, HTB shaping (упрощенная схема во вложении). До недавнего времени на lan интерфейсе все висели в /24 сети и задача динамического шейпинга была банально проста:

 

...
dev="lan"
CLIENTS=N
MAX=10mbit
AVERAGE=`expr ${MAX} / ${CLIENTS}`

tc qdisc add dev ${dev} root handle 2 htb default 1
tc class add dev ${dev} parent 2: classid 2:5 htb rate ${MAX}kbit prio 3

#1 User 192.168.1.2
tc class add dev ${dev} parent 2:5 classid 2:50 htb rate ${AVERAGE}kbit ceil ${MAX}kbit
tc qdisc add dev ${dev} parent 2:50 sfq
tc filter add dev ${dev} parent 2: protocol ip pref 4 u32 match ip dst 192.168.1.2 classid 2:50
...

 

Но правильнее всех распихать по vlan-ам, и изолировать друг от друга - поставил L2 свитчи, на сервере поднял vlan's. Но дело в том, что tc вешает root на каждый интерфейс, и получается, чтобы разделить например 10Мбит/с на 10 vlan - то надо по 1Мбит/с вешать, иначе 1-ин занимает всю 10ку - остальные курят. А необходимо делить динамически поровну. Это понятно, что надо поставить просто L3 за сервером, терминировать vlan там, дефолт гнать на сервер, но реально пока нет возможности.

 

Может есть у кого идеи или варианты как реализовать задачу динамического деления всей полосы между несколькими vlan в tc?? Спасибо за внимание!

post-87545-043713500 1320414088_thumb.jpg

Posted

Здравствуйте, имеем Linux сервер с NAT, HTB shaping (упрощенная схема во вложении). До недавнего времени на lan интерфейсе все висели в /24 сети и задача динамического шейпинга была банально проста:

 

...
dev="lan"
CLIENTS=N
MAX=10mbit
AVERAGE=`expr ${MAX} / ${CLIENTS}`

tc qdisc add dev ${dev} root handle 2 htb default 1
tc class add dev ${dev} parent 2: classid 2:5 htb rate ${MAX}kbit prio 3

#1 User 192.168.1.2
tc class add dev ${dev} parent 2:5 classid 2:50 htb rate ${AVERAGE}kbit ceil ${MAX}kbit
tc qdisc add dev ${dev} parent 2:50 sfq
tc filter add dev ${dev} parent 2: protocol ip pref 4 u32 match ip dst 192.168.1.2 classid 2:50
...

 

Но правильнее всех распихать по vlan-ам, и изолировать друг от друга - поставил L2 свитчи, на сервере поднял vlan's. Но дело в том, что tc вешает root на каждый интерфейс, и получается, чтобы разделить например 10Мбит/с на 10 vlan - то надо по 1Мбит/с вешать, иначе 1-ин занимает всю 10ку - остальные курят. А необходимо делить динамически поровну. Это понятно, что надо поставить просто L3 за сервером, терминировать vlan там, дефолт гнать на сервер, но реально пока нет возможности.

 

Может есть у кого идеи или варианты как реализовать задачу динамического деления всей полосы между несколькими vlan в tc?? Спасибо за внимание!

 

у линукса есть одна замечательная штука.

А именно. Если все вланы подняты на одном интерфейсе. Скажем eth0. То достаточно повесить root htb и его потомков на eth0 и фильтрами или iptables-ом загонять траффик в нужные классы. и он будет туда попадать и нормально шейпиться !

Posted

у линукса есть одна замечательная штука.

А именно. Если все вланы подняты на одном интерфейсе. Скажем eth0. То достаточно повесить root htb и его потомков на eth0 и фильтрами или iptables-ом загонять траффик в нужные классы. и он будет туда попадать и нормально шейпиться !

 

Хм, дык пробовал, вешал на lan root и резал в 1Мбит, ничего не изменилось. Правда классы с других интерфейсов не снимал - ща попробуем, спасибо

Posted

Как вариант (плюс так изящнее), можете шейпить не на сервере, терминирующем 1Q, а на соседнем роутере, там у Вас будет один интерфейс, на который Вы сможете повешать htb.

Posted

у линукса есть одна замечательная штука.

А именно. Если все вланы подняты на одном интерфейсе. Скажем eth0. То достаточно повесить root htb и его потомков на eth0 и фильтрами или iptables-ом загонять траффик в нужные классы. и он будет туда попадать и нормально шейпиться !

 

Хм, дык пробовал, вешал на lan root и резал в 1Мбит, ничего не изменилось. Правда классы с других интерфейсов не снимал - ща попробуем, спасибо

 

У меня так работает. Ядро 2.6.35.14.

Трафик заворачивается в классы через iptables.

Posted

У меня так работает. Ядро 2.6.35.14.

Трафик заворачивается в классы через iptables.

 

Понял, я не заворачиваю, и смотрю что на lan все в default льется. Хотя, если даже все льется в дефаулт, то по идее, достаточно этот класс настроить на деление dst per /32 ??

Posted

У меня так работает. Ядро 2.6.35.14.

Трафик заворачивается в классы через iptables.

 

Понял, я не заворачиваю, и смотрю что на lan все в default льется. Хотя, если даже все льется в дефаулт, то по идее, достаточно этот класс настроить на деление dst per /32 ??

 

filter ставится на eth0

например так:

tc filter add dev eth0 protocol ip parent 1: prio 6 u32 match ip dst 1.2.3.0/20 flowid 1:253

И тоже все попадает в нужный класс. Хотя 1.2.3.0/20 живет в eth0.1234 влане.

Posted

Загоняйте нужный трафик на IFB и шейпьте. Наиболее дешевый по времязатратам вариант. По ресурсам CPU тоже крайне неплох.

Posted

Клева ... Добавил в /etc/modules ifb, сделал init 6 - и сервак больше не доступен. Впереди веселые выходные ...

(up) Итак продолжим, чего-то там завис на loading kernel ...

Posted

Загоняйте нужный трафик на IFB и шейпьте. Наиболее дешевый по времязатратам вариант. По ресурсам CPU тоже крайне неплох.

 

Вот нашел кучу примеров, по типу

 

/sbin/tc filter add dev eth0 parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

 

Как я понял - используется для шейпинга исходящего от абонентов траффа, и видимо надо так прописывать для каждого vlan'a в моем случае. Вот что-то не догоню, а как перенаправить трафф К абонентам на ifb??

 

Как я понял - используется для шейпинга исходящего от абонентов траффа, и видимо надо так прописывать для каждого vlan'a в моем случае. Вот что-то не догоню, а как перенаправить трафф К абонентам на ifb??

 

О, может что-то вроде повесить:

 

#tc qdisc add dev wan ingress
#tc filter add dev wan parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

 

О, может что-то вроде повесить:

 

#tc qdisc add dev wan ingress
#tc filter add dev wan parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0

 

Не, не катит - по tcpdump внутренних адресов на ifb0 не бегает - nat...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.