Меню
Контакты
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
109147, Москва, ул.Воронцовская, 35Б, корп.2 офис.11, 4 этаж
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

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

 21 Июл 2015    MikroTik, Практика и программирование MikroTik

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 и приводим его к виду:

  • @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:

  • @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

 



© habr