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

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

и почему кстати блокируется все что не в шейпе?

Потому что это планировалось для простой конфигурации, где все можно сделать только средствами tc. Кстати говоря, если шейпить в IPoE нужно только адреса из одной подсети /16, то лучше использовать filter_method = flow в sc.conf.

 

Чтобы все IP не блокировались по умолчанию для filter_method = u32, надо удалить из скрипта такой код:

# block all other traffic
$TC->(
"filter add dev $dev parent 1:0 protocol ip pref $pref_default ".
	'u32 match u32 0 0 at 0 police mtu 1 action drop'
);

 

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

А почему не в таблицу ipset?

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

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


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

А почему не в таблицу ipset?

как то пошло от инструкции к биллингу (УТМ) пока устраивало все и проблем не возникало.

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


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

Блокирование каждого IP -- как минимум одно правило. Если число заблокированных превысит несколько сотен, то это уже может привести к заметным тормозам при обходе правил, и появляется смысл пользоваться ipset. UTM в свое время мне запомнился идиотскими скомпилированными в бинарники Perl-скриптами и глючным интерфейсом на Java. Я думаю, такое могли написать только полные идиоты.

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

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


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

Все может быть, боремся костылями :)

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

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


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

немного прооптимизировались, запихнули все разрешенные ИП в ipset в iptables осталось только 2 правила от них.

из скрипта удалил блокировку "всего остального"

по ИПОЕ планируем раздавать адреса из 172.20.хх.хх

 

Кстати, если из скрипта убрал блокировку "всего остального" надо тогда добавлять адрес самого сервера и внешнего?

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


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

Кстати, если из скрипта убрал блокировку "всего остального" надо тогда добавлять адрес самого сервера и внешнего?

Не надо.

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


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

что то опять перестало работать.

База вроде как уже создана, делаю:

 

# sc dbadd 10.10.10.6 1Mbit

# sc sync

# sc load

RTNETLINK answers: File exists

Command failed (null):1

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


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

Вы неправильно поняли смысл команд. Команда load делает полную загрузку всех правил, включая создание корневых дисциплин, хэш-фильтров и классов для всех IP-адресов из базы. Ее нужно выполнять один раз при старте шейпера. После того, как правила загружены, нужно делать синхронизацию с базой (команда sync), которая меняет только краевые классы и фильтры. Кроме того, скрипт не обязательно должен иметь собственную локальную базу, как прописано в настройках по умолчанию. Можно изменить конфигурационный файл и читать прямо из SQL-базы биллинга, которая крутится на отдельной машине.

 

# один раз во время загрузки или после полного удаления всех правил командой sc stop

sc load (или sc start)

 

# в базу биллинга внесены изменения сторонними программами или с помощью sc

sc dbadd 10.10.10.6 1Mibit

sc dbchange 10.10.10.1 2Mibit

...

# периодически запускается на шейпере для синхронизации с базой

sc sync

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


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

делаю так.

sc start

в базу был до этого добавлен адрес 10.10.10.6 1024Kbit

ограничение сработало, правда скорость варьировалась в районе 80-90кб/с иногда прыгает до 100/110кб

14:31:10 (88.06 KB/s) - `MPlayer-1.0-alt16.pre5.M24.1.src.rpm' сохранён [5526656/5526656]

качал с яндекса

 

делаю

sc del 10.10.10.6

ограничение снимается скорость поднимается до положенных 10мб/с

 

дальше делаю

sc sync

и ограничение возвращается обратно. Т.е. должно было обновить базу и удалить из нее адрес 10.10.10.6 а он его от туда опять только прочитал?

 

делаю

sc add 172.20.3.1 1024Kbit

правило срабатывает, по яндекс мерке показывает на ход 998кбит на выход без ограничения.

 

опять делаю

sc sync

это правило удаляется и возвращается 10.10.10.6 только

 

Что то я опять не допонял :(

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

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


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

про скорость надо курить параметр бурст. синх просто правила строит в зависимости от того что занесено в базу.

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


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

а add/del разве не добавляет и удаляет из базы?

add/del работают с правилами. dbadd/dbdel -- с базой. Чтобы команды add/del вносили изменения одновременно и в правила, и в базу, нужно использовать ключ -j или поставить в конфиге joint = 1.

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

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


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

еще раз спасибо. А как быть со скоростью? проверял правда на 1мбите только (яндекс мерилка показывает около 990) а скачка варьируется 70-80кб/с

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


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

Нужно использовать другие единицы, которые пишутся через i: kibit (1024 bit) и mibit (1024 kibit) и вместо kbit (1000 bit) и mbit (1000 kbit).

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


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

При запуске фейлится.Не пойму почему...

 

sudo sc start

Can't exec "/usr/local/sbin/tc": Нет такого файла или каталога at /usr/local/sbin/sc line 898.

sc: unable to create pipe for /usr/local/sbin/tc at /usr/local/sbin/sc line 645

main::log_croak('unable to create pipe for /usr/local/sbin/tc') called at /usr/local/sbin/sc line 898

main::tc_batch_start() called at /usr/local/sbin/sc line 521

main::__ANON__() called at /usr/local/sbin/sc line 1909

main::cmd_load() called at /usr/local/sbin/sc line 404

main::main('start') called at /usr/local/sbin/sc line 370

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


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

дык вроде же даже по русски пишет

Can't exec "/usr/local/sbin/tc": Нет такого файла или каталога

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


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

Т.е. просто cp /sbin/tc. /usr/local/sbin/tc?

Думаю не совсем в этом трабл.

Хоть в perle я не силен,меня смущает больше вот это

main::tc_batch_start() called at /usr/local/sbin/sc line 521

main::__ANON__() called at /usr/local/sbin/sc line 1909

main::cmd_load() called at /usr/local/sbin/sc line 404

main::main('start') called at /usr/local/sbin/sc line 370

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


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

Блин,собственно так и произошло Порядок действий был такой:

 

sudo cp /sbin/tc /usr/local/sbin/tc

sudo sc start

 

После этого инет грохнулся.(Сижу под виндой на работе).При чем с шлюза пинги не проходили.=(

 

Сейчас попробую включить запись в syslog,посмотрим что выйдет.

 

...

syslog молчит.

Изменено пользователем sx-sqlx

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


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

Думаю не совсем в этом трабл.

Хоть в perle я не силен,меня смущает больше вот это

В программировании не силен, но на скоко я понимаю в медицине, оно тебе показало стек вызовов

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


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

После этого инет грохнулся.

Манул читали? Бидэ создали? Мясо ипы/дапазоны нарезали?

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


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

Да,конечно читал.Как всегда в первую очередь.

# sc dbcreate

# sc dbadd 172.16.0.1 10Mibit

# sc dbadd 172.16.0.2 20Mibit

Мясо ипы/дапазоны нарезали?

Вот об этом можно поподробнее?Что имеется в виду?Изначально все ипы заблочены?Если так,то по сути всегда должен быть создал default класс/очередь/фильтр для тех кто не относится ни к одному классу,или я не прав?

 

Диапазоны указывал только в конфиге 192.168.1.0/24

 

И еще заранее 1 вопрос:

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

И что мне нужно будет добавить?Раскомментировать #iptables /usr/local/sbin/iptables в sc.conf?Или еще что то?

Изменено пользователем sx-sqlx

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


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

Судя по сообщениям об ошибках, нужно просто указать правильный путь до tc.

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

Нет, другие правила iptables не подхватятся. iptables для шейпера по большому счету не нужен. Если используется filter_method = u32, все делается средствами tc.

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


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

А все ипы по дефолту не заблочены случайно?

Судя по сообщениям об ошибках, нужно просто указать правильный путь до tc.

Это я уже исправил,теперь просто когда стартую sc обрубается инетернет =(

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


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

А все ипы по дефолту не заблочены случайно?

Да, блокируются все IP, для которых не созданы правила, т.е. если их не было в базе на момент выполнения команд load или sync.

Изменено пользователем 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 смайлов.

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

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

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