суббота, 31 октября 2015 г.

Горячие клавиши WinBox.

  В линейке WinBox v.2.x горячие клавиши состояли из одной буквы. Например, при нажатии на  клавишу R происходило удаление записи,  при нажатии на клавишу C - открывалось окно для внесения комментарий в правило, включить правило - E, выключить - D. Это было не безопасно, так как случайно нажав клавишу можно удалить нужны данные. С выпуском  WinBox v.3.x(пока еще релиз кандидат) эту оплошность пофиксили.
  По состоянию на WinBox v.3.0rc17 работают такие горячие клавиши:
Ctrl+Tab - переключение между вкладками в окне, между окнами которые не имеют вкладок;
Ctrl+F6 - переключение между вкладками вперед;
Ctrl+Shift+F6 переключение между вкладками назад;
SHIFT+INSERTCtrl+V - вставить (в полях ввода текста);
CTRL+INSERTCtrl+C - копировать (в полях ввода текста);
SHIFT+DELETECtrl + X - вырезать (в полях ввода текста);
Ctrl+M - добавить комментарий;
Ins - создать;
Del - удалить;
Ctrl+F - поиск(сочетание работает с любого места экрана, ставит курсор в поле поиска активной вкладки);
Ctrl+G - поиск далее;
Tab, стрелка вверх, стрелка вправо, стрелка влево, стрелка вниз - перемещение между элементами в окне;
Ctrl+A - выбрать все;
Ctrl+E - включить;
Ctrl+D - выключить.


  Горячие клавиши всегда можно посмотреть в контекстном меню:

Контекстное меню WinBox
  Знаете еще горячие клавиши, которые работают в WinBox, добавляйте в комментариях.

пятница, 30 октября 2015 г.

Пускаем компьютер из LAN-сети в Интернет через другого провайдера без прероутинга.

  У нас есть роутер к которому подключено два провайдера, нужно один компьютер из нашей внутренней сети пустить через другого провайдера в Интернет, обычно это делается прероутингом в Mangle:
add action=mark-routing chain=prerouting comment="9 na wan2" disabled=yes \
    new-routing-mark=markName src-address=192.168.0.12
  С перенаправлением в указанный маршрут
/ip route
add comment=wan2_mark distance=1 gateway=1.1.1.1 routing-mark=markName

  Но можно поступить проще, имеем маршрут:

/ip route add gateway=1.1.1.1 routing-mark=markName 
воспользуемся route rule:
/ip route rule add src-address=192.168.0.12 action=lookup-only-in-table table=markNmae

Доступ в Mikrotik по двум и более WAN одновременно.

На нашем устройстве два или более провайдера интернет(WAN). Нам нужно что-бы наше устройство было доступно и с одного и с другого внешнего IP провайдеров одновременно.
[admin@mikrotik] /ip firewall mangle> print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=input action=mark-connection new-connection-mark=ISP 1 -> Input passthrough=no dst-address=172.25.25.247 in-interface=ether1
1 chain=output action=mark-routing new-routing-mark=ISP 1 passthrough=no connection-mark=ISP 1 -> Input
2 chain=input action=mark-connection new-connection-mark=ISP 2 -> Input passthrough=no dst-address=192.168.99.2 in-interface=ether2
3 chain=output action=mark-routing new-routing-mark=ISP 2 passthrough=no connection-mark=ISP 2 -> Input
4 chain=input action=mark-connection new-connection-mark=ISP 3 -> Input passthrough=no dst-address=192.168.100.2 in-interface=ether3
5 chain=output action=mark-routing new-routing-mark=ISP 3 passthrough=no connection-mark=ISP 3 -> Input
  Правило 0
  Если в пакете пришедшем на первый интерфейс (ISP 1) в адресе назначения указан IP адрес 172.25.25.247(ISP 1, ip от провайдера), то маркируем соединение именем (ISP 1 -> Input)
  Правило 1
  Если исходящий пакет принадлежит соединению с маркировкой (ISP 1 -> Input), то для него используем маршрут ISP 1
  Тем самым маршрутизатор знает, что если его (пингуют или любой входящий трафик) с провайдера ISP 1, то ответ вернёт он через провайдера ISP 1

  Соответственно нужно создать нужные нам маршруты:
add comment=ISP1_mark distance=1 gateway=192.168.111.1 routing-mark=ISP 1
add comment=ISP2_mark distance=1 gateway=82.117.240.1 routing-mark=ISP 2
где  gateway - шлюз по-умолчанию вашего провайдера.

Доступ из одной подсети в другую есть, наоборот нет.

  Вот такая задача:
Есть микротик, в нем 2 бриджа и один ван:
1 бридж: 2 и 3 порт (192.168.25.0/24)
2 бридж: 4 и 5 порт (192.168.36.0/24)
ван 1 порт.
У одной сети и у второй есть инет через ван. Нужно сделать что б доступ с 192.168.25.0/24 на 192.168.36.0/24 был, а наоборот не был. Типа так, как будто к микротику во второй бридж подключил роутер и на нем за натом спрятал подсеть.
  Это нужно для того, что бы разделить общественную(192.168.36.0/24) и домашнюю сеть(192.168.25.0/24) в небольшой локальной домовой сети.  Но так как администратор сети сидит в 192.168.25.0/24 он должен иметь возможность подключатся к общественной сети, в то же время люди с общественной сети не должны получать доступ к домашним устройствам администратора.

  Для начала нужно занатить две подсети:
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1 src-address=192.168.36.0/24
add action=masquerade chain=srcnat src-address=192.168.25.0/24
  Для общественной сети натятся пакеты только на ван интерфейс. Для локальной - на все интерфейсы.
  Есть два варианта решения проблемы:
/ip firewall mangle
chain=prerouting action=mark-connection new-connection-mark=36
      passthrough=yes dst-address=192.168.25.0/24 in-interface=bridge2 log=no
      log-prefix=""
помечаем пакеты с общественной подсети

/ip firewall filter
chain=forward action=drop connection-mark=36 log=no log-prefix=""
и баним их. И второй вариант проще:
/ip firewall filter
add action=drop chain=forward connection-state=new dst-address=192.168.25.0/24 src-address=192.168.36.0/24 
  Просто баним все новые пакеты, которые идут с общественной подсети, пакеты установившиеся пропускаем, а все пакеты с домашней подсети считаются установившимися так как прошли через правило ната.
  Подробнее:
  Каждое из сетевых соединений Mikrotik относит к одному из 4 состояний:
New – Новое соединение. Пакет, открывающий новое соединение, никак не связанное с уже имеющимися сетевыми соединениями, обрабатываемыми в данный момент маршрутизатором.
Established – Существующее соединение. Пакет относится у уже установленному соединению, обрабатываемому в данный момент маршрутизатором.
Related – Связанное соединение. Пакет, который связан с существующим соединением, но не является его частью. Например, пакет, который начинает соединение передачи данных в FTP-сессии (он будет связан с управляющим соединением FTP), или пакет ICMP, содержащий ошибку, отправляемый в ответ на другое соединение.
Invalid – Маршрутизатор не может соотнести пакет ни с одним из вышеперечисленных состояний соединения.
спасибо форуму

суббота, 10 октября 2015 г.

Поиск нужного address-list.

Скрипт найдет нужный адрес-лист и выведет его название:
:put [/ip firewall address-list get value-name=list [find address=192.168.x.x]] 

пятница, 9 октября 2015 г.

Таймер в скрипте.

   Таймера  в Микротике пока не придумали, можно воспользоваться шедуллером, и запускать скрипт с интервалом, но иногда нужно что-бы таймер обрабатывался в скрипте. Например, мне нужно было, что бы в скрипте на определенном моменте засекалось 60 минут, и в течении этого времени происходила пинг-проверка работоспособности сети wifi, когда это время истекало, скрипт должен был принудительно подключать роутер к другой wifi сети.
В итоге вышло такое:
:global nameADR23;
:global perviy23;
:do {:global nameADR23 [/ip firewall address-list get value-name=list [find address=12.12.12.12]]} on-error={:if ($perviy23=true) do={set $perviy23 ""; set $nameADR23 ""; log info 146} else={:set nameADR23 ""; /ip firewall address-list add dynamic=yes address=12.12.12.12 list=timer23 timeout=0:01:00; set $perviy23 true}};
Создаются две глобальные переменные. Потом проверяется наличие некого списка адресов в  address-list, если его нет, он создается с нужным вам таймаутом(в примере 1 минута). При следующем запуске скрипта, он проверит наличие этого адрес-листа, если он еще есть(время не прошло), просто запишет в переменную nameADR23 имя адрес-листа(timer23), но если время истечет, адрес-лист удалится, извлечь имя его мы не сможем, и если это будет не первый запуск(который непосредственно создает адрес лист) то мы считаем что 1 минута прошла, и выполняем действие log info 146, и очищаем наши переменные(set $perviy23 ""; set $nameADR23 ""). Вот такой работоспособный скрипт (версия 6.18).

Отладка скриптов.

  Как таковой отладки в RouterOS нет. Но можно воспользоваться командой
/system script> print from=<your script name>
которая подсветит ваши ошибки скрипта в терминале.
  Так-же вы можете поместить скрипт в { } и скопировать его в терминал. Если этого не сделать, то на локлаьные переменные будет ругаться. Ну и это можно обойти, сделал все локальные переменные - глобальными.