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

Статус
Закрыто для дальнейших ответов.

Admin

Administrator
Команда форума
Автор статьи: Hanggard 2 июля 2014

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_ISP2

76945318d01d373b93ba33a2925a6acb.png

fc9f435a2101ce2afa5d34c9246f10d0.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.png

839ac241eb0d4117a588de76d6ff54da.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: убираем галку.


61bfd86675f7485cbbde74c754d4dc51.png

45ffc975a726c48c1bf9b1c29e3253cf.png

7e2420e005eb269d6ea6f6f91cf031a3.png


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.png


8479e525a929d6fbb9ff86dfad0d862b.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 тушил необходимые маршруты и внутренняя сеть получала доступ в интернет через резервный интерфейс.
 
Последнее редактирование:

Admin

Administrator
Команда форума

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.2-192.168.171.254:
c3ab3fc25c15751b40fb9f2959c52202.png


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


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


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 будет выдаваться первый свободный.

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.png

5aee13ca79ca9ddb83fd75d0ab549f81.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.png

38567d26d64bc1bddaa9dcbbeef56907.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-соединения рассматривать в данной статье я не буду. Упомяну лишь, что полученный сертификат необходимо добавить в доверенные корневые центры сертификации.
 
Последнее редактирование:

Admin

Administrator
Команда форума

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


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

8.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
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Верх