0,0
рейтинг
2 июля 2014 в 17:58

Администрирование → Настройка роутера Mikrotik для различных задач в SOHO tutorial

Данная статья является калькой с написанной мной собственноручно внутренней инструкции, по которой мы настраиваем новые маршрутизаторы в фирме. Пункты будут расположены в более-менее хронологическом порядке, но каждый из них является самостоятельной мини-инструкцией к одному из используемых в нашей компании сервисов.

1. Включение, начальная настройка


Первым делом надо подключиться к устройству. По умолчанию, конфигурация на маршрутизаторе настроена на подсеть 192.168.88.0/24. Открываем в браузере адрес, скачиваем и сохраняем на компьютере, Winbox.exe.



Запускаем Winbox, Напротив Connect to нажимаем кнопку "…", и спустя несколько секунд должен появится в списке ваш маршрутизатор.



Два раза щелкаем мышкой по МАС-адресу и подключаемся с именем admin без пароля.
При первом входе, система предупредит что был запущен автоматический скрипт настройки маршрутизатора. Нажимаем кнопку Remove Configuration:



После этого дожидаемся, пока консоль Winbox закроется, и спустя несколько секунд опять запускаем Winbox (от туда куда вы её сохранили) и опять подключаемся по MAC-адресу.
Подключившись, выбираем слева Interfaces и удаляем лишние интерфейсы — VLAN, Bridge. Заходим в настройки каждого интерфейса (на роутере компании их всего 5) и отключем Master-port и proxy-arp, приводя настройки к следующему виду:



2. Выдача IP


Заходим в IP — Addresses. Выдаем нужным интерфейсам нужные адреса. В случае использования роутера в сети Эскорт, к нему подключаются 2 интернет-провайдера и внутренняя сеть. Вторая внутренняя сеть формируется через VPN. Указываем каждому интерфейсу нужный IP.
[admin@Mikrotik] /ip address> print
Flags: X - disabled, I - invalid, D - dynamic 
 #   ADDRESS            NETWORK         INTERFACE                                
 0 I ;;;                        , !!!                          
     10.0.33.1/24       10.0.33.0       ether4-hosting-network                   
 1   22.22.22.17/29   22.22.22.16   ether2-gateway2                          
 2   11.11.11.1/28  11.11.11.0  ether1-gateway1                          
 3   192.168.3.101/22   192.168.0.0     ether3-internal-network                  
 4 I 192.168.4.2/22     192.168.4.0     ether4-hosting-network                   


3. Маршрутизация


3.1. Создание ведущего и ведомого маршрутов

Заходим в IP — Routes. По умолчанию, вместо хостов для маршрутизации используются интерфейсы. Рекомендуется удалить все статические маршруты, а динамические после смены статики изменятся сами. Внимание: чтобы все безболезненно удалять, необходимо подключаться к роутеру по локальной сети, без использования маршрутов, иначе при удалении основного связь прервется. Далее создаем новые маршруты: в поле Dst.Address указываем 0.0.0.0/0, в поле Gateway прописываем IP основного шлюза. Не забываем про дистанцию — у какого маршрута она короче, тот будет основным. В целом настройки маршрута должны выглядеть вот так:



Для внешних интерфейсов в качестве шлюзов указываем 11.11.11.11 с дистанцией 4 и 22.22.22.22 с дистанцией 3.



После добавления трех маршрутов (2 для внешних каналов и 1 для внутренней сети) роутер можно включать в сеть и подключаться по IP 192.168.3.101, используя внутренний IP.

3.2. Создание табличной маршрутизации

Созданная выше конфигурация позволяет создать 2 внешних интерфейса, из которых в единицу времени может работать только один — то есть постоянно работает тот, у которого дистанция меньше, а у которого она больше — будет работать лишь тогда, когда из первого интерфейса выдернут кабель. Нас это по понятным причинам не устраивает — нам нужна одновременная работа двух шлюзов. Для этого нужно научить роутер возвращать трафик на тот интерфейс, с которого пришел запрос. Делается это созданием двух дополнительных маршрутов и настройкой файерволла. Для начала создадим необходимые маршруты. Созданные ранее маршруты тоже пригодятся, но их можно склонировать, т.к. изменяться они будут незначительно. Для этого щелкаем на созданный ранее маршрут, жмем кнопку Copy и добавляем Routing Mark — маркируем маршруты именем интерфейса соответственно. Я назвал их to_ISP1 и to_ISP2




Далее заходим в
IP — Firewall — Mangle


Создаем правила:
Вкладка General:
Chain: prerouting
In-interface: указываем один из входящих интерфейсов
Connection Mark: no-mark
Далее, на вкладке Action:
Action: mark connection
New Connection Mark: ISP1_conn
Passthrough: убираем галку.


Картинки для закрепления материала




Эти действия нужно повторить дважды — для 2 внешних интерфейсов (марки ISP1_conn и ISP2_conn соответственно).
Далее нужно создать еще 2 правила, которые будут направлять исходящий трафик с пометками ISP1_conn и ISP2_conn на помеченные выше маршруты. Создаем правило:
General:
Chain: output
Connection Mark: ISP1_conn
Action: mark routing
New Routing Mark: to_ISP1
Passthrough: убираем галку.


Картинки





4. Балансировка маршрутов в режиме Master-Slave


Итак, мы добились наличия двух одновременно работающих шлюзов, один из которых имеет высший приоритет, нежели второй. Проблема данной настройки в том, что переключение между шлюзами будет осуществляться исключительно при падении физического линка на интерфейсе устройства. Но бывают и другие ситуации: кончились деньги на счете, проблемы на стороне провайдера и прочее — ситуации, при которых даже основной шлюз доступен, но дальше него трафик не идет и штатно в этом случае переключение основного шлюза осуществлено не будет. Для автопереключения необходимо использовать функцию Netwatch, которая следит за наличием трафика на интерфейсах и переключает трафик в зависимости от правил. Настройка данного функционала состоит из 3 этапов.

4.1. Создаем скрипты переключения

Заходим в System — Scripts. Создаем 4 скрипта с именами ISP1-DOWN, ISP1-UP, ISP2-DOWN, ISP2-UP. Всем скриптам выдаем максимальные права.
Содержимое скриптов
ISP1-DOWN:
/ip route disable [find dst-address=0.0.0.0/0 and gateway=11.11.11.11 and distance >=4];

ISP1-UP:
/ip route enable [find dst-address=0.0.0.0/0 and gateway=11.11.11.11 and distance >= 4];

ISP2-DOWN:
/ip route disable [find dst-address=0.0.0.0/0 and gateway=22.22.22.22 and distance >=3];

ISP2-UP:
/ip route enable [find dst-address=0.0.0.0/0 and gateway=22.22.22.22 and distance >=3];


4.2. Создаем правила Netwatch

Заходим в Tools — Netwatch
Создаем новое правило:

host: 8.8.4.4
Interval: 00:00:10
timeout: 1000ms
Up: ISP2-UP
Down: ISP2-DOWN
и второе правило:
host: 8.8.8.8
Interval: 00:00:10
timeout: 1000ms
Up: ISP1-UP
Down: ISP1-DOWN

Картинки




4.3. Создаем постоянные независимые маршруты


До каждого из хостов (8.8.8.8 и 8.8.4.4) прописываем уникальный маршрут с пониженной дистанцией через разные шлюзы (11.11.11.11 и 22.22.22.22).



Проверить работу netwatch можно, разорвав логический (не физический) линк на одном из внешних интерфейсов. В моей фирме для этого использовался управляемый коммутатор, на котором тушился несмежный с роутером порт. Таким образом, пинг до хоста 8.8.8.8 обрывался, но физический линк был активен. После прекращения пинга Netwatch тушил необходимые маршруты и внутренняя сеть получала доступ в интернет через резервный интерфейс.

5. Создаем NAT


Заходим в IP — Firewall, переходим на вкладку NAT
Создаем 2 правила для каждого из внешних интерфейсов:
Chain: srcnat
Out-Interface: указываем нужный внешний интерфейс
Action: masquerade

Картинка


Проверить NAT можно, пустив ping на один из сайтов в интернете с компьютера, подключенного к внутреннему интерфейсу роутера. Если отключать одно из двух правил NAT на роутере, можно увидеть, как меняется трассировка до выбранного хоста в интернете.

6. Создаем VPN-сервер


6.1. Создаем нужный нам пул IP-адресов.

В сети фирмы было решено использовать подсеть 192.168.168.0/22, с адресацией клиентов, начинающейся со 192.168.170.2 и адресом шлюза (самого роутера) 192.168.170.1
Заходим в IP — Pool и создаем новый пул vpn-pool с диапазоном 192.168.170.2-192.168.171.254:

6.2. Включаем PPTP-сервер

Заходим в пункт меню PPP, далее на вкладке Interfaces находим кнопку PPTP Server. Ставим галки Enabled, mschap2 и выбираем Default Profile: default-encoding.


6.3. Настраиваем шифрование

Переходим на вкладку PPP Profile. На вкладке General указываем Local Address: 192.168.170.1, Remote Address: vpn-pool. На вкладке Protocols на опции Use Encryption ставим вариант ответа Yes.

6.4. Создаем аккаунты

Переходим на вкладку Secrets. Создаем пользователя:
Name: указываем логин
Password: Указываем пароль
Service: any
Profile: default-encryption
Local Address: 192.168.170.1
Remote Address: указываем, если необходимо, адрес из диапазона, созданного в vpn-pool. Если не указать адрес, то при подключении VPN будет выдаваться первый свободный.

Картинка


6.5. Пакетное создание учетных записей

Для пакетного создания секретов (учетных записецй) VPN можно использовать скрипт.
Необходимо зайти в System — Scripts, нажать «создать новый» и вставить туда нужный нам текст скрипта.


Текст скрипта
:global content [/file get [/file find name=vpnusers.txt] contents] ;
:global contentLen [ :len $content ] ;

:global lineEnd 0;
:global line "";
:global lastEnd 0;


:do {
       :set lineEnd [:find $content "\r\n" $lastEnd ] ;
       :set line [:pick $content $lastEnd $lineEnd] ;
       :set lastEnd ( $lineEnd + 2 ) ;

       :local tmpArray [:toarray $line] ;
	:if ( [:pick $tmpArray 0] != "" ) do={
	:put $tmpArray;
         /ppp secret add name=[:pick $tmpArray 0] password=[:pick $tmpArray 1] \
             local-address=[:pick $tmpArray 2] remote-address=[:pick $tmpArray 3] \
             profile=[:pick $tmpArray 4] service=[:pick $tmpArray 5];
}
} while ($lineEnd < $contentLen)


После создания скрипта достаточно создать файл, в котором придерживаться следующего синтаксиса:

логин,пароль,IP_шлюза,IP_клиента,тип_шифрования,сервис

Готовый файл должен выглядеть примерно так


Прошу обратить внимание, что последняя строка пустая. Если ее не оставить пустой, то последняя заполненная строка не будет обработана.
Далее нужно открыть пункт меню Files. Cозданный файл необходимо перетащить мышью в полученное окно. Файл обязан называться vpnusers.txt, иначе скрипт не сработает.
После этих приготовлений можно заходить в System — Scripts, выделять мышью нужный нам скрипт и нажимать Run Script:



Как результат работы скрипта, в PPP — Secrets можно видеть добавившиеся учетные записи



7. Настройка SSTP


Для работы SSTP требуются сертификаты. Я использовал самоподписанные сертификаты, выданные оснасткой OpenVPN. Для получения сертификатов не нужно ставить все компоненты,
достаточно только указанные на скриншотах



Далее, запускаем cmd от имени администратора и переходим в каталог c:\Program Files\OpenVPN\easy-rsa\ (либо Program Files (x86), если вы поставили 32-битную версию OpenVPN на 64-битную Windows). Открываем для редактирования файл vars.bat. Если его нет, то переименовываем vars.bat.sample в vars.bat и приводим его к виду:
vars.bat
@echo off
rem Edit this variable to point to
rem the openssl.cnf file included
rem with easy-rsa.

set HOME=%ProgramFiles%\OpenVPN\easy-rsa
set KEY_CONFIG=openssl-1.0.0.cnf

rem Edit this variable to point to
rem your soon-to-be-created key
rem directory.
rem
rem WARNING: clean-all will do
rem a rm -rf on this directory
rem so make sure you define
rem it correctly!
set KEY_DIR=keys

rem Increase this to 2048 if you
rem are paranoid.  This will slow
rem down TLS negotiation performance
rem as well as the one-time DH parms
rem generation process.
set KEY_SIZE=1024

rem These are the default values for fields
rem which will be placed in the certificate.
rem Change these to reflect your site.
rem Don't leave any of these parms blank.

set KEY_COUNTRY=RU
set KEY_PROVINCE=Nsk
set KEY_CITY=Novosibirsk
set KEY_ORG=Escort
set KEY_EMAIL=i_nichupienko@soft-escort.ru
set KEY_CN=87.245.176.183
set KEY_NAME=temp_nie
set KEY_OU=changeme
set PKCS11_MODULE_PATH=changeme
set PKCS11_PIN=1234


Далее я чисто для удобства подредактировал файл build-ca.bat:
build-ca.bat
@echo off
cd %HOME%
rem build a cert authority valid for ten years, starting now
"c:\Program Files\OpenVPN\bin\openssl.exe" req -days 3650 -nodes -new -x509 -keyout %KEY_DIR%\%1.key -out %KEY_DIR%\%1.crt -config %KEY_CONFIG%


После этого запускаем в такой последовательности:

c:\Program Files\OpenVPN\easy-rsa>vars.bat
c:\Program Files\OpenVPN\easy-rsa>clean-all.bat
c:\Program Files\OpenVPN\easy-rsa>build-ca.bat newuser


На вопросы последней команды в можно просто нажимать enter (будут использоваться введенные в файл vars.bat данные), а можно вводить новые данные. В общем, как удобно.
Выполнение команд


Результат


В Winbox роутера щелкаем кнопку Files и получившиеся файлы из папки копируем туда методом Drag'n'Drop.



Далее в Winbox переходим в System — Certificates. Жмем Import, выбираем сначала один файл, затем второй:



Заходим в PPP — Profile, открываем созданный ранее default-encryption, жмем Copy и на вкладке Protocol меняем значение поля Use Encryption с Yes на Required:



В качестве названия профиля указываем SSTPprofile.
Затем, в System — PPP переходим на вкладку Interface и нажимаем там кнопку SSTP-Server. Ставим галку Enabled, выбираем SSTPProfile в качестве Default Profile и указываем необходимый нам сертификат. В качестве метода аутентификации выбираем только mschap2.



Поскольку при создании секретов (логинов/паролей) для PPP мы изначально тип сервиса указывали Any, то сейчас нам не нужно дополнительно ничего создавать. Подключение готово.

Ввиду того, что данная статья о настройке роутера, а не клиента, указывать способы импорта этого сертификата в различные ОС и настройку клиентского SSTP-соединения рассматривать в данной статье я не буду. Упомяну лишь, что полученный сертификат необходимо добавить в доверенные корневые центры сертификации.

8. Настройка ключевых правил файерволла


Заходим в IP — Firewall — Filter Rules

8.1. Доступ до роутера по Winbox из внутренней сети

Создаем правило:
Chain: Input
Protocol: tcp
Dst.Port: 8291
In. Interface: ether3-internal
Action: accept

Картинка


8.2. Пинг наружу из внутренней сети

Создаем 2 правила:
Chain: forward
Protocol: icmp
Out. Interface: ether1-gateway1 и ether2-gateway2 (либо можно не указывать интерфейсы, т.к. вовнутрь пинг все равно будет закрыт натом. Тогда нужно одно правило, а не 2)
Action: accept

Картинка



8.3. Пинг внутренней сети из сети VPN

Chain: forward
Protocol: icmp
Src.Address: 192.168.170.0/24
Dst.Address: 192.168.0.0/22
Action: accept

Картинка


8.4. Доступ по протоколу RDP из сети VPN во внутреннюю сеть

Chain: forward
Protocol: tcp
Src.Address: 192.168.170.0/24
Dst.Address: 192.168.0.0/22
Dst.Port: 3389
Action: accept

Картинка


9. Публикация порта 80 машины 192.168.2.82 наружу


Переходим в IP — Firewall — NAT
Chain: dstnat
Protocol: tcp
Dst.Port: 80
In.Interface: ether1-gateway1 (для ether2-gateway2 надо создать точно такое же правило)
Action: netmap
To Addresses: 192.168.2.82
To Ports: 80

Картинка


10. Публикация порта 3389 машины 192.168.2.82 в сеть VPN


Данное правило необходимо для создания доступа без использования маршрутизации на клиентской машине, т.к. машина 2.82 будет иметь дополнительный IP-адрес:порт из того же сегмента подсети, что и VPN-клиент.
Переходим в IP — Firewall — NAT
Chain: dstnat
Dst.Address: 192.168.170.82
Protocol: tcp
Dst.Port: 3389
Action: dst-nat
To Addresses: 192.168.2.82
To Ports: 3389

Картинка

Илья Ничупиенко @Hanggard
карма
2,0
рейтинг 0,0
DevOps TeamLead
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (89)

  • 0
    спасибо. а как можно объединить 2 подключения так, чтобы получить одно более быстрое, например. объединить подключение по двум модемам?
    • 0
      Насколько я понимаю, если иметь 2 модема, то скорость Вы почувствуете только при большой нагрузке. А вот чтобы ощутить суммарную скорость — тут роутер Вам ничем помочь не сможет. Только policy-routing, но это не увеличение пиковой скорости, а скорее именно ширины канала…
      • 0
        Можно PPP Multilink поднять, если с провайдером договориться.
      • 0
        Я неправильно выразился. Вот такая ситуация: есть небольшой офис, который сидит на 3G модеме. Теоретически можно добавить еще один 3G модем и заставить маршрутизатор маршрутизировать разные TCP сессии (или комбинации src-ip — dst-ip) через разные модемы, та, чтобы сбалансировать между ними нагрузку. В этом случае пропускная способность увеличится и пользователи ощутят «увеличение скорости», хоть пакеты и не будут летать быстрее. в общем, вопрос такой: как распределить трафик между двумя модемами, чтобы второй модем тоже работал, а не просто ждал, когда сдохнет первый.

        Я на Mikrotik примерно такую задачу решил для разных протоколов: сделал правила маршрутизации так, чтобы допустим, для http использовался один канал, а для vpn между офисами — другой. если же один из каналов падал, то все начинало маршрутизироваться через оставшийся канал. А вот как весь трафик распределить по двум каналам так и не придумал.
        • 0
          А вот как весь трафик распределить по двум каналам так и не придумал
          Повторюсь, как раз для этих целей можно использовать PPP Multilink. Позволяет объединять много физических каналов в один логический, понятное дело, что провайдер тоже должен поддерживать. Погуглите, масса статей есть с примерами и настройками.
          • 0
            Дык тут ограничение в провайдере. теоретически должен быть способ пускать трафик по нескольким каналам без наличия поддержки от провайдера, отслеживать сетевые сессии и их динамически по разным каналам пускать. например, у меня модемы от разных провайдеров…
    • 0
      Если хочется в рамках одного соединения, то не получится.
      Если суммарно для многих соединений (например, торренты) — PCC, простой и достаточный пример с пояснениями есть в документации: wiki.mikrotik.com/wiki/Manual:PCC
    • 0
      от подключения второго модема Round Trip Time меньше не станет, этим можно увеличить пропускную способность и отказоустойчивость.
  • +1
    Спасибо тебе, добрый человек. Очень пригодится.
  • 0
    Хорошая статья!
    еще моменты, которые могут быть востребованы в SOHO:
    провайдеры предоставляют PPPoE (Russian DualAccess) или другие VPN
    сетевые сервисы — DHCP, NTP, SNMP, сброс логов на внешнее хранение.
    • +1
      Да, это, бесспорно, важные моменты. Но их настройка не практиковалась у нас в фирме, а кроме того, настройка указанных Вами сервисов на микротике настолько элементарна, что я не вижу особенного смысла расписывать ее. Человек, купивший микротик, уже заведомо знает такие вещи, потому что если человек таких вещей не знает — он купит D-Link. :)
    • 0
      Настроить время, часовой пояс можно так:
      /system clock set time-zone-name=Europe/Moscow
      /system ntp client set enabled=yes mode=unicast primary-ntp=5.148.175.134 secondary-ntp=81.94.123.16
      
  • 0
    Такой вопрос: мне нужно прокинуть несколько портов наружу. Собственно, задача не из разряда rocket science, моментально нагуглил и сделал то, что описано у вас в п.9.

    Теперь я заранее прошу прощения, но я от администрирования далек, и сейчас, возможно, буду похож на блондинку, у «которой пропал интернет с процессора» :) Проблема в том, что после прокидывания портов роутер все равно отсекает все попытки соединения извне, и даже при сканировании при помощи nmap открытых портов не видно. При этом при указании nmap какой-то опции на «более глубокое сканирование» (как гласила инструкция, подсмотренная в интернете :)), нужные порты таки были видны. Я понимаю, что это похоже на гадание по фотографии, но все же — есть какие-то варианты «from the top of your head», или проблема не совсем очевидна? При использовании другого роутера (Netgear WNR3500L) проблем на наблюдалось.

    Доберусь до дома — смогу предоставить детали.
    • +1
      Любезный, а на файерволле-то порты у Вас открыты? Нат это нат, а еще их надо открывать. Правила описаны в п.8.
      • 0
        Спасибо за наводку, посмотрю.
      • 0
        Вот правила фаервола (добавил новое в начало, для порта 9091):
        image
        (кликабельно)

        Вот таблица NAT-а:
        image
        (кликабельно)

        Вот остаток того, что не видно в таблице NAT-а:
        image

        При этом

        $ nmap <IP>
        
        Starting Nmap 5.21 ( http://nmap.org ) at 2014-07-03 04:18 MSK
        Note: Host seems down. If it is really up, but blocking our ping probes, try -PN
        Nmap done: 1 IP address (0 hosts up) scanned in 3.05 seconds
        


        но в то же время

        $ nmap -PN <IP>
        
        Starting Nmap 5.21 ( http://nmap.org ) at 2014-07-03 04:18 MSK
        Nmap scan report for <IP>.cpe.teksavvy.com (<IP>)
        Host is up (0.078s latency).
        Not shown: 999 filtered ports
        PORT     STATE SERVICE
        9091/tcp open  unknown
        
        Nmap done: 1 IP address (1 host up) scanned in 196.19 seconds
        


        Ну и из браузера тоже недоступно (там веб-сервис на порту 9091 висит). Сервис точно живой (по адресу 192.168.1.2:9091 из внутренней сети открывается без проблем).
        • +1
          Дело в том, что там надо писать не Input, a Forward, показываю на своем примере.

          • 0
            Поставил forward, убрал In Interface (раньше там стоял ether1-gateway). По-прежнему не работает, но кое-что изменилось: теперь у фаервольного правила при попытке досутчаться браузером извне начал бежать счетчик пакетов, но ответа по-прежнему нет.

            Уже начал грешить на хитрую конфигурацию сервиса, висящего на 9091-м порту (собственно, обычная веб-морда для Transmission), поэтому тупо поднял Nginx с дефолтной страницей на 8080-м порту, открыл порт на фаерволе, пробросил NAT-ом — и та же самая картина: изнутри виден, снаружи нет, nmap без параметров его не видит, с -PN видит.
            • +1
              а выполните, пожалуйста, в терминале команду
              /ip firewall export
              Если есть, что скрывать, можно почистить код немного, но лучше просто замените все на единицы и двойки, как в статье. Выложите сюда, я поищу ошибку. Адреса 192.168.*.* редактировать не надо, только внешние.
              • 0
                Скрывать особо нечего, внешних адресов там нет.

                ip config export
                [admin@MikroTik] > /ip firewall export
                # jan/13/1970 14:32:36 by RouterOS 5.21
                # software id = HF0I-6X98
                #
                /ip firewall connection tracking
                set enabled=yes generic-timeout=10m icmp-timeout=10s tcp-close-timeout=10s tcp-close-wait-timeout=10s \
                tcp-established-timeout=1d tcp-fin-wait-timeout=10s tcp-last-ack-timeout=10s tcp-syn-received-timeout=5s \
                tcp-syn-sent-timeout=5s tcp-syncookie=no tcp-time-wait-timeout=10s udp-stream-timeout=3m udp-timeout=10s
                /ip firewall filter
                add action=accept chain=forward disabled=no dst-address=192.168.1.2 dst-port=9091 protocol=tcp
                add action=accept chain=forward disabled=no dst-address=192.168.1.2 dst-port=8080 protocol=tcp
                add action=accept chain=input comment=«default configuration» disabled=no protocol=icmp
                add action=accept chain=input comment=«default configuration» connection-state=established disabled=no
                add action=accept chain=input comment=«default configuration» connection-state=related disabled=no
                add action=drop chain=input comment=«default configuration» disabled=no in-interface=sfp1-gateway
                add action=drop chain=input comment=«default configuration» disabled=no in-interface=ether1-gateway
                /ip firewall nat
                add action=masquerade chain=srcnat comment=«default configuration» disabled=no out-interface=sfp1-gateway
                add action=masquerade chain=srcnat comment=«default configuration» disabled=no out-interface=ether1-gateway \
                to-addresses=0.0.0.0
                add action=netmap chain=dstnat disabled=no dst-port=9091 protocol=tcp to-addresses=192.168.1.2 to-ports=9091
                add action=netmap chain=dstnat disabled=no dst-port=8080 protocol=tcp to-addresses=192.168.1.2 to-ports=8080
                /ip firewall service-port
                set ftp disabled=no ports=21
                set tftp disabled=no ports=69
                set irc disabled=no ports=6667
                set h323 disabled=no
                set sip disabled=no ports=5060,5061 sip-direct-media=yes
                set pptp disabled=no
                • 0
                  Здесь порт 7875 с внешнего интерфейса пробрасывается на ПК внутри сети на аналогичный порт.
                  /ip firewall nat add action=dst-nat chain=dstnat comment="Nxt API" dst-port=7876 in-interface=ether1 protocol=tcp to-addresses=192.168.1.150

                  netmap это немного другое
                  • 0
                    Не помогает :(

                    А можно как-нибудь посмотреть детальные логи фаервола/ната? А то на вкладке «Log» только события вида «admin changed the NAT rule» и т.п.
                    • 0
                      Думаю, что имеет смысл отключить фильтр чтобы понять в каком месте проблема.
                      Т.е. отключить весь блок
                      add action=accept chain=forward disabled=no dst-address=192.168.1.2 dst-port=9091 protocol=tcp add action=accept chain=forward disabled=no dst-address=192.168.1.2 dst-port=8080 protocol=tcp add action=accept chain=input comment=«default configuration» disabled=no protocol=icmp add action=accept chain=input comment=«default configuration» connection-state=established disabled=no add action=accept chain=input comment=«default configuration» connection-state=related disabled=no add action=drop chain=input comment=«default configuration» disabled=no in-interface=sfp1-gateway add action=drop chain=input comment=«default configuration» disabled=no in-interface=ether1-gateway
                      вот это правило странное
                      add action=masquerade chain=srcnat comment=«default configuration» disabled=no out-interface=ether1-gateway \ to-addresses=0.0.0.0
                      если экшн=маскарад, то нет возможности задать to-addresses. если to-addresses задан, то вместо маскарада должен быть срц-нат
                      строки проброса портов должны быть примерно такими
                      add action=dst-nat chain=dstnat disabled=no dst-port=9091 protocol=tcp to-addresses=192.168.1.2 add action=dst-nat chain=dstnat disabled=no dst-port=8080 protocol=tcp to-addresses=192.168.1.2
                      Возможно, активен файрвол на целевом ПК?
                      • 0
                        Возможно, активен файрвол на целевом ПК?

                        Я, кстати, тоже об этом подумал. У микротика и Netgear одинаковый IP относительно компьютера? Или они могут сосуществовать в одной сети (разные IP)?
                        • 0
                          ой, уровнем ветки ошибся.
                        • 0
                          в одной сети устройства должны иметь разные адреса
                          мт 192,168,1,1/24
                          пк 192,168,1,2/24
                          • 0
                            Я про мт и нг, выражаясь Вашей терминологией. :) То есть Mikrotik и Netgear. Человек говорит, что с одним роутером работает, а когда меняет его на второй — нет. Отсюда вопрос — а не разные ли у роутеров IP, а то вдруг фаерволл на хост-машине блокирует микротика.
                        • 0
                          В сети один только Микротик, я им заменил сгоревший Netgear.

                          Адреса у всех девайсов, разумеется, разные :)
                          Микротик 192.168.1.1, «сервер» 192.168.1.2 (выдается по DHCP самим же Микротиком), ну и остальные девайсы тоже по DHCP (192.168.1.0/24)
                      • 0
                        Спасибо, попробую поотключать. Странное правило — это «оно само, я ничего не делал» :) Оно так было по дефолту.

                        Фаервол вряд ли — с другим роутером ведь работало. На целевой машине стандартная Убунта с несколькими сервисами, никакой дополнительной настройки не делал.
                        • 0
                          А айпишники у роутеров одинаковые или разные?
                    • 0
                      Вам в файерволле надо создать дублирующее правило (перед правилом открытия порта) и в action вместо accept поставить log. Если укажете еще и Prefix, потом в логе будет легче искать. Правило должно быть в списке выше, чем открывающее правило.
                      Как-то так
                      image
                      • 0
                        Спасибо, попробую.
                        • 0
                          Еще пришел в голову вопрос сам собой. А машина-то под роутером в интернет выходит? То есть нат-маскарад работает?
                          • 0
                            Та, которая 192.168.1.2? Выходит без проблем: и софт из репов ставится, и почту с гмыла питоний скрипт забирает, и краулер по HTTP ходит, и торренты качаются-раздаются, и так далее…
                            • 0
                              … но с микротика, имеющего внешний IP, порт не пробрасывается… А не могли бы Вы, забэкапив настройки на микротике, снести все правила файерволла и прочие настройки (в идеале полный сброс), оставив только основной маршрут, включенный маскарад и проброшенный порт? Мангл тоже нужно удалить, а для проброса порта давайте в Вашем случае используем DST-Nat. То есть, в роутере должен остаться:

                              — внешний IP (IP — addresses) с указанием интерфейса
                              — внутренний IP с указанием интерфейса
                              — Основной шлюз с указанием направления (0.0.0.0/0) и гейтвея (НЕ интерфейса, а IP-адреса)
                              — Nat-Masquerade (chain: src-nat, interface:ether1, action:masquerade)
                              — и проброс порта:
                              chain: dst-nat
                              Protocol: tcp
                              Port: 9091
                              In.Interface: ether1
                              Action: dst-nat
                              To addresses: 192.168.1.2
                              To Ports: 9091
                              
                              • 0
                                Хорошо, забэкаплюсь и сделаю фактори ресет, как только дома появлюсь (часа через 4, не раньше). Большое спасибо за советы.
                              • 0
                                Сделал ресет, сделал как вы советуете — без изменений :(
                                Ладно, хватит наверное этот тред мучить. В любом случае спасибо за вашу помощь.
  • 0
    Спасибо за статью, пробежал по диагонали, завтра обязательно прочту полностью.

    Скажите а бэкап mikrotik'ов у вас был предусмотрен, я имею ввиду саму железку.
    Если был, то какой горячий/холодный?
    Какие действия нужно было предпринять, чтоб, в случае аварии, начала работать резервная железка?
    • 0
      Горячего бэкапа нами предусмотрено не было, несмотря на то, что микротиков несколько… Просто все же:
      1. Микротик — это довольно надежная вещь
      2. У нас небольшой офис и ≈100 человек, сидящих по VPN
      Все, что сделано — бэкап последнего состояния каждого роутера (я за этим слежу), с которого в любой момент можно за 5 минут восстановить ему подобный.
      • 0
        Писал-писал коммент. А он протерялся. Ну да ладно. Краткая выдержка:

        У нас несколько админов и кто-то может тупо забыть сделать бекап конфига. Поэтому я наваял простой скрипт, который по крону бекапит конфиги всех микротиков. В этом есть два плюса:
        1. Не надо самому помнить делать бекапы. Они автоматические.
        2. Если кто-то кривыми ручками что-то уронил — всегда можно сделать откат хоть на несколько месяцев назад.

        Если будет необходимость, то выложу скрипт на github. Надо?
        • 0
          Конечно надо, выкладывайте, пожалуйста! Попробуем у себя внедрить.
          • 0
            Мне не жалко. Пользуйтесь на здоровье. :)
            github.com/DmitriyLyalyuev/mikrotik-backup
            • 0
              а где можно ссылочку получить? :)
            • 0
              Спасибо за скрипт!

              Есть замечания.

              В вашем варианте открыты пароли и адреса доступа на микротики.

              Чтобы непривелигированные пользователи с этого сервера не могли подсмотреть доступы нужно принимать меры по скрытию списка процессов и ограничению доступа к файлу скрипта.

              Если процесс передачи бэкапов происходит по общественной сети — то злоумышленник может подсмотреть фтп-трафик (пароли и ип).
              • 0
                На сервер нет ни у кого доступа, кроме админов. Там нет левых сервисов и все зафайерволено по максимуму.
                На самом микротике для FTP, WWW, WWW-SSL указаны строгие списки адресов с которых разрешен доступ. Если пароль утечет, то просто так получить доступ тоже не выйдет.
                Более прямого способа слить файлы с микротика я, к сожалению, не нашел. Если отправите pull-request, буду благодарен.
              • 0
                На самом деле можно просто сделать авторизацию ssh по сертификату — и забыть о паролях. Точнее по сертификату и пустому паролю.
                • 0
                  Ну собственно по ssh скрипт и ходит по сертификату
                  • 0
                    Я неправильно выразился. Имел в виду тот вариант авторизации, когда по сертификату, но без пароля. Например, такой способ применяется для rsync. Еще в каком-то украинском биллинге встречал.
                    • 0
                      ABills, видимо.
                      Сталкивался.
                      • 0
                        Он самый. Возможно, если найду толковую инструкцию (на тот момент у них часть инфы с сайта было утрачено) и вспомню, как настраивал радиус, напишу сюда отдельный пост. Либо о настройке ABills как сущности, либо Mikrotik — часть 2. Тем более, что некоторые дополнения по настройке микротика мне уже в комментариях высказали. Еще чуть-чуть и на новую статью хватит.
                  • 0
                    А почему вы ходите по ssh по сертификату, а файлы забираете wget, хотя так же по ключу можно было бы пойти с помощью scp?
                    • 0
                      Все просто. В Mikrotik'e нет расширения SFTP (не путать с FTPS) для SSH. Т.е. банально scp не работает.
                      • 0
                        Я бы не оставил своего комментария, предварительно не проверив. :-)
                        • 0
                          Вероятно в новых версиях ОС они учли это. Я писал скрипт очень давно. :)
                          Приму пулл-реквест. ;)
                          • 0
                            Приму пулл-реквест.

                            Простите, дяденька, я не настоящий сварщик. :-) Регистрироваться и форкать не хочется совсем из-за пары замененных строк вида:
                            scp ${login}@$r:${r}.backup $fulldir
        • 0
          А мы написали простенькое задание в /system scheduler, и шлем бекапы со всех площадок на один e-mail адрес.
          • 0
            Тоже вариант, но не так удобно искать потом бекап за нужный день, IMHO.
            • 0
              Зависит от имеющегося почтовика. Те же gmail и яндекс.почта умеют искать письма по дате.
              • 0
                Это, в принципе, у меет любой почтовик делать. Но в случае, когда у вас есть централизованный сервер бекапов, то валить одно в почту, а другое на сервер как-то не верно, ИМХО.

                Сложно мне предстваить компанию, которая бекапит конфиг роутера, но не бекапит свои проекты/сайты/базы и т.п.
                О админах, которые еще не делают бекапы я в курсе. ;)
                • 0
                  Соглашусь, в случае централизованного архива, скрипт удобнее.
                  Бекапы после больших изменений в конфигурации у нас тоже сохраняются на сервер скриптом, на почту валятся ежедневные (явно избыточные в нашем случае).
            • 0
              Выделить специальный email только для приема бэкапов, и тогда в нем не будет никакого шума, одни только бэкапы, отсортированные по дате.
    • 0
      У меня был настроен VRRP интерфейс. При падении основного ведомый подхватывал на себя все, в плоть до pptp и pppoe серверов.
      Настраивается элементарно. Работает надежно.
      • 0
        Спасибо за наводку!

        У нас пока только холодный бекап, т.е. в стойке 2 mikrotik'а, один основной, 2й резервный.
        Периодически накатываем бекап с основного на резервный, чтоб тот был в актуальном состоянии, в случае выхода из строя основного, надо лишь перекинуть патчкорды с одного mkt на другой.
        • 0
          В случае с VRRP не надо даже патчи перетыкать. Zero time, так сказать. :)
  • +1
    Скажите, пожалуйста, какой смысл использовать винбокс, когда есть консольный интерфейс или для любителей гуя шикарный веб-интерфейс?
    • 0
      Вот кому как, а лично я сравнивал винбокс и веб. Никому ничего не навязываю, но лично для меня веб микротика — не шикарный.
    • 0
      Субъективно веб хуже. Winbox под wine куда комфортнее. Хотя бы возможностью нескольких окон. А консоль как-то не пошла, хотя я и линуксоид.
    • 0
      winbox для начинающих или для любителей или для случая когда клиент доступ не дает, а помощь просит…
      конечно, когда появляется опыт, то в командной строке становится все быстро и удобно! Тем более что работают подсказки и дополнения команд.
  • +1
    Ваша конфигурация будет не комильфо, если микротик обслуживает несколько внутренних сетей (которые маршрутизируются через сам микротик).
    Также не получится пустить часть компьютеров (или определенную LAN подсеть) через одного провайдера, а часть через другого.
    Для пингов гугла правильно создавать Mangle для цепи Output, а не отдельные маршруты.
    Очень зря не рассмотрен вопрос с e-mail уведомлениями при падении канала — тогда бы Ваших скриптов в Netwatch не хватило бы (при падении основного канала SMTP сервер стал бы недосягаем).
    Использовать default профили тоже ай-ай как плохо. При росте инфраструктуры и при возникновении задач другого типа (какие-нибудь другие туннели и т.д.) кто-то возьмет да и изменит его, положив все остальное.
    Метить трафик внутрь (цепь forward) и на Mikrotik (input) по провайдерам (mark connection) следует отдельно. Не понятно что из Вашего варианта может вылезти (не могу с ходу придумать сценарий, при котором у вас что-то не будет работать, но он есть).
    Зачем вы выключаете proxy-arp на локальном интерфейсе? Туннели определенные работать перестанут!

    Помимо всего этого из своих личных рекомендаций я бы добавил:
    1) Если не пользоваться вторым каналом одновременно с первым (только failover), то я бы attempt time нетвотча делал бы больше для ISP2.
    2) Не описаны Firewall правила, их тоже нужно правильно рисовать.
    3) С помощью того же Mangle (add to address list с таймаутом) можно реализовать защиту от брутфорса.

    Но в общем плюсик за статью — начинающим очень пригодится.
    • +1
      Спасибо Вам. На досуге подумаю, как лучше использовать у нас Ваши пожелания и постараюсь провести обновление конфигурации, а после и статю дополню.
  • 0
    Прошу помощи у гуру маршрутизации.
    У меня стоит задача опубликовать OWA и остальные порты Exchange 2010 на Микротике.
    Порты открывать на файрволе и пробрасывать на НАТе я умею, но сколько не пытался, работы Ексча так и не добился. Не получает почту и всё тут, отправляет норм. Хотя вроде ничего там сложного нет. Мануалы по ексчу и микротику в сети не могу найти.
    • 0
      Думаю, достаточно найти мануалы по настройке эксчейнджа и любого другого маршрутизатора. Лично я список портов Эксчейнджа сходу не скажу, но насчет мануалов по микротику все просто:
      wiki.mikrotik.com
      А вот по пробросу порта.
      Ну и честно говоря, по поводу «в сети не могу найти» — что у Вас там за поисковик?
      • 0
        Кстати, по пробросу порта: по ссылке говорится «action=dst-nat», а в вашей статье в п.9 «action=netmap». Чем они отличаются и какой таки использовать?
        • 0
          По большому счету в данном контексте их использования не отличается. А вообще в целом,
          DST-NAT — заменяет адрес назначения и/или порт пакета IP до значений, установленных в полях to-addresses и to-ports.
          NetMap — создает статический 1:1 маппинг одного набора IP-адреса на другой. Часто используется для передачи открытых IP-адресов для хостов в частных сетях
          Подробнее тут.
  • +1
    Хорошо бы роутер обновить перед началом каких-либо действий с ним.

    В командной строке это делается так (к сожалению не успел скопировать — он обновился и перегрузился..):

    [admin@mkt] > /system package update check-for-updates 
    [admin@mkt] > /system package update download          
    [admin@mkt] > /system package update upgrade
    [admin@mkt] > /system package update print    
      current-version: 6.15
       latest-version: 6.15
               status: System is already up to date
    [admin@mkt] > 
    [admin@mkt] > /system routerboard print 
           routerboard: yes
                 model: 751U-2HnD
         serial-number: 2B66012AE691
      current-firmware: 3.13
      upgrade-firmware: 3.13
    [admin@mkt] > 
    


    Нужно следить за результатами обновлений, чтобы версии firmware всегда были одинаковы.

    В winbox обновление делается так:
    Mikrotik Update
    • 0
      Не все обновления одинаково полезны.
      С 6.11 имеются проблемы с IPSec, иногда соединения не поднимаются между узлами.
      Поэтому на некоторых особо «важных» участках у меня стоят старые прошивки или IPSec начинаю пропускать внутри EoIP.
  • 0
    А вы сталкивались с созданием IPSEC туннелей?
    У меня стоит раутер, на котором я не могу почему-то поднять айписек. Точнее сам туннель подымается, но не подымается маршрут который направляет траффик из внутренней сети в другую точку туннеля… не могу понять, что я упускаю :(
    • 0
      Возможно, я не совсем Вас понял, но сами IPSEC-туннели я не поднимал, поднимал только L2TP с IPSEC.
      • 0
        Да, интересует именно site-to-site ipsec…
        • 0
          Сам, к сожалению, не делал. Вы по этому мануалу делали?
          • 0
            Да, по нему.
            Сам туннель подымается, но что-то со связностью внутри не ахти :(
        • 0
          А в чем сложность то заключается? Выставьте в клиенте add default route или ручками маршрут пропишите и не забудьте про маскарадинг.
    • +2
      Я поднимал IPSEC.
      Маршрут должен уходить в дефолт.
      При этом важно чтобы пакеты не попадали в НАТ.

      В address-list DST-NO-NAT-FOR-REMOTE-OFFICES сложил список удаленных локальных сеток чтобы не попадали в НАТ.
      Для этого я сделал так (первое правило исключает попадание в нат избранным):
      /ip firewall nat
      add chain=srcnat dst-address-list=DST-NO-NAT-FOR-REMOTE-OFFICES out-interface=ether9-wan src-address=192.168.130.0/24
      add action=masquerade chain=srcnat out-interface=ether9-wan
      


      Сами настройки туннелей (в моем случае с cisco-linksys какими-то, точно уже не помню):
      /ip ipsec proposal
      add auth-algorithms=md5 enc-algorithms=3des lifetime=8h name=PROP1
      /ip ipsec peer
      add address=x.x.y.y/32 comment=IPSEC1 enc-algorithm=3des local-address=a.a.a.a passive=yes secret=PASS1
      add address=x.z.z.z/32 comment=IPSEC2 enc-algorithm=3des local-address=a.a.a.a passive=yes secret=PASS2
      /ip ipsec policy
      add comment=IPSEC1 dst-address=192.168.134.0/24 level=use proposal=PROP1 sa-dst-address=x.x.y.y \
        sa-src-address=a.a.a.a src-address=192.168.130.0/24 tunnel=yes
      add comment=IPSEC2 dst-address=192.168.132.0/24 level=use proposal=PROP1 sa-dst-address=x.z.z.z \
        sa-src-address=a.a.a.a src-address=192.168.130.0/24 tunnel=yes
      


      При помощи команды:
      /ip ipsec remote-peers print
      

      можно посмотреть состояние туннелей.

      Вроде работает :)
      Если есть вопросы — можете в личку обратится за подробностями.
      • 0
        Я не через консоль правда делал. Но вот вроде как он сам создает правило, которое не заворачивает локальные сети в нат, не?
        Я посмотрю чо да как, спасибо. Напишу если что :)
  • 0
    Спасибо за статью!
    А есть у микротика некий аналог «push» — что бы давать клиентам команды маршрутизации в сеть сервера?

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.