photon Опубликовано 15 марта, 2010 · Жалоба Дополнение: все-таки удалось запустить, сделал небольшой патч, реализующий первый предложенный мной вариант: Спасибо. Я скорее всего включу эту возможность в следующих версиях в виде опции к командам редактирования правил. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 16 марта, 2010 · Жалоба Сейчас правила строятся по схеме shaping+shaping. Стоит ли также реализовать схемы shaping+policing и policing+policing? Юзабелен ли policing на небольших скоростях около 1--5 Mbit? По идее, польза от policing начинается только при больших пакетрейтах и скоростях. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_INF_ Опубликовано 16 марта, 2010 · Жалоба Никто не пытался создать рабочий патч flow для ядра RHEL/CentOS 5 ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 16 марта, 2010 · Жалоба Никто не пытался создать рабочий патч flow для ядра RHEL/CentOS 5 ? Не вижу препятствий сделать его самому, используя исходники ванильного ядра. Код управления трафиком в ядре меняется довольно вяло, поэтому проблем быть не должно. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_INF_ Опубликовано 16 марта, 2010 (изменено) · Жалоба Никто не пытался создать рабочий патч 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 Изменено 16 марта, 2010 пользователем _INF_ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 16 марта, 2010 · Жалоба Судя по ошибкам, проще будет допилить первый патч. Нужно удалить функцию flow_get_mark и все ссылки на нее, правильно определить макрос CTTUPLE (см. код netfilter), тип данных NLA_U32 и т.д. В последней версии cls_flow.c намного больше проблем с несовместимостью структур данных. Кстати говоря, в чем великий смысл использования на шейпере именно RHEL/CentOS с древними ядрами? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_INF_ Опубликовано 16 марта, 2010 (изменено) · Жалоба Судя по ошибкам, проще будет допилить первый патч. Нужно удалить функцию flow_get_mark и все ссылки на нее, правильно определить макрос CTTUPLE (см. код netfilter), тип данных NLA_U32 и т.д. В последней версии cls_flow.c намного больше проблем с несовместимостью структур данных. Кстати говоря, в чем великий смысл использования на шейпере именно RHEL/CentOS с древними ядрами? Спасибо постараюсь допилить. У меня везде CentOS 5. Следить за зоопарком из 40 операционок на 50 серваках ни сил, ни желания нет. Изменено 16 марта, 2010 пользователем _INF_ Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 17 марта, 2010 · Жалоба Аналогично, использую CentOS с 2.6.18, а туда бэкпорт делается только по особо важным вещам, потмоу кроме u32 варианта нет. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 18 марта, 2010 · Жалоба Неплохо было бы еще приоритет в БД добавить, могут быть тарифы с разным приоритетом. Чтобы высокоприоритетные вытесняли остальных в случае если канал забит или авария и.т.д. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 18 марта, 2010 (изменено) · Жалоба Ни разу не видел тарифные планы, строящиеся в зависимости от какого-то абстрактного приоритета. Везде либо фиксированная полоса пропускания, либо фиксированный объем трафика. Меня больше интересует вопрос по поводу различных схем ограничения трафика: шейпинг на двух интерфейсах, полисинг и шейпинг на одном, полисинг на двух. Изменено 18 марта, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 19 марта, 2010 · Жалоба Расставляют приоритеты в зависимости от группы тарифа, например 1. По трафику 2. Повременка 3. Анлим и.т.д. Приоритет ставится в зависимости от того сколько прибыли приносит та или иная группа тарифа на единицу магистрального канала. Потом это будет удобно тем кто каналы постоянно на полках держит, я тут таких много видел из далекой глубинки. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 19 марта, 2010 (изменено) · Жалоба Пожалуй можно ввести поле приоритета, но тогда поломается совместимость со старыми версиями. Изменено 19 марта, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 19 марта, 2010 · Жалоба Почему поломается? Можно же проверять наличие поля в БД, т.е. делать "SELECT * " и смотреть есть ли в строках prio, если нет значит и не использовать. Т.е. ввести как опцию. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 марта, 2010 · Жалоба Почему поломается? Можно же проверять наличие поля в БД, т.е. делать "SELECT * " и смотреть есть ли в строках prio, если нет значит и не использовать. Т.е. ввести как опцию. Я подумаю об этом. SELECT * неоптимально для сложных таблиц и запросов. Предполагается, что база в большинстве случаев хранится на внешнем сервере биллинга. Хранилище в SQLite было предусмотрено лишь для тестирования и для каких-то небольших офисных инсталляций, где биллинг не нужен. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
SokolovS Опубликовано 20 марта, 2010 · Жалоба Ну кстати говоря решение с SQLite неплохое, можно из внешней базы периодически скидывать туда. Я то сам тоже по первичной информации строю, но вариант с SQLite мне больше нравится. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
_INF_ Опубликовано 2 апреля, 2010 · Жалоба Стоит признать, что flow патч для 2.6.18 я не одолею. Никто не возьмется за бэкпортирование ? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 3 апреля, 2010 · Жалоба Вместо flow можно использовать хэш-фильтры u32, netfilter-модули IPMARK и IPCLASSIFY. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
avenger86 Опубликовано 19 апреля, 2010 (изменено) · Жалоба 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 Изменено 19 апреля, 2010 пользователем avenger86 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 апреля, 2010 (изменено) · Жалоба Причина может быть в отсутствии 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). Изменено 20 апреля, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
avenger86 Опубликовано 20 апреля, 2010 · Жалоба Делал все именно в этой последовательности 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) может это как то влияет. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 20 апреля, 2010 (изменено) · Жалоба Делал все именно в этой последовательности 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). Изменено 20 апреля, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kww Опубликовано 21 мая, 2010 · Жалоба Добрый день Есть еще один вопрос. У нас трафик классифицируется по направлениям, можно ли предусмотреть это в скрипте ??? К примеру есть 3 направления 1 - Внешка 2 - IX 3 - Local Peer Я думаю что максимально просто реализовать это маркировкой пакетов. Заранее благодарю за ответ. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 21 мая, 2010 (изменено) · Жалоба Добрый деньУ нас трафик классифицируется по направлениям, можно ли предусмотреть это в скрипте ??? К примеру есть 3 направления 1 - Внешка 2 - IX 3 - Local Peer Я думаю что максимально просто реализовать это маркировкой пакетов. Заранее благодарю за ответ. sc предназначен для управления симметричными шейперами, у которых два интерфейса, и полосы пропускания в обоих направлениях одинаковые. А у вас будет явно асимметричный шейпинг, когда у каждого интерфейса свой набор полос пропускания, да еще с зависимостью от направления (с какого интерфейса трафик пришел и куда он дальше пойдет). Не усложняйте. Предлагаю поднять несколько симметричных шейпирующих мостов, на каждом из которых будут свои настройки и заруливать на них трафик с L3-свича, находящегося в центре. Другой вопрос, почему речь пошла про какую-то маркировку? Трафик классифицируется на основе значений октетов IP-адреса средствами подсистемы QoS (фильтром flow или хэш-фильтрами u32), а не модулями Netfilter, поэтому никакой маркировки использовать не надо. Изменено 21 мая, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kww Опубликовано 21 мая, 2010 (изменено) · Жалоба У меня организован шейпирующий бридж, с одним входным и одним выходным интерфейсом. Для организации цейпинга по направлениям приходится маркировать списки сетей и по маркам строить шейпера для клиентов. Задача довольно популярная у многих провайдеров. По поводу нескольких мостов - идея хорошая, но как обычно нюансы портят картину. К примеру у меня список локальных пиров ~ 10 IX ~ 4000 , не каждая L3 железка разрулит такое. Изменено 21 мая, 2010 пользователем kww Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
photon Опубликовано 21 мая, 2010 (изменено) · Жалоба Тогда, для простоты, надо возиться не с физическими интерфейсами, а создать несколько псевдоустройств (IFB), по одному для каждого из направлений, и заворачивать трафик на них. Но это уже будет не симметричный мост, а совсем другая история, на это я просто так пойти не могу. Изменено 21 мая, 2010 пользователем photon Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...