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

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

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

badf673456ac9a1a2b75adccc6cb26e3.png

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

ffb360693019a71b17245e9665a64f3b.png

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

6e8e3acb544eb35555f41277cd93f9d7.png

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 основного шлюза. Не забываем про дистанцию — у какого маршрута она короче, тот будет основным. В целом настройки маршрута должны выглядеть вот так: 39fe355b5b21bb68d1a77fc8b0038d49.png

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

1060faf50ff83446850bc0a3f3df2dc2.png

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

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

Далее заходим в 

IP — Firewall — Mangle 4a9df718ceec368cea1b1ebb7007f29b.png Создаем правила: Вкладка General: Chain: prerouting In-interface: указываем один из входящих интерфейсов Connection Mark: no-mark Далее, на вкладке Action: Action: mark connection New Connection Mark: ISP1_conn Passthrough: убираем галку. Картинки для закрепления материала 4bb055762e23c2b55c37a4bae393fb2f.png839ac241eb0d4117a588de76d6ff54da.png Эти действия нужно повторить дважды — для 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 Картинки 122d3ebdf27c48c57f471c2cfd246232.png8479e525a929d6fbb9ff86dfad0d862b.png

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

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

5. Создаем NAT Заходим в IP — Firewall, переходим на вкладку NATСоздаем 2 правила для каждого из внешних интерфейсов: Chain: srcnat Out-Interface: указываем нужный внешний интерфейс Action: masquerade Картинка 86aa766d8ced172d87312dfe7f5d5422.png Проверить 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.2192.168.171.254: c3ab3fc25c15751b40fb9f2959c52202.png6.2. Включаем PPTP-сервер Заходим в пункт меню PPP, далее на вкладке Interfaces находим кнопку PPTP Server. Ставим галки Enabled, mschap2 и выбираем Default Profile: default-encoding.a4d8f7b1942d0ef8162fc80e70d15933.png6.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 будет выдаваться первый свободный. Картинка 88932cfb7c15c27dc31f150a076fad02.png 6.5. Пакетное создание учетных записей Для пакетного создания секретов (учетных записецй) VPN можно использовать скрипт.Необходимо зайти в System — Scripts, нажать «создать новый» и вставить туда нужный нам текст скрипта.203eea95c408a8bb6fed272003e5c4c6.png

Текст скрипта : 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_клиента,тип_шифрования,сервис

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

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

430ede06a99b577096ae3977df3f8959.png

7. Настройка SSTP Для работы SSTP требуются сертификаты. Я использовал самоподписанные сертификаты, выданные оснасткой OpenVPN. Для получения сертификатов не нужно ставить все компоненты, достаточно только указанные на скриншотах d11e7d508f83b15f959aa5e03464844c.png5aee13ca79ca9ddb83fd75d0ab549f81.png Далее, запускаем 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 данные), а можно вводить новые данные. В общем, как удобно.

Выполнение команд ae6ef7d1c2687913864e531bd870f0a2.png Результат fbb2e21e43b98330165d9bac170f722d.png В Winbox роутера щелкаем кнопку Files и получившиеся файлы из папки копируем туда методом Drag’n'Drop.73c3b85a7a2cfe2b0f72200233ef990c.png

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

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

72c6e7d70622f30d4be464a0966bc1ec.png

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

1ac88df877661e790a456c945b79f4c3.png

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

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

8. Настройка ключевых правил файерволла Заходим в IP — Firewall — Filter Rules8.1. Доступ до роутера по Winbox из внутренней сети Создаем правило: Chain: Input Protocol: tcp Dst.Port: 8291 In. Interface: ether3-internal Action: accept Картинка d2a145f33177806921d9ae1f01cba40c.png 8.2. Пинг наружу из внутренней сети Создаем 2 правила: Chain: forward Protocol: icmp Out. Interface: ether1-gateway1 и ether2-gateway2 (либо можно не указывать интерфейсы, т.к. вовнутрь пинг все равно будет закрыт натом. Тогда нужно одно правило, а не 2) Action: accept Картинка 8dc5558a03f11b2790dcb021e9cbb7d9.png 8.3. Пинг внутренней сети из сети VPN Chain: forward Protocol: icmp Src.Address: 192.168.170.0/24 Dst.Address: 192.168.0.0/22 Action: accept Картинка 55065ad3a3a80ca01f450edd86754947.png 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 Картинка 759c6925ba7100229d67e739091b7743.png 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 Картинка 59053b99201761553eb4136ea37e7cca.png 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 Картинка d9c5681d3ca4e2b67ac9759174e613b5.png

© Habrahabr.ru