Хранение больших firewall address-list в RAM / USB-Flash
-
- Сообщения: 3
- Зарегистрирован: 15 май 2018, 18:47
Хранение больших firewall address-list в RAM / USB-Flash
Здравствуйте!
Возникла необходимость заворачивать десятки тысяч разных IP-адресов и подсетей на определенный интерфейс в hap AC^2. Всё настроено и работает в связке firewall access list->mangle->route->nat, написал программу, которая собирает нужные адреса, объединяет их, фильтрует и пересылает с помощью MikrotikAPI на роутер.
Но вот беда. В роутере очень уж маленький объем NAND, и из общих чуть менее 16, у меня имеется всего 3 мб., в которые у меня влезает около 24 тысяч записей access-list из порядка 63 тысяч. Остальное записывается в RAM-диск и после перезагрузки роутера естественно исчезает. Это кажется не так страшно: можно ведь докачать недостающие с помощью программы. Но забитая до предела NAND приводит к невозможности сохранения и других измененных настроек роутера, если такие были. И вот это уже большая проблема.
Попытался попробовать использовать какой-то другой тип списков, например из WebProxy — его вроде можно сохранить на подключенный USB-девайс. Но firewall с такими списками работать не желает.
Я вижу два возможных выхода: сохранять список на флешку или же в целиком в RAM-диск (памяти на хранение всего списка в отличие от NAND хватает), но не нашел как. Может это всё же возможно? Или есть какие-то обходные пути типа использования access list’a WebProxy? Или хранения access-list’a на стороннем устройстве? Я бы мог например прикрутить к USB-выходу Raspberry Pi, обдающуюся с ним по API, но совершенно не понимаю, чем это может помочь.
С уважением
Возникла необходимость заворачивать десятки тысяч разных IP-адресов и подсетей на определенный интерфейс в hap AC^2. Всё настроено и работает в связке firewall access list->mangle->route->nat, написал программу, которая собирает нужные адреса, объединяет их, фильтрует и пересылает с помощью MikrotikAPI на роутер.
Но вот беда. В роутере очень уж маленький объем NAND, и из общих чуть менее 16, у меня имеется всего 3 мб., в которые у меня влезает около 24 тысяч записей access-list из порядка 63 тысяч. Остальное записывается в RAM-диск и после перезагрузки роутера естественно исчезает. Это кажется не так страшно: можно ведь докачать недостающие с помощью программы. Но забитая до предела NAND приводит к невозможности сохранения и других измененных настроек роутера, если такие были. И вот это уже большая проблема.
Попытался попробовать использовать какой-то другой тип списков, например из WebProxy — его вроде можно сохранить на подключенный USB-девайс. Но firewall с такими списками работать не желает.
Я вижу два возможных выхода: сохранять список на флешку или же в целиком в RAM-диск (памяти на хранение всего списка в отличие от NAND хватает), но не нашел как. Может это всё же возможно? Или есть какие-то обходные пути типа использования access list’a WebProxy? Или хранения access-list’a на стороннем устройстве? Я бы мог например прикрутить к USB-выходу Raspberry Pi, обдающуюся с ним по API, но совершенно не понимаю, чем это может помочь.
С уважением
-
- Сообщения: 4086
- Зарегистрирован: 29 фев 2016, 15:26
- Откуда: Минск
Re: Хранение больших firewall address-list в RAM / USB-Flash
Приветствую.
WebProxy никак не поможет, это другая программа, к роутингу отношения не имеющая.
WebProxy никак не поможет, это другая программа, к роутингу отношения не имеющая.
А если создавать динамические записи (указать timeout=35w) - они будут в памяти, не записываются на диск, и после перезагрузки можно влить опять с помощью программы. Не подойдёт?xankraegor писал(а): ↑15 май 2018, 19:16 Я вижу два возможных выхода: сохранять список на флешку или же в целиком в RAM-диск (памяти на хранение всего списка в отличие от NAND хватает), но не нашел как. Может это всё же возможно?
Ну, разве что поднять между Pi и ROS сессию BGP - и по ней получать список маршрутов.xankraegor писал(а): ↑15 май 2018, 19:16 Или хранения access-list’a на стороннем устройстве? Я бы мог например прикрутить к USB-выходу Raspberry Pi, обдающуюся с ним по API, но совершенно не понимаю, чем это может помочь.
-
- Сообщения: 3
- Зарегистрирован: 15 май 2018, 18:47
Re: Хранение больших firewall address-list в RAM / USB-Flash
Спасибо, попробую с таймаутом, как более простой вариант!
Я так понимаю, что во втором случае маршруты тоже сохраняются в памяти роутера?
Я так понимаю, что во втором случае маршруты тоже сохраняются в памяти роутера?
-
- Сообщения: 4086
- Зарегистрирован: 29 фев 2016, 15:26
- Откуда: Минск
Re: Хранение больших firewall address-list в RAM / USB-Flash
Да, по BGP маршруты прилетают на роутер только когда поднята BGP-сессия.
-
- Сообщения: 3
- Зарегистрирован: 15 май 2018, 18:47
Re: Хранение больших firewall address-list в RAM / USB-Flash
Спасибо! Я окончательно убедился в том, что динамические списки будут для меня лучшим решением. Еще один вопрос по реализации, если можно. Как в API передать сразу множество однотипных параметров? Интересует, прежде всего id.
На конкретном примере с /ip/firewall/remove при имеющемся списке id записей в access-list'e вторая строка как правильно пишется?
или еще как-то правильно?
Или почти аналогичное /ip/firewall/address-list/add
=list=listname
=timeout=35w
=address=1.1.1.1,2.2.2.2,3.3.3.0/24,4.4.0.0/16
? вроде как не проходит, микротик ругается что то, что после "address= ", "is not a valid dns name".
Я работаю с достаточно сыроватом API под Swift с сайта Mikrotik неизвестного авторства (даже на GitHub не закоммитить свои исправления :/) и тщетно пытаюсь отделить его проблемы от моего незнания синтаксиса API. Пока что приходится каждый запрос отсылать отдельно, в итоге вся программа отрабатывает за 25 минут, что для передачи 3 мб команд как-то очень уж много
P.S. Судя по выводу из консоли Микротика, всё печально, по крайней мере много адресов сразу передавать нельзя (в консоль) :
Address ::= A.B.C.D[-A.B.C.D |0..32 |/A.B.C.D ] (IP address range)
Range и подсети у меня и так используются по-максимуму, за это отвечает программа. Но хотелось бы как-то пакетно заливать список.
На конкретном примере с /ip/firewall/remove при имеющемся списке id записей в access-list'e вторая строка как правильно пишется?
- =.id=*1,*2,*3,*4
- =.id=1,2,3,4
- =.id=<1>,<2>,<3>,<4>
или еще как-то правильно?
Или почти аналогичное /ip/firewall/address-list/add
=list=listname
=timeout=35w
=address=1.1.1.1,2.2.2.2,3.3.3.0/24,4.4.0.0/16
? вроде как не проходит, микротик ругается что то, что после "address= ", "is not a valid dns name".
Я работаю с достаточно сыроватом API под Swift с сайта Mikrotik неизвестного авторства (даже на GitHub не закоммитить свои исправления :/) и тщетно пытаюсь отделить его проблемы от моего незнания синтаксиса API. Пока что приходится каждый запрос отсылать отдельно, в итоге вся программа отрабатывает за 25 минут, что для передачи 3 мб команд как-то очень уж много
P.S. Судя по выводу из консоли Микротика, всё печально, по крайней мере много адресов сразу передавать нельзя (в консоль) :
Address ::= A.B.C.D[-A.B.C.D |0..32 |/A.B.C.D ] (IP address range)
Range и подсети у меня и так используются по-максимуму, за это отвечает программа. Но хотелось бы как-то пакетно заливать список.
-
- Сообщения: 4086
- Зарегистрирован: 29 фев 2016, 15:26
- Откуда: Минск
Re: Хранение больших firewall address-list в RAM / USB-Flash
Если /remove умеет удалять сразу несколько значений - тогда =.id=*1,*2,*3,*4 выглядит самым правильным. Но есть подозрение, что не умеет, и надо всё по одному удалять.
Добавлять - точно по одному Для ускорения можно попробовать в несколько потоков это делать...
Если обычные команды в Терминал вливаются быстрее - можно генерировать скрипт для создания - и его по ssh/telnet отправлять на роутер.
Добавлять - точно по одному Для ускорения можно попробовать в несколько потоков это делать...
Если обычные команды в Терминал вливаются быстрее - можно генерировать скрипт для создания - и его по ssh/telnet отправлять на роутер.
-
- Сообщения: 3
- Зарегистрирован: 09 июн 2018, 17:50
Re: Хранение больших firewall address-list в RAM / USB-Flash
Можно обойтись без API, автоскриптом.
Имя файла должно оканчиваться на .auto.rsc, заливать по FTP (можно на подключенную флешку) -- оно сразу само выполняется, ошибки пишет в лог (есть смысл поднастроить логгирование), если всё ОК -- рядом в Files появляется файлик .auto.log с результатом (или пустой, если накосячили в коде).
Скрипт укомпакчивал долго, чтобы сократить объем. Вышло примерно так (параметры разделены табуляцией, работает автодополнение):
Тут пока 80K строк с хвостиком заливается норм, адреса и подсети вперемешку.
Таймаут выбран такой (9w), чтоб маскимальный срок жизни, но минимум символов в коде (всё равно обновляется ежечасно).
В аналогичном стиле сделаны и записи доменов и шаблонов в Access для Web-Proxy, их пока порядка 19К. Заливаемый скрипт весит под 2.7MB.
Всё вместе с обрезанной по минимуму системой жужжит на RB951Ui-2HnD (потому что там NAND и 128MB RAM, около 20 пока свободно).
Но думаю, на что уползать / делить функции, ибо аппетит у РКН (вы ведь их блокировки реализуете, судя по количеству записей на момент старта темы?) растёт, и уже есть риск упереться в RAM и штраф
Пробовал hEX (RB750Gr3) -- оно падало на перезагрузке, именно из-за FLASH-памяти. Сейчас рассматриваю или варианты с x86 (на порядки быстрее, но непонятно, какое железо ставить в необслуживаемом исполнении) или RB450Gx4 (их пока не везут, только анонсировали).
Имя файла должно оканчиваться на .auto.rsc, заливать по FTP (можно на подключенную флешку) -- оно сразу само выполняется, ошибки пишет в лог (есть смысл поднастроить логгирование), если всё ОК -- рядом в Files появляется файлик .auto.log с результатом (или пустой, если накосячили в коде).
Скрипт укомпакчивал долго, чтобы сократить объем. Вышло примерно так (параметры разделены табуляцией, работает автодополнение):
Код: Выделить всё
/ip firewall address-list { remove numbers=[find list=z]
a l z t 9w a 100.34.204.147
a l z t 9w a 101.0.110.52
...
a l z t 9w a 99.192.254.198
}
Таймаут выбран такой (9w), чтоб маскимальный срок жизни, но минимум символов в коде (всё равно обновляется ежечасно).
В аналогичном стиле сделаны и записи доменов и шаблонов в Access для Web-Proxy, их пока порядка 19К. Заливаемый скрипт весит под 2.7MB.
Всё вместе с обрезанной по минимуму системой жужжит на RB951Ui-2HnD (потому что там NAND и 128MB RAM, около 20 пока свободно).
Но думаю, на что уползать / делить функции, ибо аппетит у РКН (вы ведь их блокировки реализуете, судя по количеству записей на момент старта темы?) растёт, и уже есть риск упереться в RAM и штраф
Пробовал hEX (RB750Gr3) -- оно падало на перезагрузке, именно из-за FLASH-памяти. Сейчас рассматриваю или варианты с x86 (на порядки быстрее, но непонятно, какое железо ставить в необслуживаемом исполнении) или RB450Gx4 (их пока не везут, только анонсировали).
-
- Сообщения: 14
- Зарегистрирован: 17 авг 2016, 02:48
Re: Хранение больших firewall address-list в RAM / USB-Flash
RB450Gx4 можно уже сейчас купить здесь: https://www.eurodk.com/en/products/rout ... ard-450gx4
RB493G, 2 x hAP ac^2, 2 x hAP ac^3, wAP ac, 2 x RB450G, hAP ac lite, X86 (Intel 566 MHz Slot1).
-
- Сообщения: 4086
- Зарегистрирован: 29 фев 2016, 15:26
- Откуда: Минск
-
- Сообщения: 3
- Зарегистрирован: 09 июн 2018, 17:50
Re: Хранение больших firewall address-list в RAM / USB-Flash
Ну, так-то понятно, что купить быстрее в принципе где-то возможно... но мне ж не лично себе, а контора заказывает лишь при обоснованной необходимости, со всеми документами и в проверенных уже Интернет-магазинах.Gennadiy51 писал(а): ↑09 июн 2018, 20:39RB450Gx4 можно уже сейчас купить здесь: https://www.eurodk.com/en/products/rout ... ard-450gx4
Подождём у наших обычных поставщиков.
С другой стороны, если кто уже пощупал эту железку -- интересен бы был временный удалённый доступ к ней или просто выслать текущий скрипт, залить списки и посмотреть время обработки (разницу таймстампов скрипта и лога по завершении) -- могбыть игра не стОит свеч.
-
- Сообщения: 31
- Зарегистрирован: 24 янв 2017, 11:57
Re: Хранение больших firewall address-list в RAM / USB-Flash
А что это за фильтр такой с десятками тысяч адресов и сетей?
-
- Сообщения: 31
- Зарегистрирован: 24 янв 2017, 11:57
Re: Хранение больших firewall address-list в RAM / USB-Flash
Могу подкинуть идею, но не уверен реализуема ли она технически.
Если ловить ответы ркн заглушек провайдера, и если в них можно выделить паттерн какой-нибудь, то можно целевой адрес добавлять в динамический список. Т.е. составлять собственный небольшой временный список по ответам заглушки.
Если ловить ответы ркн заглушек провайдера, и если в них можно выделить паттерн какой-нибудь, то можно целевой адрес добавлять в динамический список. Т.е. составлять собственный небольшой временный список по ответам заглушки.