Jump to content
Калькуляторы

TBF + iptables -j MARK

Такой вопрос:

Ведь TBF "безклассовая"... но точная и простая.

Можно ли заставить TBF шейпить только то, что хочется с помощь iptables -j MARK ?

Нашел в сети пример:

tc qdisc add dev eth0 root handle 1: prio

tc qdisc add dev eth0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000

tc qdisc add dev eth0 parent 1:2 handle 20: tbf rate 80kbit buffer 1600 limit 3000

tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.100.3/24 flowid 1:1

 

Но не уверен. и не совсем понимаю как оно работает.

Edited by Ivan Rostovikov

Share this post


Link to post
Share on other sites

Вы так говорите, как будто HTB не подходит для шейпинга и не является совокупностью тех же token bucket. Кроме того, пример некорректен. Во-первых, к prio нельзя присоединять краевые дисциплины. TBF можно повесить только на parent queue. Во-вторых, u32 не использует для классификации метки iptables и в данном случае засаживает весь трафик в parent queue, т.е. никакого per user шейпинга не будет.

Edited by photon

Share this post


Link to post
Share on other sites

те как-это нельзя вешать дисциплины ? prio такой же classful как и htb

Share this post


Link to post
Share on other sites

Ну... да этот:

>tc filter add dev eth0 parent 1: protocol ip prio 1 u32 match ip src 192.168.100.3/24 flowid 1:1

пример с фильтром не совсем корректен. Тут нет марков.

Суть - не в нем дело, а в том можно ли как таковые TC фильтры (по марку например) применять для TBF.

Почему TBF ? - он меньше грузит процессор и точнее. Т.к. нет проблем с квантум при сильном разбросе скоростей.

 

Share this post


Link to post
Share on other sites

Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное.

Share this post


Link to post
Share on other sites
Суть - не в нем дело, а в том можно ли как таковые TC фильтры (по марку например) применять для TBF.

Почему TBF ? - он меньше грузит процессор и точнее. Т.к. нет проблем с квантум при сильном разбросе скоростей.

Проблемы с quantum решаются установкой quantum 1500 для всех классов и скоростей. Для классификации лучше вместо marks использовать flow filter: tc filter add dev eth0 flow map key src addend -192.168.0.0 divisor 256
Edited by photon

Share this post


Link to post
Share on other sites

Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное.

Классовая то она классовая, да вот только разблюдовка по классам в ней осуществляется по TOS полю и никак иначе.

Share this post


Link to post
Share on other sites
Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное.
Классовая то она классовая, да вот только разблюдовка по классам в ней осуществляется по TOS полю и никак иначе.

WTF?

 

priomap

"If you do not provide tc filters to classify traffic", the PRIO qdisc looks at the TC_PRIO

priority to decide how to enqueue traffic. The kernel assigns each packet a TC_PRIO priority,

based on TOS flags or socket options passed by the application.

The TC_PRIO is decided based on the TOS

Share this post


Link to post
Share on other sites

Но я все равно не вижу причин устраивать в Linux некий аналог dummynet при наличии классовой дисциплины HTB. Хотя сравнить эти конфигурации под нагрузкой было бы интересно.

Edited by photon

Share this post


Link to post
Share on other sites
Действительно классовая, но не думаю, что она даст какой-то выигрыш по сравнению с htb. Правило с tc filter, тем не менее, неправильное.
Классовая то она классовая, да вот только разблюдовка по классам в ней осуществляется по TOS полю и никак иначе.

WTF?

 

priomap

"If you do not provide tc filters to classify traffic", the PRIO qdisc looks at the TC_PRIO

priority to decide how to enqueue traffic. The kernel assigns each packet a TC_PRIO priority,

based on TOS flags or socket options passed by the application.

The TC_PRIO is decided based on the TOS

Да, проглядел, фильтры можно использовать. Вот только в исходном примере нескладно получится - из сетки 192.168.100.3/24 оно пойдет в первый класс, а все остальное будет раскидано в соответствии с TOS, в т.ч. туда же в первый класс.

Share this post


Link to post
Share on other sites

Боюсь меня не совсем верно поняли, и пример был неудачный.

А суть такова: Ведь TBF работает на весь интерфейс сразу. А мне нужно пропускать через нее только маркированый трафик.

Вот я и спрашиваю можно ли повесить TBF на единственый листок prio ? Лиш для того, что бы использовать фильтр по маркеру...

 

tc qdisc add dev ppp0 root handle 1: prio bands 1 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

tc qdisc add dev ppp0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000

tc filter add dev ppp0 parent 1: protocol ip prio 1 handle 1 fw classid 1:1

 

iptables -t mangle -A FORWARD -s 10.0.0.0/8 -j MARK --set-mark 1

Edited by Ivan Rostovikov

Share this post


Link to post
Share on other sites

ну, как минимум нужно две очереди, иначе куда прикажете деваться трафику который не с меткой 1?

нужно пробовать, что-то вроде такого:

 

tc qdisc add dev ppp0 root handle 1: prio bands 2 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

tc qdisc add dev ppp0 parent 1:1 handle 10: tbf rate 40kbit buffer 1600 limit 3000

tc qdisc add dev ppp0 parent 1:2 handle 11: bfifo

tc filter add dev ppp0 parent 1: protocol ip prio 1 handle 1 fw classid 1:1

tc filter add dev ppp0 parent 1: protocol ip u32 match u32 0 0 classid 1:2

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this