Перейти к содержимому
Калькуляторы

sc: скрипт для управления Linux-шейпером

Дополнение: все-таки удалось запустить, сделал небольшой патч, реализующий первый предложенный мной вариант:

Спасибо. Я скорее всего включу эту возможность в следующих версиях в виде опции к командам редактирования правил.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сейчас правила строятся по схеме shaping+shaping. Стоит ли также реализовать схемы shaping+policing и policing+policing? Юзабелен ли policing на небольших скоростях около 1--5 Mbit? По идее, польза от policing начинается только при больших пакетрейтах и скоростях.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никто не пытался создать рабочий патч flow для ядра RHEL/CentOS 5 ?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никто не пытался создать рабочий патч flow для ядра RHEL/CentOS 5 ?

Не вижу препятствий сделать его самому, используя исходники ванильного ядра. Код управления трафиком в ядре меняется довольно вяло, поэтому проблем быть не должно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Никто не пытался создать рабочий патч flow для ядра RHEL/CentOS 5 ?
Не вижу препятствий сделать его самому, используя исходники ванильного ядра. Код управления трафиком в ядре меняется довольно вяло, поэтому проблем быть не должно.

честно применил патчик

получаю ругань

 

net/sched/cls_flow.c:173: error: 'const struct sk_buff' has no member named 'iif'
net/sched/cls_flow.c: In function 'flow_get_mark':
net/sched/cls_flow.c:183: error: 'const struct sk_buff' has no member named 'mark'
net/sched/cls_flow.c: At top level:
net/sched/cls_flow.c:206: error: expected identifier or '(' before '{' token
net/sched/cls_flow.c: In function 'flow_get_nfct_dst':
net/sched/cls_flow.c:228: error: expected expression before ')' token
net/sched/cls_flow.c:228: error: expected expression before ')' token
net/sched/cls_flow.c:228: error: expected expression before ')' token
net/sched/cls_flow.c:228: error: expected expression before ')' token
net/sched/cls_flow.c:228: error: expected expression before ')' token
net/sched/cls_flow.c:230: error: expected expression before ')' token
net/sched/cls_flow.c:230: error: expected expression before ')' token
net/sched/cls_flow.c:230: error: expected expression before ')' token
net/sched/cls_flow.c:230: error: expected expression before ')' token
net/sched/cls_flow.c:230: error: expected expression before ')' token
net/sched/cls_flow.c:232: warning: label 'fallback' defined but not used
net/sched/cls_flow.c: In function 'flow_get_nfct_proto_src':
net/sched/cls_flow.c:238: error: expected expression before ')' token
net/sched/cls_flow.c:238: error: expected expression before ')' token
net/sched/cls_flow.c:238: error: expected expression before ')' token
net/sched/cls_flow.c:239: warning: label 'fallback' defined but not used
net/sched/cls_flow.c: In function 'flow_get_nfct_proto_dst':
net/sched/cls_flow.c:245: error: expected expression before ')' token
net/sched/cls_flow.c:245: error: expected expression before ')' token
net/sched/cls_flow.c:245: error: expected expression before ')' token
net/sched/cls_flow.c:246: warning: label 'fallback' defined but not used
net/sched/cls_flow.c: In function 'flow_key_get':
net/sched/cls_flow.c:295: error: implicit declaration of function 'flow_get_nfct_src'
net/sched/cls_flow.c: At top level:
net/sched/cls_flow.c:360: error: array type has incomplete element type
net/sched/cls_flow.c:361: error: array index in non-array initializer
net/sched/cls_flow.c:361: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:361: error: field name not in record or union initializer
net/sched/cls_flow.c:361: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:361: error: 'NLA_U32' undeclared here (not in a function)
net/sched/cls_flow.c:362: error: array index in non-array initializer
net/sched/cls_flow.c:362: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:362: error: field name not in record or union initializer
net/sched/cls_flow.c:362: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:363: error: array index in non-array initializer
net/sched/cls_flow.c:363: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:363: error: field name not in record or union initializer
net/sched/cls_flow.c:363: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:364: error: array index in non-array initializer
net/sched/cls_flow.c:364: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:364: error: field name not in record or union initializer
net/sched/cls_flow.c:364: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:365: error: array index in non-array initializer
net/sched/cls_flow.c:365: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:365: error: field name not in record or union initializer
net/sched/cls_flow.c:365: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:366: error: array index in non-array initializer
net/sched/cls_flow.c:366: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:366: error: field name not in record or union initializer
net/sched/cls_flow.c:366: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:367: error: array index in non-array initializer
net/sched/cls_flow.c:367: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:367: error: field name not in record or union initializer
net/sched/cls_flow.c:367: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:368: error: array index in non-array initializer
net/sched/cls_flow.c:368: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:368: error: field name not in record or union initializer
net/sched/cls_flow.c:368: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:369: error: array index in non-array initializer
net/sched/cls_flow.c:369: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:369: error: field name not in record or union initializer
net/sched/cls_flow.c:369: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:369: error: 'NLA_NESTED' undeclared here (not in a function)
net/sched/cls_flow.c:370: error: array index in non-array initializer
net/sched/cls_flow.c:370: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:370: error: field name not in record or union initializer
net/sched/cls_flow.c:370: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:371: error: array index in non-array initializer
net/sched/cls_flow.c:371: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:371: error: field name not in record or union initializer
net/sched/cls_flow.c:371: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c: In function 'flow_change':
net/sched/cls_flow.c:393: error: implicit declaration of function 'nla_parse_nested'
net/sched/cls_flow.c:398: error: implicit declaration of function 'nla_get_u32'
net/sched/cls_flow.c:413: warning: passing argument 2 of 'tcf_exts_validate' from incompatible pointer type
net/sched/cls_flow.c:413: warning: passing argument 3 of 'tcf_exts_validate' from incompatible pointer type
net/sched/cls_flow.c:413: warning: passing argument 5 of 'tcf_exts_validate' discards qualifiers from pointer target type
net/sched/cls_flow.c:417: warning: passing argument 2 of 'tcf_em_tree_validate' from incompatible pointer type
net/sched/cls_flow.c: In function 'flow_dump':
net/sched/cls_flow.c:574: error: implicit declaration of function 'nla_nest_start'
net/sched/cls_flow.c:574: warning: assignment makes pointer from integer without a cast
net/sched/cls_flow.c:578: error: implicit declaration of function 'NLA_PUT_U32'
net/sched/cls_flow.c:595: warning: passing argument 3 of 'tcf_exts_dump' discards qualifiers from pointer target type
net/sched/cls_flow.c:602: error: implicit declaration of function 'nla_nest_end'
net/sched/cls_flow.c:604: warning: passing argument 3 of 'tcf_exts_dump_stats' discards qualifiers from pointer target type
net/sched/cls_flow.c:610: error: implicit declaration of function 'nlmsg_trim'
net/sched/cls_flow.c: At top level:
net/sched/cls_flow.c:635: warning: initialization from incompatible pointer type
make[2]: *** [net/sched/cls_flow.o] Error 1
make[1]: *** [net/sched] Error 2
make: *** [net] Error 2

 

Попробовал взять cls_flow.c из свежего ядра получаю

net/sched/cls_flow.c: In function 'flow_get_dst':
net/sched/cls_flow.c:87: error: implicit declaration of function 'skb_dst'
net/sched/cls_flow.c:87: warning: passing argument 1 of 'addr_fold' makes pointer from integer without a cast
net/sched/cls_flow.c: In function 'has_ports':
net/sched/cls_flow.c:108: error: 'IPPROTO_UDPLITE' undeclared (first use in this function)
net/sched/cls_flow.c:108: error: (Each undeclared identifier is reported only once
net/sched/cls_flow.c:108: error: for each function it appears in.)
net/sched/cls_flow.c: In function 'flow_get_proto_dst':
net/sched/cls_flow.c:166: warning: passing argument 1 of 'addr_fold' makes pointer from integer without a cast
net/sched/cls_flow.c: In function 'flow_get_iif':
net/sched/cls_flow.c:174: error: 'const struct sk_buff' has no member named 'skb_iif'
net/sched/cls_flow.c: In function 'flow_get_mark':
net/sched/cls_flow.c:184: error: 'const struct sk_buff' has no member named 'mark'
net/sched/cls_flow.c: In function 'flow_get_rtclassid':
net/sched/cls_flow.c:255: error: invalid type argument of '->'
net/sched/cls_flow.c: In function 'flow_get_skuid':
net/sched/cls_flow.c:263: error: 'struct file' has no member named 'f_cred'
net/sched/cls_flow.c: In function 'flow_get_skgid':
net/sched/cls_flow.c:270: error: 'struct file' has no member named 'f_cred'
net/sched/cls_flow.c: In function 'flow_get_vlan_tag':
net/sched/cls_flow.c:278: warning: passing argument 1 of 'vlan_get_tag' discards qualifiers from pointer target type
net/sched/cls_flow.c: In function 'flow_key_get':
net/sched/cls_flow.c:318: error: 'FLOW_KEY_VLAN_TAG' undeclared (first use in this function)
net/sched/cls_flow.c: At top level:
net/sched/cls_flow.c:381: error: array type has incomplete element type
net/sched/cls_flow.c:382: error: array index in non-array initializer
net/sched/cls_flow.c:382: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:382: error: field name not in record or union initializer
net/sched/cls_flow.c:382: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:382: error: 'NLA_U32' undeclared here (not in a function)
net/sched/cls_flow.c:383: error: array index in non-array initializer
net/sched/cls_flow.c:383: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:383: error: field name not in record or union initializer
net/sched/cls_flow.c:383: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:384: error: array index in non-array initializer
net/sched/cls_flow.c:384: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:384: error: field name not in record or union initializer
net/sched/cls_flow.c:384: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:385: error: array index in non-array initializer
net/sched/cls_flow.c:385: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:385: error: field name not in record or union initializer
net/sched/cls_flow.c:385: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:386: error: array index in non-array initializer
net/sched/cls_flow.c:386: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:386: error: field name not in record or union initializer
net/sched/cls_flow.c:386: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:387: error: array index in non-array initializer
net/sched/cls_flow.c:387: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:387: error: field name not in record or union initializer
net/sched/cls_flow.c:387: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:388: error: array index in non-array initializer
net/sched/cls_flow.c:388: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:388: error: field name not in record or union initializer
net/sched/cls_flow.c:388: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:389: error: array index in non-array initializer
net/sched/cls_flow.c:389: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:389: error: field name not in record or union initializer
net/sched/cls_flow.c:389: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:390: error: array index in non-array initializer
net/sched/cls_flow.c:390: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:390: error: field name not in record or union initializer
net/sched/cls_flow.c:390: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:390: error: 'NLA_NESTED' undeclared here (not in a function)
net/sched/cls_flow.c:391: error: array index in non-array initializer
net/sched/cls_flow.c:391: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:391: error: field name not in record or union initializer
net/sched/cls_flow.c:391: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:392: error: array index in non-array initializer
net/sched/cls_flow.c:392: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:392: error: field name not in record or union initializer
net/sched/cls_flow.c:392: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:393: error: 'TCA_FLOW_PERTURB' undeclared here (not in a function)
net/sched/cls_flow.c:393: error: array index in initializer not of integer type
net/sched/cls_flow.c:393: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c:393: error: field name not in record or union initializer
net/sched/cls_flow.c:393: error: (near initialization for 'flow_policy')
net/sched/cls_flow.c: In function 'flow_change':
net/sched/cls_flow.c:416: error: implicit declaration of function 'nla_parse_nested'
net/sched/cls_flow.c:421: error: implicit declaration of function 'nla_get_u32'
net/sched/cls_flow.c:437: warning: passing argument 2 of 'tcf_exts_validate' from incompatible pointer type
net/sched/cls_flow.c:437: warning: passing argument 3 of 'tcf_exts_validate' from incompatible pointer type
net/sched/cls_flow.c:437: warning: passing argument 5 of 'tcf_exts_validate' discards qualifiers from pointer target type
net/sched/cls_flow.c:441: warning: passing argument 2 of 'tcf_em_tree_validate' from incompatible pointer type
net/sched/cls_flow.c:499: error: implicit declaration of function 'init_timer_deferrable'
net/sched/cls_flow.c: In function 'flow_dump':
net/sched/cls_flow.c:618: error: implicit declaration of function 'nla_nest_start'
net/sched/cls_flow.c:618: warning: assignment makes pointer from integer without a cast
net/sched/cls_flow.c:622: error: implicit declaration of function 'NLA_PUT_U32'
net/sched/cls_flow.c:642: warning: passing argument 3 of 'tcf_exts_dump' discards qualifiers from pointer target type
net/sched/cls_flow.c:649: error: implicit declaration of function 'nla_nest_end'
net/sched/cls_flow.c:651: warning: passing argument 3 of 'tcf_exts_dump_stats' discards qualifiers from pointer target type
net/sched/cls_flow.c:657: error: implicit declaration of function 'nlmsg_trim'
net/sched/cls_flow.c: At top level:
net/sched/cls_flow.c:683: warning: initialization from incompatible pointer type
make[2]: *** [net/sched/cls_flow.o] Error 1
make[1]: *** [net/sched] Error 2
make: *** [net] Error 2

Изменено пользователем _INF_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Судя по ошибкам, проще будет допилить первый патч. Нужно удалить функцию flow_get_mark и все ссылки на нее, правильно определить макрос CTTUPLE (см. код netfilter), тип данных NLA_U32 и т.д. В последней версии cls_flow.c намного больше проблем с несовместимостью структур данных. Кстати говоря, в чем великий смысл использования на шейпере именно RHEL/CentOS с древними ядрами?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Судя по ошибкам, проще будет допилить первый патч. Нужно удалить функцию flow_get_mark и все ссылки на нее, правильно определить макрос CTTUPLE (см. код netfilter), тип данных NLA_U32 и т.д. В последней версии cls_flow.c намного больше проблем с несовместимостью структур данных. Кстати говоря, в чем великий смысл использования на шейпере именно RHEL/CentOS с древними ядрами?

Спасибо постараюсь допилить.

 

У меня везде CentOS 5. Следить за зоопарком из 40 операционок на 50 серваках ни сил, ни желания нет.

Изменено пользователем _INF_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Аналогично, использую CentOS с 2.6.18, а туда бэкпорт делается только по особо важным вещам, потмоу кроме u32 варианта нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Неплохо было бы еще приоритет в БД добавить, могут быть тарифы с разным приоритетом. Чтобы высокоприоритетные вытесняли остальных в случае если канал забит или авария и.т.д.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ни разу не видел тарифные планы, строящиеся в зависимости от какого-то абстрактного приоритета. Везде либо фиксированная полоса пропускания, либо фиксированный объем трафика. Меня больше интересует вопрос по поводу различных схем ограничения трафика: шейпинг на двух интерфейсах, полисинг и шейпинг на одном, полисинг на двух.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Расставляют приоритеты в зависимости от группы тарифа, например

1. По трафику

2. Повременка

3. Анлим

и.т.д.

 

Приоритет ставится в зависимости от того сколько прибыли приносит та или иная группа тарифа на единицу магистрального канала.

Потом это будет удобно тем кто каналы постоянно на полках держит, я тут таких много видел из далекой глубинки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуй можно ввести поле приоритета, но тогда поломается совместимость со старыми версиями.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему поломается? Можно же проверять наличие поля в БД, т.е. делать "SELECT * " и смотреть есть ли в строках prio, если нет значит и не использовать. Т.е. ввести как опцию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Почему поломается? Можно же проверять наличие поля в БД, т.е. делать "SELECT * " и смотреть есть ли в строках prio, если нет значит и не использовать. Т.е. ввести как опцию.

Я подумаю об этом. SELECT * неоптимально для сложных таблиц и запросов. Предполагается, что база в большинстве случаев хранится на внешнем сервере биллинга. Хранилище в SQLite было предусмотрено лишь для тестирования и для каких-то небольших офисных инсталляций, где биллинг не нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну кстати говоря решение с SQLite неплохое, можно из внешней базы периодически скидывать туда. Я то сам тоже по первичной информации строю, но вариант с SQLite мне больше нравится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Стоит признать, что flow патч для 2.6.18 я не одолею. Никто не возьмется за бэкпортирование ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вместо flow можно использовать хэш-фильтры u32, netfilter-модули IPMARK и IPCLASSIFY.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

RTNETLINK answers: Invalid argument
We have an error talking to the kernel
/sbin/tc filter replace dev eth0 parent 1: pref 20 handle 100:1 u32 ht 100:1: match ip src 192.168.1.1 flowid 1:3
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
/sbin/tc filter replace dev eth1 parent 1: pref 20 handle 100:1 u32 ht 100:1: match ip dst 192.168.1.1 flowid 1:3
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
/sbin/tc filter replace dev eth0 parent 1: pref 20 handle 100:c8 u32 ht 100:c8: match ip src 192.168.1.200 flowid 1:ca
RTNETLINK answers: Invalid argument
We have an error talking to the kernel
/sbin/tc filter replace dev eth1 parent 1: pref 20 handle 100:c8 u32 ht 100:c8: match ip dst 192.168.1.200 flowid 1:ca

 

 

Из за чего может происходить такая ошибка?

filter_method = u32

Изменено пользователем avenger86

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Причина может быть в отсутствии root qdisc и хэш-фильтров более высокого уровня. Какую последовательность команд вы используете?

По идее, нужно ввести в конфиг список сетей, для которых планируется строить правила:

network = 192.168.1.0/24

и настроить запросы, если используется внешняя БД.

Затем надо добавить в базу несколько IP

sc dbadd 192.168.1.1 1mbit

sc dbadd 192.168.1.2 2mbit

Правила загружаются командой sc start, удаляются командой sc stop, которые в штатном режиме вызываются из rc-скрипта /etc/init.d/sc.

Далее через некоторые периоды происходит синхронизация с базой данных по sc sync из crontab. Возможно какое-то ручное редактирование правил (sc add/del/change).

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Делал все именно в этой последовательности

 

uname -a
2.6.24.5-smp #2 SMP Wed Apr 30 13:41:38 CDT 2008 i686 Celeron (Coppermine) GenuineIntel GNU/Linux
iptables --version
iptables v1.4.0

может чтото из этого сильно устарело??

Еще нюанс на eth1 висит еще один айпи адрес(eth1:1 192,168,0,1) может это как то влияет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Делал все именно в этой последовательности

 

uname -a
2.6.24.5-smp #2 SMP Wed Apr 30 13:41:38 CDT 2008 i686 Celeron (Coppermine) GenuineIntel GNU/Linux
iptables --version
iptables v1.4.0

может чтото из этого сильно устарело??

Может быть пакет iproute2 старой версии, и там неправильно работает команда replace?

 

Еще нюанс на eth1 висит еще один айпи адрес(eth1:1 192,168,0,1) может это как то влияет.
Не влияет, т.к. tc работает с сетевухой как с виртуальным устройством абстрактно от драйвера, а это ниже уровня IP. Внешний и внутренний интерфейс должны отличаться (eth1 и eth0, но не eth1 и eth1:1).
Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день

Есть еще один вопрос.

У нас трафик классифицируется по направлениям, можно ли предусмотреть это в скрипте ???

К примеру есть 3 направления

1 - Внешка

2 - IX

3 - Local Peer

Я думаю что максимально просто реализовать это маркировкой пакетов.

Заранее благодарю за ответ.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день

У нас трафик классифицируется по направлениям, можно ли предусмотреть это в скрипте ???

К примеру есть 3 направления

1 - Внешка

2 - IX

3 - Local Peer

Я думаю что максимально просто реализовать это маркировкой пакетов.

Заранее благодарю за ответ.

sc предназначен для управления симметричными шейперами, у которых два интерфейса, и полосы пропускания в обоих направлениях одинаковые. А у вас будет явно асимметричный шейпинг, когда у каждого интерфейса свой набор полос пропускания, да еще с зависимостью от направления (с какого интерфейса трафик пришел и куда он дальше пойдет). Не усложняйте. Предлагаю поднять несколько симметричных шейпирующих мостов, на каждом из которых будут свои настройки и заруливать на них трафик с L3-свича, находящегося в центре.

 

Другой вопрос, почему речь пошла про какую-то маркировку? Трафик классифицируется на основе значений октетов IP-адреса средствами подсистемы QoS (фильтром flow или хэш-фильтрами u32), а не модулями Netfilter, поэтому никакой маркировки использовать не надо.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

У меня организован шейпирующий бридж, с одним входным и одним выходным интерфейсом.

Для организации цейпинга по направлениям приходится маркировать списки сетей и по маркам

строить шейпера для клиентов. Задача довольно популярная у многих провайдеров.

По поводу нескольких мостов - идея хорошая, но как обычно нюансы портят картину.

К примеру у меня список локальных пиров ~ 10 IX ~ 4000 , не каждая L3 железка разрулит такое.

 

Изменено пользователем kww

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тогда, для простоты, надо возиться не с физическими интерфейсами, а создать несколько псевдоустройств (IFB), по одному для каждого из направлений, и заворачивать трафик на них. Но это уже будет не симметричный мост, а совсем другая история, на это я просто так пойти не могу.

Изменено пользователем photon

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.