экспорт конфигурации в текстовый файл "file.rsc":
export file=file.rsc
подсветка синтаксиса скрипта с именем "noip" в терминале:
/system script print from=noip
отправка смс с usb модема подключенного к mikrotik:
/tool sms send usb2 "номер" message="text"
запретим пользователям использовать свои IP адреса
В WinBox, в DHCP ставим галочку "add arp for leases"
на интерфейсе ARP: выбираем "reply-only"
со статикой сосут лапу!
хотя с PPPOE не срабатывает.
Задача - ограничить использование wireless сети mikrotik-а только определенным устройствам на основе их аппаратных адресов.
Заносим в аксес лист интерфейса устройство с определенным адресом
interface wireless access-list add interface=wlan1 mac-address=00:11:22:33:44:55 comment="my pc"
В настройках беспроводной сети снимаем Default Authenticate
interface wireless set 0 default-authentication=no disabled=no
P.S. Можно и через ARP сделать с привязкой IP+MAC
Определяем в сети роутеры
Все IP адреса, которые сидят за роутерами автоматом попадут в адрес лист routers, что делать дальше - на Ваше усмотрение.
ip firewall mangle add action=add-src-to-address-list chain=prerouting in-interface=ether01 ttl=equal:63 address-list=routers
ip firewall mangle add action=add-src-to-address-list chain=prerouting in-interface=ether01 ttl=equal:127 address-list=routers
Спрятать сеть от фильтров TTL провайдера
Иногда полезно. Правило поднимаем в самый верх
ip firewall mangle add action=change-ttl chain=prerouting new-ttl=increment:1 passthrough=yes
Блокируем порты спамеров
Блокируем порты в фильтрах
ip firewall filter add chain=forward port=t dst-port=25 src-address-list=spamm action=drop
Добавляем в адрес лист спамеров на 30 дней
ip firewall filter add chain=forward protocol=tcp dst-port=25 connection-limit=30,32 limit=50,5 src-address-list=!spamm action=add-src-to-address-list address-list-timeout=30d
Fail2Ban для Mikrotik
Взято с официального сайта
Динамически банит адрес на 1 час.
ip firewall filter
add chain=input protocol=tcp dst-port=22 src-address-list=ssh_blacklist action=drop \
comment="drop ssh brute forcers" disabled=noadd chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage3 action=add-src-to-address-list address-list=ssh_blacklist \
address-list-timeout=1h comment="" disabled=noadd chain=input protocol=tcp dst-port=22 connection-state=new \
src-address-list=ssh_stage2 action=add-src-to-address-list address-list=ssh_stage3 \
address-list-timeout=20s comment="" disabled=noadd chain=input protocol=tcp dst-port=22 connection-state=new src-address-list=ssh_stage1 \
action=add-src-to-address-list address-list=ssh_stage2 address-list-timeout=20s comment="" disabled=noadd chain=input protocol=tcp dst-port=22 connection-state=new action=add-src-to-address-list \
address-list=ssh_stage1 address-list-timeout=20s comment="" disabled=no
Перезагрузка по расписанию
Я делаю дабы перерегистрировать 4G модем в сети оператора, так как практика показывает, модем после длительной работы ни с того ни с сего переходит в 3G сеть, и как следствие ухудшается связь.
/system script add name=reboot policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api source="/system reboot"
/system scheduler add interval=1d name=reboot24h on-event=reboot policy=ftp,reboot,read,write,policy,test,winbox,password,sniff,sensitive,api start-date=jun/24/2014 start-time=08:00:00
каждый день, в 08:00 маршрутизатор перегрузится сам
Watchdog
Данная служба в роутерах Mikrotik реализована аппаратно. Полезна в том случае, если зависает сам роутер
system watchdog set no-ping-delay=10m watch-address=8.8.8.8
Пингуем адрес dns googl-а каждые 10 минут, в случае отсутствия пинга - перегружаем устройство.
Если в поле watch-address будет none, то Watchdog будет опрашивать ядро системы и в случае зависания RouterOs перезагрузит систему.
system watchdog set no-ping-delay=10m watch-address=none
Netwatch
Отличие Netwatch от Watchdog в том, что первая позволяет делать произвольные действия с помощью встроенного скриптового языка. Кроме того, скриптов может быть несколько и netwatch позволяет контролировать не только падение, но и поднятие определенного адреса (up-script).
Пример скрипта, который при отсутствии связи до 8.8.8.8 дергает внешний интерфейс с 10 секундной паузой. Проверка доступности гугл адреса производится каждые 5 минут.
/tool netwatch
add down-script="/interface ethernet set ether01 disabled=yes\r\
\ndelay 10\r\
\n/interface ethernet set ether01 disabled=no" host=8.8.8.8 interval=5m \
timeout=9s
Запрет посещения определенного сайта одной строкой.
/ip firewall filter add action=drop chain=forward content="Host: odnoklassniki.ru" protocol=tcp src-address=192.168.100.254 out-interface=eth01
При таком подходе режется только один исходящий пакет, а как следствие, никаких входящих пакетов нет и их не надо блокировать. Можно так же изменить правило так, чтобы локальные IP, с которых заходили на определенные сайты, заносились в адрес-лист.
Более правильное решение, помогающее позволить беспроблемно заходить на сайты, имеющие на своей странице какие-то встроенные инструменты комментирования с данного сайта на блокированный ресурс. Итак, чтобы проблем не было, блокируем правильно:
/ip firewall filter add chain=forward protocol=tcp content=odnoklassniki.ru src-address=192.168.100.254 action=reject reject-with=tcp-reset
Блокировка социальных серей через L7
ip firewall layer7-protocol add name=social regexp="^.+(vk.com|vkontakte|ok.ru|odnoklassniki|odnoklasniki|facebook|youtube|loveplanet).*\$"
ip firewall filter add action=drop chain=forward comment="Block_social" layer7-protocol=social src-address-list=Block_social
Смена MAC адреса интерфейса Mikrotik
в терминале вводим
/interface ethernet set 0 mac="00:01:02:03:04:05"
где 0 - номер интерфейсного порта маршрутизатора
PPtP, L2TP Dual Access
Если у Вас Dual Access и наблюдается периодические обрывы на интерфейсе, то необходимо:
/ip route rule add action=lookup dst-address=10.10.10.10/32 table=vpn
/ip route add distance=1 dst-address=10.10.10.10/32 gateway=10.10.10.254 routing-mark=vpn
/ip route add distance=1 dst-address=0.0.0.0/0 gateway= 10.10.10.254
Add Default Route - в положение "ВЫКЛ"
10.10.10.10 - адрес vpn сервера
10.10.10.254 - шлюз, полученный от провайдера
Скрипт для отправки электронной почты после перезагрузки роутера с учетом синхронизации времени NTP
:while ( [/system ntp client get status]!="synchronized" ) do={ :delay 10s }
:delay 10s
/log info "time updated; uptime: $[/system resource get uptime]"
:local es "$[/system identity get name] rebooted on $[/system clock get date] $[/system clock get time] uptime $[/system resource get uptime]"
:delay 90s
:local eb "Log contents (with 90 seconds delay):\r\n"
:foreach le in=[/log print as-value] do={
:set eb ($eb.[:tostr [($le->"time")]]." ".[:tostr [($le->"topics")]].": ".[:tostr [($le->"message")]]."\r\n")
}/tool e-mail send to="enter_your_email_here@example.com" subject=$es body=$eb
Бекап конфига и отправка по FTP
{
local username "никнейм"
#ftp account
local ftphost "имя сервера"
local ftpuser "логин"
local ftppassword "пароль"
local ftppath "/pub/mikrotik"
#create full system backup files
/system backup save name="$username.backup"
:delay 30s;
#create config export files
/export compact file="$username.rsc"
:delay 30s;
# upload the system backup
:log info message="Uploading system backup"
/tool fetch address="$ftphost" src-path="$username.backup" user="$ftpuser" mode=ftp password="$ftppassword" dst-path="$ftppath/$username.backup" upload=yes
:delay 30s;
# upload the config export
:log info message="Uploading config export"
/tool fetch address="$ftphost" src-path="$username.rsc" user="$ftpuser" mode=ftp password="$ftppassword" dst-path="$ftppath/$username.rsc"upload=yes
:delay 30s;
# find file name $username- then remove
:foreach i in=[/file find] do={ :if ([:typeof [:find [/file get $i name] "$username"]]!="nil") do={/file remove $i}; }
:log info message="Configuration backup finished.";
}
Доступ к Web серверу находящемуся во внутренней сети по внешнему IP, более подробно >>тут<<
Дадим доступ к Web серверу из внешней сети:
/ip firewall nat add chain=dstnat dst-address=77.34.128.80 protocol=tcp dst-port=80 action=dst-nat to-address=192.168.1.100 to-ports=80
обращаю внимание, что тут мы указываем внешний ip адресс куда приходит запрос, а не интерфейс как обычно!
и делаем маскарадинг из локальной сети к адресу Web сервера
/ip firewall nat add chain=srcnat src-address=192.168.1.0/24 dst-address=192.168.1.100 protocol=tcp dst-port=80 out-interface=bridge-Internal action=masquerade
вот и все :)
При динамическом внешнем IP
in-interface=интерфейс dst-address-type=local
/ip firewall nat
add action=dst-nat chain=dstnat comment="Nxt API portmap" dst-port=7876 in-interface=ether1 protocol=tcp to-addresses=192.168.1.150
add action=dst-nat chain=dstnat comment="Nxt API portmap local" dst-address-type=local dst-port=7876 in-interface=brg_home_all protocol=tcp to-addresses=192.168.1.150
add action=masquerade chain=srcnat comment="Nxt API portmap local masq" dst-address=192.168.1.150 dst-port=7876 protocol=tcp src-address=192.168.1.0/24
Как автоматически передать и выполнить скрипт с одного роутера на другой?
Для этого в планировщике первого роутера выполняем скрипт
/tool fetch mode=ftp upload=yes address=10.0.0.1 port=2121 user=admin password=admin ascii=yes src-path=1.txt dst-path=1.auto.rsc где по фтп передается файл 1.txt, в котором содержится сценарий для второго микротика, и в процесе передачи переименовывается в 1.auto.rsc. Как только файл с раширением .auto.rsc попадет на второй микротик, он тут же выполнится.
Как удалить лог
с начала установим размер лога 1 строка, затем размер лога 1000 строк (максимум размер лога 65535 строк)
/system logging action
set memory memory-lines=1
/system logging action
set memory memory-lines=1000
Как организовать работу нескольких web-серверов за микротиком? (где-то нарыл, сам не проверял!)
/ip proxy
set enabled=yes max-cache-size=none
/ip dns static
add address="вебсервер1" name=www.porno.com
add address="вебсервер2" name=www.cisco.com
/ip firewall nat
add action=redirect chain=dstnat dst-address="публичный айпи" dst-port=80 \
protocol=tcp to-ports=8080Прокси защитить снаружи.
еще одно решение
У нас есть один внешний IP, за которым мы хотим поместить несколько WEB-серверов(в данном случае 3, с 3 разными доменами на них):
123.com@192.168.0.2
abc.com@192.168.0.3
456.com@192.168.0.4
Настраиваем наш прокси-сервер:
/ip web-proxy
set enabled=yes src-address=0.0.0.0 port=8080 hostname="your.proxy" \
transparent-proxy=yes parent-proxy=0.0.0.0:0 \
cache-administrator="webmaster" max-object-size=4096KiB cache-drive=system \
max-cache-size=unlimited max-ram-cache-size=unlimited
/ip web-proxy access
add dst-port=23-25 action=deny comment="block telnet & spam e-mail relaying" \
disabled=no
add dst-port=80 action=allow comment="Enable Http Connection" disabled=no
Настраиваем статические ДНС записи:
/ip dns static add name=123.com address=192.168.0.2
/ip dns static add name=abc.com address=192.168.0.3
/ip dns static add name=456.com address=192.168.0.4
/ip dns static add name=www.123.com address=192.168.0.2
/ip dns static add name=www.abc.com address=192.168.0.3
/ip dns static add name=www.456.com address=192.168.0.4
Конфигурируем NAT для перенаправления на наш веб-прокси:
/ip firewall nat
add chain=dstnat in-interface=outside dst-address=xxx.xxx.xxx.xxx protocol=tcp \
dst-port=80 action=redirect to-ports=8080 comment="" disabled=no
Трафик для 123.com будет выглядеть так:
Интернет -> xxx.xxx.xxx.xxx:80 ---> xxx.xxx.xxx.xxx:8080 -> 192.168.0.2:80
Веб-прокси будет перенаправлять трафик 123.com на внутренний адрес IP-192.168.0.2.
Не забываем оставить доступ к нашему прокси-серверу по определенным URL(нашим легитимным) в противном случае наш маршрутизатор может быть использован для перенаправления трафика на сайты за пределами сети:
/ip proxy access
add dst-port=80 dst-host="123.com" action=allow disabled=no
add dst-port=80 dst-host="abc.com" action=allow disabled=no
add dst-port=80 dst-host="456.com" action=allow disabled=no
add action=deny disabled=no
Порты объединены в бридж. В арп таблице маки показываются на интерфейсе бридж.
Есть ли возможность в просмотреть с какого порта роутер услышал мак?
/interface bridge host print Или в меню слева "Bridge" закладка "Hosts".
Как сделать чтоб SSID микротика постоянно был на первом месте в списке сетей?
В поле SSID перед именем сети поставить пробел. На версии 5.x это можно сделать только через терминал. Так же при экспорте конфигурации пробел пропадает.
Как вывести в лог скриптом сообщение другого цвета?
BLACK
log info "blah blah this log is in black"
BLUE
log warning "blah blah this log is in blue"
RED
log error "blah blah this log is in red"
Как подключить юзера по vpn с доступом в локальную подсеть, при условии, что он находиться в той же подсети?
1) Включаем vpn сервер, добавляем юзера, ip vpn сервера из той же сети, что и Ether2-master-local, в моем случае Ether2-master-local = 192.168.1.1; vpn server=192.168.1.30 vpn client=192.168.1.35 Все остальные настройки vpn оставлены по умолчаниям, как в микротике так и в винде, если vpn клиенту не нужен интернет с тика, то в свойствах подключания vpn галочку использования основного шлюза в удаленной сети снимаем.
2) На интерфейсе Ether2-master-local переключаем ARP из положения enable в proxy.
3) Подключаемся извне к тику по vpn, соединение устанавливается.
4) Теперь с любого хоста в локалке за тиком из сети 192.168.1.0/24 можем пинговать ip подключенного клиента vpn - 192.168.1.35
5) Так же, с удаленного клиента 192.168.1.35 можем пинговать любой хост в локальной сети, например 192.168.1.7 обмен пингами теперь двусторонний.Самое главное удалось этого добиться без mangle, статических роутов на тике и на клиенте, без адрес листов. Теперь все работает как и положено.
Как при резервировании канала, при переключении сбрасывать установленные UDP-соединения?
:foreach i in=[/ip firewall connection find dst-address~":2227" protocol~"udp"] do={ /ip firewall connection remove $i } При ненадобности номер порта можно и не упоминать.
Как пустить отдельную машину только через одного определенного провайдера не использую прероутинг?
/ip route add gateway=1.1.1.1 routing-mark=markName
/ip route rule add src-address=192.168.0.12 action=lookup-only-in-table table=markNmae
Где утилита Winbox хранит свои настройки?
Windows XP - C:\Documents and Settings\%USER%\Application Data\Mikrotik\
Windows 7 - C:\Users\%USER%\AppData\Roaming\Mikrotik\
Как сделать обработку ошибок в скрипте?
:do {
:resolve domena.net
} on-error={
/log warning ("Error")
}
Как вызвать доп-процедуру с переменной?
[admin@MikroTik] > :global fun do={:put "YES!!!"}
[admin@MikroTik] > $fun
YES!!!
Как скриптом завершить работающий скрипт?
/system script job remove $id
Есть /ip dhcp-server lease статические записи, нужно выбрать по host-name все записи у которых встречается "pak"?
/ip dhcp-server lease print where !dynamic and host-name~"pak"
Как отключить ненужные записи в лог?
В System - logging и в основном правиле инфо добавляем две строки исключающие ненужные записи(правило со знаком "!")
Включение компьютера по сети (Wake-on-Lan)
tool wol interface=bridge-Internal mac=ff:ff:ff:ff:ff:ff
Скрытие Mikrotik в сети (не будет автоматом отображаться в winbox)
/ip neighbor discovery set ether8 discover=no
Тулза позволяющая подключиться к ненастроенному Mikrotik'у по MAC
/tool mac-server
Режем ростелекомовский multicast switch chip'ом
Multicast приходит на ether1. В данном примере multicast не будет транслироваться по wi-fi. Если необходимо зарезать на входе, то new-dst-port=eher1.
/interface ethernet switch rule
add dst-address=239.0.0.0/8 dst-port=2020 new-dst-ports=ether2,ether3,ether4,ether5
ports=ether1 protocol=udp switch=switch1
Спрашиваем пользователя в командной строке Mikrotik и обрабатываем его ответ
Возникла необходимость при выполнении скрипта через консоль (import file=) спросить пользователя, хочет он это делать или нет, например: "Install Extra Domain (Block Skype, Hotmain, Dr. Watson and/or Error Reporting) (Y\N) ? : " и пользователю нужно нажать нужную кнопку.
Полазив по wiki, я не нашёл как такое реализовать.
Было предложено решение:
:put [terminal inkey ]
И пример использования:
:put "Install Extra Domain (Block Skype, Hotmain, Dr. Watson and/or Error Reporting) (Y\\N):"
:local key [:terminal inkey]
Сначала выводится вопрос в терминал и ожидание ввода клавиши. После нажатия клавиши Y или N сохраняется её ASCII представление в переменную key. И конструкцией if ($key = 121) do={} выполняется определенное действие в зависимости от нажатой клавиши.
