Найти тему

Настраиваем Mikrorik для доступа интернет #01

Оглавление

И так, первое с чего стоит начать построение домашней лаборатории it, это выбрать оборудование которе станет сетевым шлюзом и произвести базовую настройку. Но перед выбором оборудования сначала нужно определится к требованиям которым должен соответствовать наш шлюз. Требования я буду составлять с учетом дальнейшего масштабирования сети в будущем.

Минимальныe требования к железу и ПО шлюза

  • Минимум 6 гигабитных портов. Можно использовать и шлюз с 2.5Gb портами, но но что бы не раздувать и так приличный бюджет я пока остановлюсь на гигабитных портах.
  • Минимум один 10Gb SFP+ порт. Это нужно что бы в будущем, при переходе на 10Gb сеть можно было переиспользовать это оборудование где-то на переферии сети.
  • Возможность гибкой настройки межсетевого экрана.
  • Поддержка протоколов: VLAN, OSPF, IPSec, и многих других, которые потребуются в будущем.
  • Поддержка очередей.
  • Поддержка VPN протоколов. Возможно в будущем у нас будет отдельный сервер для этой задачи, но на старте я планирую использовать шлюз в качестве VPN сервера. Дисклеймер: я не планирую использовать VPN для обхода блокировок Роскомнадзора, а только лишь для построения безопасной сети между удаленными клиентами.
  • Возможность конфигурации через внешнее api. В будущем часть конфигурации может обновляться автоматически одной из других систем и наличие возможности конфигурации не только через web интерфейс является обязательным критерием.
  • Аппаратная поддержка шифрования. Необходима для возможности шифрования трафика в VPN туннелях с большой производительностью
  • Достаточно мощное железо что бы выдержать сложные конфигурации firewall (более 50 правил), очереди, VPN и прочее.
  • Пассивное охлаждение. Я планирую размещать оборудование в квартире и буду стараться минимизировать шум от работы лаборатории.
  • Долгая поддержка оборудования производителем.

Выбор оборудования

Теперь определившись с требованиями можно перейти в выбору оборудования:

  • «soho» роутер с заводской прошивкой. Такое решение нам не подойдет, так как роутеры предназначенные для домашнего использования обычно не поддерживают "индустриальные" протоколы (OSPF, VLAN и др). А так же редко имеют возможность конфигурации по сети.
  • «soho» роутер с кастомной прошивкой. Данный вариант позволяет добавить поддержку нужных протоколов и внешнее api, но установка кастомных прошивок обычно приводит к потере гарантии. Так же кастомные прошивки зачастую весьма нестабильны и их поддержка может прекратиться в любой момент.
  • pfSence, дистрибутив FreeBSD, предназначенный для установки на обычные компьютер и предоставляет все необходимые для межсетевого экрана функции. В Китае продается множество пк с пассивным охлаждением, предназначенных специально для установки pfSence и работы в качестве роутера / межсетевого экрана. Этот вариант отвечает обозначенным выше требованиям.
  • Cisco - это дефакто стандарт сетевого оборудования для датацентров и организаций. Умеет все что только можно придумать. Но у оборудования Cisco есть два очень существенных минуса. Высокая цена оборудования и высокая сложность настройки. Возможно в будущем я добавлю в лабораторию оборудования Cisco, но этот вариант не подходит для начала.
  • Mikrotik - промежуточный вариант между Cisco и soho роутерами. Умеет в огромное количество сетевых протоколов и при этом стоит аналогично soho роутерам с аналогичным железом. Довольно сложен в настройке, но все же на порядок проще чем оборудование Cisco.
  • Ubiquiti unifi - айфон в мире сетевого оборудования, красивый, но не особо функциональный.
  • Прочие варианты - конечно кроме названых есть и другие производители, но они ничем особым меня не заинтересовали и я не присматривался к ним подробно.

В итоге нам подходит два варианта: pfSence или Mikrotik. Я решил остановиться на втором варианте, так как уже имею опыт в настройке Mikrotik (на уровне MTCNA), но в будущем хочу так же попробовать pfSence.

Mikrotik RB4011IGS+5HACQ2HND-IN

После некоторых раздумий выбор пал на Mikrotik RB4011IGS+5HACQ2HND-IN

Его ключевые особенности:

  • 1 x SFP+ 10 Гбит порт.
  • 10 x 1 Гбит портов.
  • WiFi 2,4+5ГГц.
  • 18-57v POE In на 1-ом порту (можно организовать резервирование питания).
  • POE out на 10-ом порту (с напряжением питания).
  • Аппаратное шифрование.
  • Мощная конфигурация железа, которая вытянет сложный firewall, очереди и другое.
  • Пассивное охлаждение.

Какую конфигурацию будем настраивать?

Для начала настроим типовую конфигурацию "домашнего" роутера, а именно:

  • Локальную сеть с DHCP сервером - LAN.
  • Внешнюю сеть провайдера (тут для каждого провайдера индивидуально, у меня будет Beeline).
  • Локальный DNS proxy сервер.
  • Firewall для отделения внешней и локальной сети.
  • wireguard vpn

Выбор диапазона используемых ip адресов.

Для начала мы будем настраивать только ip v4 сеть, с ip v6, возможно поиграемся в будущем.

Для локальных сетей выделены следующие адреса:

  • 10.0.0.0/8 - чаще всего используется при организации больших сетей (локальных сетей датацентров).
  • 100.64.0.0/10 - спецефическая сеть, ее можно использовать, но пока не будем. Если интересно, можно почитать подробнее в википедии.
  • 172.16.0.0/12 - обычно используется для впн туннелей, мы будем использовать ее для vpn и прямых связей между узлами сети (об этом позже).
  • 192.168.0.0/16 - чаще всего используется в домашних сетях.

Использовать именно эти адреса необходимо для исключения возможности пересечься с ip адресами в интернете.

Мы будем использовать сеть 10.0.0.0/8, все таки лабораторию делаем а не домашнюю сеть, ну и большое количество доступных адресов позволит нам использовать сети с масками кратными 8, что весьма удобно.

Для себя я придумал следующие правила построения сетей:

ХХХ - номер сети. Таким номером будут обладать сети сконцентрированные в одном месте (квартира, дача, основная стойка фермы).

Рядом с номером сети так же указан ее VLAN, в этой статье не буду касаться вланов, но в будущем они пригодятся.

  • 10.xxx.0.0/24 vlan000 - LAN локальная сеть для подключения пользовательских устройств.
  • 10.xxx.1.0/24 vlan001 - Гостевая сеть, для подключения не доверенных гостевых устройств.
  • 10.xxx.2.0/24 vlan002 - IOT сеть для умных устройств с доступом в интернет.
  • 10.xxx.3.0/24 vlan003 - IOT2 сеть для умных устройств без доступа в интернет.
  • 10.xxx.4.0/24 vlan004 - Сеть для камер видеонаблюдения.
  • 10.xxx.5.0/24 vlan004 - Сеть для VPN.
  • 10.xxx.6-9.0/24 vlanYYY - Резерв для любых других сетей которые могут понадобиться.
  • 10.xxx.10-20.0/24 vlanYYY - Сегмент сетей для размещения серверной инфраструктуры.
  • 10.xxx.255.1-255 vlan255 - сеть для управления марсшрутизаторами (в этой статье мы ее затрагивать не будем, настроим позже, когда будем масштабировать сеть).

Первая сеть которую мы будем настраивать будет иметь номер 29, было бы логично начать с 0 или 1, но эти сети уже заняты моими более ранними экспериментами и я не хотел бы с ними пересекаться.

Настройка

Настраивать Mikrotik можно через Web-интерфейс, telnet, api или фирменный софт от производителя - winbox. Я не буду использовать winbox. Вообще winbox доступен только под Windows, но прекрасно работает под vine на MacOS, скачать можно с официального сайта производителя.

Сброс настроек к заводским

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

Если микротик был ранее настроен то необходимо сбросить его к заводским настройкам, это можно сделать двумя способами:

  • Зажав ресет
  • Если помним пароль то через Web интерфейс, telnet, winbox выбрав соответствующий пункт или введя в терминале команду:
system/reset-configuration no-defaults=yes

Первичная настройка dhcp сервера

Изначально Mikrotik с пустой конфигурацией не имеет ни dhcp сервера ни собственного ip адреса, поэтому подключится к роутеру по ip мы не сможем. Для таких случаев в winbox есть режим подключения по MAC-адресу. Подключаемся проводом в eth3 роутера (можно выбрать любой другой, но я буду делать конфигурацию для этого порта. После этого открываем winbox и ищем наш роутер во вкладке Neighbors, далее кликаем по MAC-адресу и подключаемся с логином admin и пустым паролем (в некоторых версиях mikrotik пароль не пустой а написан на этикетке снизу роутера).

При первом подключении микротик потребует задать пароль администратора. После установки пароля рекомендую переподключиться с новым паролем (иначе не будет работать терминал).

Далее нам нужно в первую очередь настроить ip адрес и поднять dhcp сервер для LAN сети. Начинать рекомендую именно с этого так как подключение по MAC-адресу работает не очень стабильно и может вылетать.

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

Далее по пунктам настраиваем локальную сеть:

  • Создаем bridge для локальной сети:
interface/bridge add name=LAN-bridge

  • Назначаем адрес сети (по нему в будущем будем подключаться к роутеру):
ip/address/add address=10.29.0.1/24 interface=LAN-bridge

  • Настраиваем пул ip адресов для DHCP сервера и сам DHCP сервер. Обратите внимание, в пул включаем не все доступные ip адреса, а только часть диапазона, ip адреса в начале будут использоваться машинами с статически заданными адресами:
ip/pool/add name=LAN-dhcp-pool ranges=10.29.0.101-10.29.0.254
ip/dhcp-server/network/add address=10.29.0.0/24 gateway=10.29.0.1 dns-server=10.29.0.1 comment="LAN-network"
ip/dhcp-server/add name=LAN-dhcp interface=LAN-bridge address-pool=LAN-dhcp-pool lease-time=24h

Обратите внимание пул не затрагивает первые 100 ip адресов сети, эти адреса я буду использовать для машин со статическим ip.

  • Разрешаем удаленные запросы к локальному dns серверу, иначе микротик будет использовать dns сервер только для локальных нужд:
ip/dns set allow-remote-requests=yes

  • Добавим ether3 к которому подключены в наш LAN-bridge:
interface/bridge/port add bridge=LAN-bridge interface=ether3

После этого нас скорее всего выкинет из сессии winbox, переподключаемся уже по ip адресу - 10.29.0.1.

Итак, мы настроили минимальную конфигурацию для локальной сети. При необходимости можем добавить в LAN-bridge другие порты. В нашей сети есть DHCP-сервер и все новые устройства смогут получить уникальные ip адреса.

Настройка WiFi

Вообще настройка wifi отдельная и сложная тема, у mikrotik есть даже отдельная сертификация по работе с беспроводными сетями, но для начала нам хватит типовой конфигурации.

Добавляем политику безопасности, иными словами настройки авторизации для нашей сети:

interface/wireless/security-profiles add authentication-types=wpa2-psk wpa2-pre-shared-key=Password123 name=lan mode=dynamic-keys disable-pmkid=yes

Отдельно стоит остановится на параметре disable-pmkid=yes, он предотвращает некоторые виды атак на точку доступа, но может привнести проблемы обратной совместимости для некоторых устройств. По умолчанию стоит включить, а если будут проблемы с подключением, то можно подумать о выключении.

Далее нужно настроить два wifi интерфейса, для 2,4ГГц и 5ГГц соотвтетственно. Тут подробно останавливаться не буду, так как настройка wifi подробно расписана в множестве других статей. Приведу только конфигурацию которую я выбрал для себя:

interface/wireless set [find name=wlan2] mode=ap-bridge band=2ghz-onlyn channel-width=20/40mhz-XX ssid=Shushera-test security-profile=lan wireless-protocol=802.11 wps-mode=disabled country=russia4 distance=indoors adaptive-noise-immunity=ap-and-client-mode frequency=auto

interface/wireless set [find name=wlan1] mode=ap-bridge band=5ghz-onlyac channel-width=20/40/80mhz-XXXX ssid=Shushera-test security-profile=lan wireless-protocol=802.11 wps-mode=disabled country=russia4 distance=indoors adaptive-noise-immunity=ap-and-client-mode frequency=auto

Отдельно остановиться, пожалуй, нужно только на country=russia4, этот параметр отвечает за региональные ограничения, такие как максимальная мощность передатчика, разрешенные частоты и другие. Что бы не нарушать случайно не нарушить законодательство рекомендую выставить страну russia4.

Добавляем интерфейсы в наш LAN-bridge:

interface/bridge/port add interface=wlan1 bridge=LAN-bridge
interface/bridge/port add interface=wlan2 bridge=LAN-bridge

Включаем интерфейсы (wifi интерфейсы выключены по умолчанию):

interface/wireless/enable wlan1
interface/wireless/enable wlan2

Все, теперь можем продолжить настройку уже в комфортной обстановке, лежа на диване и без лишних проводов.

Базовая настройка безопасности

Теперь, перед подключением интернета, настроим немного безопасности.

Выключаем ipv6, так как мы его пока не используем и не хотим что бы mikrtoik как либо обрабатывал этот вид трафика:

ipv6/settings set disable-ipv6=yes forward=no

Выключаем mac-server (это подключение через mac адрес, которое мы использовали в самом начале).

tool/mac-server set allowed-interface-list=none
tool/mac-server/mac-winbox set allowed-interface-list=none

Проверяем, пробуем подключится по mac адресу - не получается, значит мы все сделали правильно, но mikrotik все еще обнаруживается в сети через Neighbors, где можно посмотреть модель и uptime. Выключаем такое обнаружение:

tool/mac-server ping set enabled=no

Проверяем - все равно обнаруживается, это потому, что за подобное обнаружение в mikrotik отвечает другой сервис, выключаем его тоже:

ip/neighbor/discovery-settings set discover-interface-list=none

Вот теперь mikrotik больше не обнаруживается и не выдает дополнительной информации о себе. При желании можно разрешить подобные манипуляции из LAN-bridge, но я предпочитаю полностью отключать подобные сервисы.

Выключаем другие сервисы, которые нам пока не нужны:

ip/service disable api
ip/service disable api-ssl
ip/service disable ftp
ip/service disable telnet
ip/service disable www
ip/service disable ssh

Тут нужно быть чуть-чуть осторожным что бы не отключить случайно winbox иначе мы больше не сможем подключиться к роутеру и останется только сброс конфигурации и настройка с нуля или восстановление из бэкапа (которых мы пока не делали).

Давайте исправим это упущение и сделаем первый бекап на случай если позже мы ошибемся в конфигурации и потеряем доступ к роутеру:

system/backup/save name=back01

Стоит обратить внимание, что по умолчанию mikrotik шифрует бекапы использую пароль текущего пользователя в качестве ключа, а значит для восстановления понадобится актуальный на момент бэкапа пароль. Так же это означает что имея на руках бэкап злоумышленник может попробовать подобрать пароль локально, не пытаясь подключится к роутеру. Пароль можно изменить или вовсе убрать, но учтите, что в бэкапе так же лежит пароль от wifi и другие все другие sensitive данные. Я пока что буду делать бэкапы с дефолтным паролем, так как, пока нам негде их хранить кроме самого роутера и локального компьютера. Позже я настрою централизованный сбор и хранение бекапов.

Настройка доступа в интернет

Тут алгоритм действий может отличаться в зависимости от провайдера, я буду настраивать на примере Beeline. Этот оператор требует получить ip адрес используя dhcp клиент, после чего авторизоваться на сайте. Далее авторизация будет привязана к mac адресу порта и при изменении mac адреса будет требоваться повторный вход.

Конечно можно начать настройку сразу с сети провайдера, но так как я все же делаю домашнюю лабораторию то хочу для начала проверить настройки и провести замеры на тестовом стенде. Поэтому я настроил другой роутер следующим образом:

  • Имеет ip 77.77.77.77/24 на порту через который я буду подключаться.
  • Имеет dhcp сервер для выдачи ip адреса.
  • Имеет ip 88.88.88.88 на другом порту (будем использовать этот ip для проверки NAT).

Далее подключаем наш тестовый "интернет" ко второму порту роутера (первый я пока не буду использовать, так как на нем находится poe-in и его можно будет использовать позже для резервирования питания).

Далее создаем WAN-bridge (лучше использовать bridge вместо прямой работы с интерфейсом, так мы всегда сможем поменять порт не меняя всю остальную конфигурацию) и поднимаем на нем dhcp клиент:

interface/bridge/add name=WAN1-bridge
interface/bridge/port add interface=ether2 bridge=WAN1-bridge
ip/dhcp-client/add interface=WAN1-bridge add-default-route=yes

После этого mikrotik получит ip адрес, а так же добавит default-gateway через полученный от dhcp сервера default-gateway. Проверим это пропинговав 77.77.77.77 и 88.88.88.88. С роутера все пингуется, однако не все так хорошо, если попробовать пинговать с нашего ноутбука подключенного к LAN сети, то мы увидим что пинг не проходит. Это происходит из-за того что на вышестоящем роутере нет маршрутов в нашу LAN сеть и, так как повлиять на настройки оборудования провайдера мы не можем, то нам необходимо настроить nat:

ip/firewall/nat add chain=srcnat action=masquerade out-interface=WAN1-bridge comment="WAN1 NAT"

После этого все пинги должны заработать и в случае с реальным провайдером мы сможем зайти на страницу авторизации, авторизоваться и пользоваться интернетом.

Настройка firewall

Теперь пора настроить firewall, но так как я все же строю лабораторию, то для начала проверим, можем ли мы вообще достучаться из сети провайдера до наших устройств (мы ведь настроили нат?). Ожидаемо, чуда не произошло и, если прописать на роутере имитирующем сеть провайдера маршруты до нашей сети, то мы сможем подключаться из внешней сети к внутренним устройствам, и NAT в данном случае не сработает, так как настроен только для исходящих соединений.

Настроим простой типовой firewall:

/ip firewall filter
add action=drop chain=forward comment="drop invalid" connection-state=invalid
add action=accept chain=forward comment="accept established related" connection-state=established,related
add action=accept chain=forward comment="accept all from LAN-bridge" in-interface=LAN-bridge
add action=accept chain=forward comment="accept icmp" protocol=icmp
add action=drop chain=forward comment="drop all"
add action=drop chain=input comment="drop invalid" connection-state=invalid
add action=accept chain=input comment="accept established related" connection-state=established,related
add action=accept chain=input comment="accept all from LAN-bridge" in-interface=LAN-bridge
add action=accept chain=input comment="accept icmp" protocol=icmp
add action=drop chain=input comment="drop all"

Разрешаем все из LAN сети, и ограничиваем доступ из WAN.

Один интересный момент - мы разрешили весь icmp трафик. Это, конечно позволит сканировать нашу сеть со стороны провайдера, но полная блокировка icmp трафика может привести к куче проблем, например, сломать работу path mtu discovery. Возможно, в будущем я настрою более строгие правила работы с icmp трафиком, но пока остановился на таких.

Замеры производительности сети

Сколько нужно устройств что бы измерить производительность сети?
Сколько нужно устройств что бы измерить производительность сети?

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

  • Встроенные тесты скорости mikrotik сильно нагружает роутер, из-за чего мой слабенький роутер который играет роль провайдера просто не смог выжать гигабит уперевшись в cpu. Решил эту проблему добавив отдельный хост в сеть "провайдера", до которого и тестировал скорость.
  • Моя usb-c гигабитная сетевая карта оказалась не совсем гигабитной, упиралась в 200мб/с на отдачу и 800мб/с на загрузку. Пришлось добавить еще один хост в LAN сети и тестировать с него.

В итоге тестировал с помощью утилиты iperf. Проводил только тесты скорости загрузки (iperf не умеет тестировать upload через nat). Результаты получились следующими:

  • Прямая маршрутизация (без NAT) TCP 960 мб/с 20% cpu.
  • Маршрутизация через NAT (firewall выключен) TCP 960 мб/с 40% cpu.
  • Маршрутизация через NAT (firewall включен) TCP 960мб/с 42% cpu.

Для UDP потребление CPU было на 4-8% меньше чем для TCP.

Как видно с данной конфигурацией mikrtoik спокойно может пропустить гигабит через nat+firewall. Да, на небольших пакетах результаты могут быть хуже, но пока у нас есть большой запас по CPU, да и скорость интернета у меня 500мб/с а не гигабит. Так же мы пока не применяли правила fasttrack которые могли бы еще улучшить производительность за счет некоторых компромисов. В целом я доволен результатом, если в будущем упрусь в cpu то буду думать над оптимизациями.

Подключение через доменное имя

Теперь, когда основные настройки завершены можно подумать о нескольких удобствах и одно из них - использование доменных имен вместо ip адресов. Тут нам понадобиться всего пару кликов:

  • Установим identity равным его доменному имени (это делается исключительно для удобства):
/system identity set name=sw1.home2.vs

  • Добавим static запись в наш dns сервер:
/ip dns static add address=10.29.0.1 name=sw1.home2.vs

Теперь мы можем подключаться к используя доменные имена.

Настройка доступа через VPN

И напоследок настроим доступ через VPN что бы дальнейшую настройку можно было проводить из удаленной локации.

Я выбрал wireguard как самый простой в настройке протокол который поддерживается микротиком из коробки. Сделаем минимальную настройку для подключения с ноутбука:

/interface wireguard add listen-port=13231 mtu=1420 name=wireguard1
/interface wireguard peers add allowed-address=10.29.5.2/32 interface=wireguard1 public-key="<client_public_key>"
/ip address add address=10.29.5.1/24 interface=wireguard1 network=10.29.5.0

Так же добавим несколько правил в firewall что бы иметь возможность подключаться с WAN порта и иметь доступ во все подсети:

/ip firewall filter
add action=accept chain=forward comment="accept all form wireguard1" in-interface=wireguard1
add action=accept chain=input comment="accept all form wireguard1" in-interface=wireguard1
add action=accept chain=input comment="accept wireguard1 connections" dst-port=13231 protocol=udp

Естественно эти правила нужно будет поднять выше заключающего правила drop.

Настройки на клиенте будут такие:

[Interface]
PrivateKey = <client_privete_key>
Address = 10.29.5.2/32
DNS = 10.29.5.1
[Peer]
PublicKey = <server_public_key>
AllowedIPs = 10.29.0.0/16, 10.30.0.0/16
Endpoint = <router_public_ip>:13231

На этом все, теперь можно подключаться из удаленной локации.