Wednesday, January 9, 2019

КОМАНДНАЯ СТРОКА MIKROTIK

Консольный доступ на Mikrotik используется для конфигурации и управления роутером с помощью терминала по telnet, SSH и т.д. Также консоль можно использовать для написания скриптов. Ниже вы найдете базовые команды, использующиеся для администрирования роутера.

ИЕРАРХИЯ

Всего существует большое количество команд, которые разбиты на группы, отсортированные в иерархическом порядке. Это означает, что название уровня меню отображает информацию о конфигурации в соответствующем разделе - определение не очень понятное, но, после примеров все станет более прозрачным.
К примеру, введите команду ip route print для вывода таблицы маршрутизации:
Вывод таблицы маршрутизации
Если же ввести команду ip route, то вы как бы сразу попадете в меню манипуляции конкретной ветки:
Выполнение команд на подуровне в RouterOS
Обратите внимание, что для вывода всех возможных команд на данном уровне достаточно ввести знак ?, а для возврата на уровень выше - знак /. Если же вам нужно выполнить команду из основного уровня - добавьте слэш (/) и команду следом, к примеру ping:
Выполнение команды из основного уровня

НУМЕРАЦИЯ И НАЗВАНИЯ СУЩНОСТЕЙ

Множество команд оперирует массивами сущностей - массивами интерфейсов, маршрутов, пользователей и т.д. Для изменения свойств сущности, предварительно должна идти команда set и указано имя или номер сущности. Различие между номером и названием состоит в том, что при обращении к сущности по имени (item name) нет необходимости использовать команду print, в отличие от номера, который может быть назначен с помощью команды. Таким образом, использование “имен” в каком-то смысле более стабильно - однако все равно возможна ситуация, в которой, к примеру, несколько пользователей одновременно настраивают маршрутизатор. Ниже приведен пример изменения параметра MTU с помощью команды interface set 0 mtu=1460
Установка параметра интерфейса

АВТОЗАПОЛНЕНИЕ
В RouterOS есть две фичи, которые ускоряют конфигурацию - табуляция и сокращения команд. Табуляция - автозавершение команды после нажатия на клавишу Tab и оно работает также как автозавершение в bash для Linux\UNIX систем.
Если есть только одна альтернатива - она будет автоматически предложена и будет добавлен пробел, если же альтернатив больше - команда будет выполнена частично и пробел добавлен не будет.
То есть:
  • int[Tab] станет interface
  • interface set e[Tab] станет interface set ether_
Другой фичей является сокращение команд - к примеру вместо interface можно использовать int, вместо ping использовать pi и так далее
Ниже пример как выполняется команда pi 192.1 c 3 si 100, что абсолютно аналогично команде ping 192.0.0.1 count 3 size 100
Пример сокращения команды

ОСНОВНЫЕ КОМАНДЫ
Некоторые команды применимы практически на всех уровнях, эти команды - print, set, remove, add, find, get, export, enable, disable, comment, move.
  • add - добавление нового элемента с указанными параметрами, некоторые из параметров перечислены далее - copy-from, place-before, disabled, comment;
  • edit - ассоциирована с командой set, как правило используется для редактирования сущностей, содержащих большое количество текста, к примеру скриптов, но также работает для любых редактируемых сущностей;
  • find - команда возвращает внутренние номера всех сущностей, которые попадают под указанный фильтр. Обладает такими же аргументами как и команда set + имеет аргументы вида flag - такие как disabled или active (другими словами, булевые переменные);
  • move - команда меняет порядок сущностей в списке;
  • print - команда выводит всю информацию доступную с текущего уровня. Типичные модификаторы - from, where, brief, detail, count-only, file, interval, oid, without-paging. К примеру команда system clock print выводит системную дату и время, ip rout print - таблицу маршрутизации;
  • remove - удаление сущности (-ей) из списка;
  • set - установка параметров, значений и так далее;
Не забывайте, что для просмотра всех возможных аргументов и модификаторов вы можете ввести знак вопроса ? после команды или дважды нажать на клавишу Tab.

ГОРЯЧИЕ КЛАВИШИ
Ниже приведен список самых полезных горячих клавиш, которые могут серьезно ускорить процесс настройки оборудования, и, даже спасти ситуацию в случае ввода некорректного сетевого адреса.
  • Ctrl-C - прерывание, к примеру для остановки процесса ping;
  • Ctrl-D - разлогинивание;
  • Ctrl-K - очистить строку от курсора до конца строки;
  • Ctrl-X - включение Безопасного режима, позволяет настраивать роутер практически без риска потерять удаленный доступ. При потере доступа, все выполненные изменения будут нивелированы через примерно 10 минут;
  • Ctrl-V - включение режима Автозаполнения (HotLock), в нем все команды будут завершаться автоматически;
  • F6 - включение режима помощи, при котором внизу терминала будут показаны типичные сочетания клавиш и как они могут быть использованы;
  • F1 или ? - помощь, вывод всех возможных команд на данном уровне;
  • Tab - автозавершение команды;

НАСТРОЙКА QOS НА MIKROTIK ДЛЯ ASTERISK

Итак, чтобы корректно настроить QoS (Quality of Service), нам необходимо предварительно произвести небольшие расчеты. Предположим, в нашем офисе находятся 30 телефонных аппаратов, работающих по протоколу SIP под управление IP – АТС Asterisk. Мы предполагаем, что для одного телефонного разговора нужно 100 кбит полосы (с оверхедами). Тем самым, для 30 аппаратов нам потребуется полоса в 3 мбит (up/down). Все наша VoIP – инфраструктура живет в отдельном VLAN`e с подсетью 192.168.3.0/24. Приступаем к настройке.
Всегда рекомендует выносить VoIP инфраструктуру (PBX, телефоны, шлюзы) в отдельную подсеть. Это позволит проще сегментировать трафик обычной сети передачи данных и чувствительный к задержкам VoIP.

НАСТРОЙКА НА MIKROTIK | МАРКИРОВКА ПАКЕТОВ

Настройки будем производить через утилиту управления Winbox. Открываем вкладку IP → Firewall и выбираем вкладку Mangle. Нажимаем на синий значок «+»:
Маркировка VoIP соединения Mikrotik
Отлично. Далее мы создаем маркировку для соединения, приходящих из подсети 192.168.3.0/24 и отправленных внутрь этой подсети. Начнем с первой задачи. Указываем:
  • Chain - выбираем здесь prerouting;
  • Src. Address - указываем нашу подсеть;
Тэги для трафик из подсети телефонов Asterisk на Mikrotik
Если ваши телефоны и IP – АТС Asterisk «живут» в той же подсети, что и рабочие станции (ПК), то укажите в качестве источника и назначения в маркировках IP – адрес Asterisk
Прыгаем на вкладку Action и указываем следующие параметры:
  • Action - мы делаем маркировку, поэтому выбираем mark connection;
  • New Connection Mark - маркируем как VoIP;
  • Passthrough - отмечаем галочкой;
Маркировка соединения в Mikrotik
Сохраняем изменения и нажимаем «ОК». Теперь нам необходимо сделать тоже самое, только на первом этапе, подсеть 192.168.3.0/24 мы укажем не в параметре Src. Address, а в Dst. Address. Все прочие опции делаем идентично проделанным шагам. В итоге у вас должно получиться вот так:
Mangle в Mikrotik
И добавляем финальный штрих к нашей конструкции – промаркируем пакеты, которые попадают под ранее созданные правила маркировки коннекций (соединений). Нажимаем на «+» и во вкладке General:
  • Chain - указываем prerouting;
  • Connection Mark - выбираем VoIP;
Mangle prerouting в Mikrotik
А во вкладке Action:
  • Action - делаем mark packet;
  • New Packet Mark - выбираем VoIP;
  • Passthrough снимаем галочку с чекбокса;
Нажимаем «ОК» и сохраняем. Итого у нас получается:
Приоритизация VoIP трафика в Mikrotik

ПРИОРИТЕТЫ И ВЫДЕЛЕНИЕ ПОЛОСЫ ПРОПУСКАНИЯ

На текущем этапе мы достаточно точно можем отделить VoIP – трафик от любого другого. Поэтому, создадим очередь обслуживания. Для этого, переходим в раздел Queues и нажимаем «+»:
Создание очереди в Mikrotik
Работаем со следующими параметрами:
  • Name - даем имя очереди - VoIP queue;
  • Target - укажите 0.0.0.0/0. Мы парсим данные на Mikrotik по маркированным пакета;
  • Max Limit - снимаем галочку с чекбокса;
    • Target Upload - 3M, как и говорили в начале статье;
    • Target Download - 3M, как и говорили в начале статье :);
    Лимит для полосы пропускания в Mikrotik
Двигаем во вкладку Advanced:
  • Marks - выбираем из выпадающего списка VoIP;
  • Priority - выбираем для UP/DOWN 1 приоритет;
Первый приоритет для трафика в Mikrotik
Теперь необходимо сделать очередь для остального трафика:
  • Name - даем имя очереди - Other traffic;
  • Target - указываем сеть, в которой живут наши рабочие станции (ПК) - в нашем случае 192.168.2.0/24;
  • Max Limit
    • Target Upload - 30M в нашем случае;
    • Target Download - 30M;
Трафик сети передачи QoS Mikrotik
Прыгаем на вкладку Advanced:
  • Marks - выбираем no-mark, так как нас интересуют пакеты без маркировки;
  • Priority - выбираем 8 приоритет;
Трафик сети передачи QoS Mikrotik

ТЕСТИРОВАНИЕ
Проверяем. В очереди, переходим во вкладку Traffic в настройках VoIP очереди, делаем звонок и видим его график:
Приоритет для обычного Mikrotik

Friday, December 28, 2018

Скрипт создания зеркала обновлений для Eset Nod32 на Linux

Если вы занимаетесь администрированием, велика вероятность что рано или поздно встанет вопрос — «На клиентских машинах стоит антивирус Nod32, надо бы создать для них единое зеркало обновлений». И тут возможны несколько путей развития сюжета:

  1. «Сервер на Windows, денег достаточно». Тут всё довольно просто — покупаем лицензию, ставим нужный дистрибутив Nod32 на сервер, настраиваем, радуемся. Вариант более мифический, так как крайне редко, когда на IT «денег достаточно».
  2. «Сервер на Windows, денег не достаточно». Тут возможны варианты. Начиная от использования варезных лицензий, до ручного скриптинга и использования Linux-решений (cygwin в помощь).
  3. «Сервер на Linux». Деньги в этом случае особого значения просто не имеют. У нас есть руки, есть голова, и есть желание сделать всё довольно качественно и надежно.

Вот про третий вариант мы сейчас и поговорим.


Что переобуется для работы?

  • Unix-система (тестировался на CentOS 7, FreeNas 9.3 и FreeBSD 8.3);
  • Bash (тестировался на версиях 4.1.11(2), 4.2.24(1) и 4.2.45(1));
  • Установленные curlwgetunrar (опционально), и некоторые другие стандартные приложения.


Установка

  • Скачиваем крайнюю версию и распаковываем:
    $ cd /tmp
    $ wget https://github.com/tarampampam/nod32-update-mirror/archive/master.zip
    $ unzip master.zip; cd ./nod32-update-mirror-master/
  • Переносим набор скриптов в директорию недоступную «извне», но доступную для пользователя, который будет его запускать:
    $ mv -f ./nod32upd/ /home/
  • Переходим в новое расположение скриптов и выполняем их настройку (подробнее об этом в readme.md):
    $ cd /home/nod32upd/
    $ nano ./settings.cfg
  • Даем права на запуск скриптов:
    $ chmod +x ./*.sh
  • Проверяем наличие unrar, если планируем обновляться с официальных зеркал Eset NOD32:
    $ type -P unrar
  • Выполняем пробный запуск:
    $ ./update.sh

После всех этих манипуляций должны наблюдать что то похожее на:


Особенности

  • Комплектуется скриптом для автоматического получения рабочего ключа с «пиратских» ресурсов. ВНИМАНИЕ! ДАННЫЙ ФУНКЦИОНАЛ ТОЛЬКО ДЛЯ ОЗНАКОМЛЕНИЯ И ИЗУЧЕНИЯ! ВЫ САМИ НЕСЕТЕ ОТВЕТСТВЕННОСТЬ ЗА ЕГО ИСПОЛЬЗОВАНИЕ! ИСПОЛЬЗУЙТЕ ТОЛЬКО ЛЕГАЛЬНЫЕ И КУПЛЕННЫЕ ВАМИ КЛЮЧИ!
  • Если произошла ошибка при обновлении с сервера, который указан, например, в updServer0 — производится попытка обновиться с сервера, указанного в updServer1updServer2..updServer10;
  • Скачивает только обновленные файлы обновлений (проверка выполняется с помощью wget --timestamping);
  • Работает только с нужными типами обновлений, нужным языком и обновлениями только для нужного ПО (без этого размер базы обновлений составляет чуть более чем 5,2Гб, с указанием типов — 0,6Гб);
  • Умеет поддерживать в актуальном состоянии только лишь файл update.ver, не скачивая сами файлы обновлений (при этом зеркало работает, но загрузка происходит не с вашего сервера, а с сервера-источника обновлений);
  • В комплекте идет заготовка для веб-интерфейса зеркала обновления (директория ./webface).


Лицензия MIT
Copyright © 2014 <github.com/tarampampam>

Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:

Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.

ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.

Бонус ''Дистрибутив со встроенными настройками''
Тут всё очень просто. Кладем в одну папку 3 файла:


В config.small.xml указываем необходимые настройки:
<?xml version="1.0" encoding="utf-8"?>
<ESET>
 <SECTION ID="1000103">
  <SETTINGS>
   <PLUGINS>
    <PLUGIN ID="1000400">
     <PROFILES>
      <NODE NAME="Enable" VALUE="1" TYPE="DWORD" />
      <NODE NAME="Active" VALUE="@My profile" TYPE="STRING" />
      <NODE NAME="@My profile" TYPE="SUBNODE">
       <NODE NAME="UpdateType" VALUE="22" TYPE="DWORD" />
       <NODE NAME="SelectedServer" VALUE="%%url_updates_server%%" TYPE="STRING" />
       <NODE NAME="Username" VALUE="%%your_username%%" TYPE="STRING" />
       <NODE NAME="Password" VALUE="" TYPE="PASS" />
      </NODE>
     </PROFILES>
     <SETTINGS>
      <NODE NAME="RegistrationType" VALUE="0" TYPE="DWORD" />
      <SERVERS>
       <NODE NAME="Server_0" VALUE="%%url_updates_server%%" TYPE="STRING" />
      </SERVERS>
     </SETTINGS>
    </PLUGIN>
   </PLUGINS>
   <CLIENT>
    <NODE NAME="GraphicMode" VALUE="FFFFFFFF" TYPE="DWORD" />
    <NODE NAME="ShowSplash" VALUE="0" TYPE="DWORD" />
    <NODE NAME="SimpleMenu" VALUE="0" TYPE="DWORD" />
    <NODE NAME="AdvancedMenu" VALUE="1" TYPE="DWORD" />
   </CLIENT>
  </SETTINGS>
 </SECTION>
</ESET>

Где %%url_updates_server%% — в обоих случаях идентичны и равны адресу нашего сервера обновлений. Самый простой способ получить конфиг — Окно «ESET NOD32 Antivirus» → «Настройки» → «Импорт и экспорт параметров». Из получившего xml-файла удаляем всё, кроме необходимых настроек (благо все секции очень хорошо названы).

Далее скрипт установки install.cmd:
@echo off

title "Run ESET Nod32 Installer"
cls

set AppToRun=ESET_NOD32_Antivirus_4.2.71.3_(32-bit)_(rus).msi
set  CfgFile=config.small.xml

rem /qb - показывается процесс установки
rem /qn - тихий режим установки без gui

start "" "msiexec" /qb /package "%cd%\%AppPath%%AppToRun%" ADMINCFG="%cd%\%CfgPath%%CfgFile%"

@echo on


И всё это дело при помощи детища Евгения Рошала пакуется в SFX архив с параметрами:
Path=%TEMP%\Nod32Install\
Setup=%TEMP%\Nod32Install\install.cmd
Silent=1
Overwrite=1


Таким образом, при двойном клике по полученному бинарнику происходит тихая распаковка в %TEMP%\Nod32Install\, запускается install.cmd, который запускает установку ESET_NOD32_Antivirus_4.2.71.3_(32-bit)_(rus).msi с настройками из config.small.xml не спрашивая ничего у пользователя, но отображая процесс установки. Для малоопытных пользователей — самое то.




Если у вас есть какие-либо вопросы, но вы не можете оставлять комментарии к этому посту или написать мне в личку — пишите комментарии к этой записи.



Update: Пост был переписан 09.02.2015, т.к. его прошлая редакция потеряла актуальность в большей своей степени