2 июля 2014

Настройка роутера 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

Картинка

Теги:mikrotikrouterosnatfirewallpptpsstpmanglesohosoho роутерhowto
Хабы: Системное администрирование Сетевые технологии
+32
312,7k 648
Комментарии 89
Похожие публикации
системный администратор, администратор сети ПД
от 60 000 до 120 000 ₽Первый ТелекомМосква
Системный администратор
от 25 000 до 50 000 ₽БастионМоскваМожно удаленно
Специалист контроля SOC- центра
от 60 000 ₽HighTeamМоскваМожно удаленно
Системный администратор Linux DevOps
от 100 000 до 150 000 ₽X-KeeperКрасногорскМожно удаленно
Лучшие публикации за сутки