UMGUM.COM (лучше) 

Базовая конфигурация MikroTik (CLI) ( Создание простейшей конфигурации для обеспечения работы небольшого офиса с парой десятков пользователей. )

6 января 2015  (обновлено 26 января 2019)

Hard: "MikroTik RB/CCR".
OS: "RouterOS v6".

Задача: создать простейшую конфигурацию маршрутизатора "MikroTik" для обеспечения работы типового небольшого офиса с парой десятков пользователей и двумя-тремя серверами.

Сразу после запуска ненастроенного (или сброшенного до заводского состояния) устройства для доступа к его конфигурации есть два пути: включиться в один из портов (обычно второй и следующие, в зависимости от модели) ethernet-порт (как правило по умолчанию на устройстве запущен DHCP-сервер, выдающий клиентам сетевой адрес) или воспользоваться более простым и надёжным RS-232 (через кабель DB-9). Я предпочитаю последний способ - это не вынуждает меня выключаться из сети, в которой я уже нахожусь:

$ minicom --device /dev/ttyUSB0 --baudrate 115200 --8bit --noinit


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

> /system reset-configuration

Аналогичного эффекта сброса настроек до заводских можно достигнуть следующей последовательностью действий:

1. Выключаем питание.
2. Зажимаем кнопку "Reset".
3. Удерживая кнопку "Reset" включаем питание.
4. Отпускаем кнопку "Reset", пока ещё мигает индикатор загрузки.

При входе на устройство сразу после сброса "мастером настройки" будет предложено применить "конфигурацию по умолчанию", но нам это не нужно - отказываемся путём нажатия клавиши "r".

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

> /export

Обращаю внимание, что в версии "RouterOS v6.41" аппаратную L2-коммутацию полностью перенесли на bridge-интерфейсы, отменив ранее использовавшиеся switch-группировки (через опции "master port") - новая реализация "прозрачного моста" поддерживает "аппаратную разгрузку (hardware offload)". Настоятельно рекомендую обновиться до версии v6.41 и выше, так описываемая здесь конфигурация основана уже на новом функционале мостового интерфейса.

Первичные настройки доступа.

Устанавливаем пароль для текущего пользователя "admin":

> /password old-password=""

Заводим дополнительного пользователя и выдаём ему полномочия суперпользователя:

> /user add name=superuser group=full password="<userPassword>"

Выключаем все сервисы управления устройством, кроме SSH, "winbox" и COM-порта:

> /ip service disable telnet,ftp,www,www-ssl,api,api-ssl

Активируем повышенный уровень шифрования сеансов SSH и запрещаем транзитные подключения:

> /ip ssh set strong-crypto=yes
> /ip ssh set forwarding-enabled=no

Ради повышения уровня пассивной безопасности разрешаем обращения к "winbox" только из локальной сети - для настройки извне достаточно SSH:

> /ip service set winbox address=192.168.1.0/24

Настраиваем сетевое именование.

Задаём символическое сетевое имя (FQDN) устройству:

> /system identity set name=mrtr0.example.net

Задаём набор NS-серверов, к которым следует отправлять DNS-запросы (в примере Google и Yandex):

> /ip dns set servers=8.8.8.8,8.8.4.4

Разрешаем обслуживание маршрутизатором рекурсивных DNS-запросов от пользователей:

> /ip dns set allow-remote-requests=yes

Устанавливаем точное системное время.

Наверняка изначально может потребоваться явно указать желаемый часовой пояс (пример для Новосибирска):

> /system clock set time-zone-autodetect=no time-zone-name=Asia/Novosibirsk

Задаём внешний источник данных для автоматической синхронизации времени:

> /system ntp client set enabled=yes server-dns-names=0.asia.pool.ntp.org

Сразу по применению новых параметров даты и времени система попытается синхронизировать его с указанными time-серверами.

Позволяем маршрутизатору делиться сведениями о точном времени, активируя NTP-Server:

> /system ntp server set enabled=yes

Об аппаратных чипах и логике коммутации.

Ранее (до "RouterOS v6.41") на большинстве "Mikrotik" в настройках по умолчанию была предустановлена схема из двух уровней коммутации: группа ethernet-интерфейсов собирается в "switch-group" (трафик которой обслуживается только в рамках подключения к физическому чипу коммутации, коих может быть несколько), а порты "switch-group" через произвольный "master-port" (таковым может быть назначен любой из портов группы) вводятся в мостовой виртуальный интерфейс "bridge", коммутирующий (уже на уровне центрального процессора) пакеты "switch-group", автономных ethernet-интерфейсов и беспроводного интерфейса, предоставляя им единое L2 адресное пространство.

С внедрением "hardware offload" в мостовых интерфейсах прослойка "switch-group" была исключена из схемы, что сильно упростило её с точки зрения первичного конфигурирования - теперь по умолчанию все сетевые интерфейсы (кроме WAN) введены в виртуальный "прозрачный мост".

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

Рекомендую сразу разделить по разным группам коммутации проводные и беспроводные интерфейсы (помним, что по умолчанию они сведены в "прозрачный мост") с тем, чтобы иметь возможность подключающихся беспроводных клиентов в любых комбинациях изолировать от работающих в проводной сети пользователей, а порты последней распределить в соответствии с назначением, функционально изолировав их в рамках аппаратных чипов.

Планируем распределение сетевых интерфейсов по задачам.

В дальнейшей настройке будем исходить из потребности в следующих сущностях:

WAN1  - интерфейс для подключения к первому провайдеру;
WAN2  - интерфейс для подключения ко второму провайдеру;
LAN1  - виртуальный интерфейс для обслуживания локальной сети;
DMZ1  - виртуальный интерфейс для подключения DMZ-сети;
WLAN1 - интерфейс беспроводного контроллера.

Если устройство начального уровня, то в нём немного физических портов и может статься, что каждый из них будет задействован в своей задаче с индивидуальной сетевой IP-адресацией. Если ethernet-портов больше, чем задач, что часть из них можно свести в группы коммутации, получив в итоге картину вроде нижеследующей:

switch1 - первый чип коммутации (GigabitEthernet):
  WAN1:
    ether1 - первый провайдер;
  LAN1:
    bridge1 - группа коммутации:
      ether2 - первый клиентский коммутатор;
      ether3 - второй клиентский коммутатор;
      ether4 - рабочая станция;
      ether5 - сетевой принтер;
switch2 - второй чип коммутации (FastEthernet):
  WAN2:
    ether6 - второй провайдер;
  DMZ1:
    bridge2 - группа коммутации:
      ether7  - первый сервер;
      ether8  - второй сервер;
      ether9  - сетевая АТС;
      ether10 - СХД;
WLAN1:
  wlan1 - беспроводная сеть.

Конфигурируем локальные сетевые подключения.

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

> /interface ethernet
> set [ find default-name=ether1 ] name=ether1-WAN1
> set [ find default-name=ether2 ] name=ether2-LAN1
> set [ find default-name=ether3 ] name=ether3-LAN1
> set [ find default-name=ether4 ] name=ether4-LAN1
> set [ find default-name=ether5 ] name=ether5-LAN1
> set [ find default-name=ether6 ] name=ether6-WAN2
> set [ find default-name=ether7 ] name=ether7-DMZ1
> set [ find default-name=ether8 ] name=ether8-DMZ1
> set [ find default-name=ether9 ] name=ether9-DMZ1
> set [ find default-name=ether10 ] name=ether10-DMZ1

Создаём "мостовые интерфейсы", которые будут играть роль виртуальных коммутаторов:

> /interface bridge add auto-mac=yes name=BR-LAN1 protocol-mode=rstp
> /interface bridge add auto-mac=yes name=BR-DMZ1 protocol-mode=rstp

Подключаем к виртуальным "мостовым интерфейсам" соответствующие сетевые физические интерфейсы:

> /interface bridge port
> add bridge=BR-LAN1 interface=ether2-LAN1
> add bridge=BR-LAN1 interface=ether3-LAN1
> add bridge=BR-LAN1 interface=ether4-LAN1
> add bridge=BR-LAN1 interface=ether5-LAN1
> add bridge=BR-DMZ1 interface=ether7-DMZ1
> add bridge=BR-DMZ1 interface=ether8-DMZ1
> add bridge=BR-DMZ1 interface=ether9-DMZ1
> add bridge=BR-DMZ1 interface=ether10-DMZ1

Проверяем, получилось ли задуманное распределение интерфейсов:

> /interface print

... R - running, S - slave
....
0    ether1-WAN1  ether ...
1  S ether2-LAN1  ether ...
2  S ether3-LAN1  ether ...
3  S ether4-LAN1  ether ...
4 RS ether5-LAN1  ether ...
5    ether6-WAN2  ether ...
6  S ether7-DMZ1  ether ...
7  S ether8-DMZ1  ether ...
8  S ether9-DMZ1  ether ...
9  S ether10-DMZ1 ether ...
10 sfp1           ether ...
11 X wlan1        wlan ...
12 R BR-DMZ1      bridge ...
13 R BR-LAN1      bridge ...

В следующем выводе сведений об участниках имеющихся "прозрачных мостов" хорошо видно, для каких интерфейсов (всех в примере) активна "аппаратная разгрузка (hardware offload)" - это значит, что между интерфейсами в рамках обоих групп коммутации пакеты будут передаваться с максимальной скоростью - обрабатываемые на аппаратном уровне, без привлечения медленного центрального CPU:

> /interface bridge port print

... I - inactive, H - hw-offload
....
0 I H ether2-LAN1  BR-LAN1 ...
1 I H ether3-LAN1  BR-LAN1 ...
2 I H ether4-LAN1  BR-LAN1 ...
3   H ether5-LAN1  BR-LAN1 ...
4 I H ether7-DMZ1  BR-DMZ1 ...
5 I H ether8-DMZ1  BR-DMZ1 ...
6 I H ether9-DMZ1  BR-DMZ1 ...
7 I H ether10-DMZ1 BR-DMZ1 ...

Назначаем "мостовым интерфейсам" локальных сетей IP-адреса:

> /ip address add address=192.168.1.1/24 interface=BR-LAN1
> /ip address add address=10.10.1.1/24 interface=BR-DMZ1

Результат наших действий по назначению IP-адресов:

> /ip address print

# ADDRESS        NETWORK     INTERFACE
0 192.168.1.1/24 192.168.1.0 BR-LAN1
1 10.10.1.1/24   10.10.1.0   BR-DMZ1

Конфигурируем беспроводное сетевое подключение.

Беспроводной интерфейс по умолчанию переведён под управление модуля CAPsMAN (Controlled Access Point system Manager) - контроллера беспроводных точек, призванного упростить настройку и управление единой Wi-Fi-сетью (аналог UniFi-сети на устройствах "Ubiquiti") с бесшовным роумингом:

> /interface wireless cap print

enabled: yes
interfaces: wlan1
....

Хорошо, но для одиночного устройства не нужно - отключаем привязку беспроводного интерфейса к системе CAP:

> /interface wireless cap set interfaces="" discovery-interfaces=""
> /interface wireless cap set enabled=no

Создаём выделенный профиль, описывающий метод аутентификации пользователя в беспроводной сети:

> /interface wireless security-profiles add name=staff-profile authentication-types=wpa2-psk group-ciphers=tkip,aes-ccm mode=dynamic-keys unicast-ciphers=tkip,aes-ccm wpa2-pre-shared-key=<secureWiFiKey>

Задаём параметры сети, обслуживаемой беспроводным интерфейсом, заодно привязав к нему заранее подготовленный профиль аутентификации:

> /interface wireless set wlan1 band=2ghz-b/g/n channel-width=20mhz default-forwarding=no disabled=no mode=ap-bridge security-profile=staff-profile ssid=zsmtu wps-mode=disabled

Задаём IP-адрес беспроводному интерфейсу и включаем таковой:

> /ip address add address=172.16.1.1/24 interface=wlan1
> /interface enable wlan1

Настраиваем автоматическую выдачу IP-адресов.

Запускаем DHCP-сервер для обслуживания клиентов локальной сети:

> /ip pool add name=DHCP_LAN1_POOL ranges=192.168.1.100-192.168.0.250
> /ip dhcp-server add name=DHCP_LAN1 interface=BR-LAN1 address-pool=DHCP_LAN1_POOL lease-time= 22d disabled=no
> /ip dhcp-server network add address=192.168.1.0/24 gateway=192.168.1.1 netmask=255.255.255.0 dns-server=192.168.1.1 ntp-server=192.168.1.1

При необходимости фиксируем IP-адрес компьютера пользователя за его аппаратным MAC-адресом:

> /ip dhcp-server lease add server=DHCP_LAN1 address=192.168.1.51 mac-address=00:AA:B0:C0:A6:F1 comment="workstation-one"

Запускаем DHCP-сервер для обслуживания клиентов беспроводной сети:

> /ip pool add name=DHCP_WLAN1_POOL ranges=172.16.1.10-172.16.1.254
> /ip dhcp-server add name=DHCP_WLAN1 interface=wlan1 address-pool=DHCP_WLAN1_POOL lease-time= 7d disabled=no
> /ip dhcp-server network add address=172.16.1.0/24 gateway=172.16.1.1 netmask=255.255.255.0 dns-server=172.16.1.1

Удостоверяемся, что наши DHCP-серверы активны в заданной конфигурации:

> /ip pool print
> /ip dhcp-server print
> /ip dhcp-server network print detail

А вот так можно просмотреть список выданных пользователям сетей IP-адресов:

> /ip dhcp-server lease print

Конфигурируем внешние сетевые подключения.

Задаём внешнему интерфейсу первого (основного) провайдера IP-адрес:

> /ip address add address=123.45.67.90 netmask=255.255.255.248 interface=ether1-WAN1 disabled=no comment="ISP1"

Объявляем маршрут "по умолчанию", отправляющий весь нераспределённый трафик в сеть первого провайдера "ISP1":

> /ip route add check-gateway=ping comment="GW1" disabled=no distance=1 dst-address=0.0.0.0/0 gateway=123.45.67.89 scope=30 target-scope=10

Задаём параметры подключения ко второму, резервному интернет-провайдеру (например через xDSL-модем, выдающего динамические адреса на линии связи). По логике маршрутизации мы не должный принимать от DHCP-сервера провайдера "маршрут по умолчанию", нам достаточно просто получить адресацию, чтобы интерфейс был активен - но в комбинации "DHCP + StaticRoute" Mikrotik не вполне корректно отрабатывает маршруты на стыке сетей - так что сразу заводим второй "маршрут по умолчанию", но делаем его менее приоритетным:

> /ip dhcp-client add interface=ether6-WAN2 add-default-route=yes disabled=no comment="ISP2"
> /ip route add check-gateway=ping comment="GW2" disabled=no distance=2 dst-address=0.0.0.0/0 gateway=ether6-WAN2 scope=30 target-scope=10

Просматриваем получившуюся таблицу простейшей статической маршрутизации:

> /ip route print

... D - dynamic, S - static ...
#   DST-ADDRESS ... GATEWAY  DISTANCE
0 S ;;; GW1
    0.0.0.0/0       123.45.67.89    1
1 S ;;; GW2
    0.0.0.0/0       ether6-WAN2     2
....

Настраиваем трансляцию запросов из локальной сети в интернет.

Так как внутри "MikroTik" живёт "Linux", управление сетевым трафиком и модификация пакетов реализовано через подсистему ядра "netfilter", только вместо обвязки "iptables" здесь оперируют сущностью "firewall".

Для упрощения дальнейшего конфигурирования отношений между подсетями составляем списки таковых:

> /ip firewall address-list
> add address=192.168.1.0/24 list=LIST_INET_USERS_IP
> add address=172.16.1.0/24 list=LIST_INET_USERS_IP
> add address=10.10.1.0/24 list=LIST_DMZ_IP
> add address=123.45.67.88/29 list=LIST_WAN_IP

Задаём правила NAPT/PAT (NAT Overload/Port Address Translation) трансляции локальных сетевых адресов пользователей во внешние, при обращении за сетевые интерфейсы провайдеров:

> /ip firewall nat add action=src-nat chain=srcnat comment="NAPT/PAT via WAN1" out-interface=ether1-WAN1 src-address-list=LIST_INET_USERS_IP to-addresses=123.45.67.90
>
> /ip firewall nat add action=masquerade chain=srcnat comment="NAPT/PAT via WAN2" disabled=yes out-interface=ether6-WAN2 src-address-list=LIST_INET_USERS_IP

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

> /ip firewall nat print

....
1 ;;; NAPT/PAT via WAN1
  chain=srcnat action=src-nat to-addresses=123.45.67.90 src-address-list=LIST_INET_USERS_IP out-interface=ether1-WAN1 log=no log-prefix=""

2 ;;; NAPT/PAT via WAN2
  chain=srcnat action=masquerade src-address-list=LIST_INET_USERS_IP out-interface=ether6-WAN2 log=no log-prefix=""

Настраиваем трансляцию запросов из внешней сети к локальным ресурсам.

Наверняка потребуется обеспечить доступность внутреннего сервиса, спрятанного за "MikroTik", извне.

Добавляем правила DNAT (Destination NAT), разрешающие пропуск трафика снаружи к определённым сервисам и портам:

> /ip firewall nat
> add action=dst-nat chain=dstnat comment="DNS: ns.example.net" dst-address=123.45.67.92 dst-port=53 protocol=tcp to-addresses=10.10.1.2 to-ports=53
> add action=dst-nat chain=dstnat comment="DNS: ns.example.net" dst-address=123.45.67.92 dst-port=53 protocol=udp to-addresses=10.10.1.2 to-ports=53

Если нужно обеспечить как пропуск трафика извне, так и вывод такового наружу через определённый внешний IP-адрес, то к правилу DNAT добавим ещё и SNAT (Source NAT) - например, для всего сетевого узла в целом:

> /ip firewall nat
> add action=dst-nat chain=dstnat comment="NAT To: example.net" dst-address=123.45.67.33 to-addresses=10.10.0.3
> add action=src-nat chain=srcnat comment="NAT From: example.net" src-address=10.10.0.3 to-addresses=123.45.67.33

Более глубокую настройку защитного экрана, как такового рассмотрим в отдельной заметке.

Выключаем ненужное.

Деактивируем ненужные в простом офисе функциональные модули:

> /system package disable ipv6,hotspot,mpls

Выключаем сервисы мониторинга (Ping) и управления (Telnet, Winbox), принимающие подключения с указанием MAC-адреса, если IP-адрес интерфейсу не выдан:

> /tool mac-server ping set enabled=no
> /tool mac-server set allowed-interface-list=none
> /tool mac-server mac-winbox set allowed-interface-list=none

Выключаем для всех сетевых интерфейсов сервис автоматического поиска соседних сетевых устройств посредством LLDP-запросов - в небольшом офисе и так известно, что к чему подключено:

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

Выключаем сервис, предназначенный для приёма подключений с целью тестирования пропускной способности:

> /tool bandwidth-server set enabled=no

Явно выключаем сервисы проксирования клиентских запросов:

> /ip proxy set enabled=no
> /ip socks set enabled=no

LCD-экранчик у Mikrotik откровенно неудобный - выключаем, не особо разбираясь в его возможностях:

> /lcd interface pages set 0 interfaces=ether1-WAN1
> /lcd set default-screen=stats-all read-only-mode=yes touch-screen=disabled
> /lcd set enabled=no

Всё, на данном этапе мы имеем устройство, готовое к обслуживанию сети небольшого офиса.


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )