Страница 1 из 1

Балансировка нагрузки, VLAN, DHCP-серверов и работы с тегированными/нетегированными сетями

Добавлено: 22 июл 2025, 11:08
ya
Задача:

Имеется пятипортовый микротик.
Первый и второй порты - это интернет от разных компаний.
Третий, четвёртый и пятый - это локальная сеть
Необходимо настроить балансировку нагрузки по основному шлюзу от интернет - компаний до локальной сети
В локальной сети необходимо поднять vlan, каждый из которых не более чем на 1024 хоста, а так же поднять для каждой из локальных сетей свой dhcp-сервер
Третий порт содержит три тэгированных подсети
Четвёртый порт содержит две нетэгированных подсети
Пятый порт содержит одну нетеэгированную подсеть

Балансировка нагрузки, VLAN, DHCP-серверов и работы с тегированными/нетегированными сетями

Общие требования:
5 портов:
Порты 1 и 2 — интернет с разных провайдеров
Порты 3, 4, 5 — локальная сеть
Балансировка нагрузки по основному шлюзу (двух интернет-каналов)
VLAN на порту 3 (тэгированные подсети) — несколько VLAN, не более 1024 хостов
На портах 4 и 5 — нетэгированные подсети
Для каждого VLAN — свой DHCP-сервер

1. Общая схема и интерфейсы
Порт Назначение
Ether1 Интернет 1 (первый провайдер)
Ether2 Интернет 2 (второй провайдер)
Ether3 Локальная сеть (тэгированные VLAN)
Ether4 Локальная сеть (нетэгированные подсети)
Ether5 Локальная сеть (нетэгированная подсеть)

2. Настройка балансировки нагрузки
Для балансировки нагрузки по двум WAN-интерфейсам используем PCC или NAT с mangle. Это пример базовой настройки с использованием per-connection-classifier.

Код: Выделить всё

# Создаем два интерфейса для интернет-каналов
/interface ethernet
set [find name="ether1"] comment="ISP1"
set [find name="ether2"] comment="ISP2"

/ip address
# Предположим, у вас есть публичные IP для каждого интерфейса
/ip address
add address=192.0.2.2/30 interface=ether1 comment="ISP1 gateway"
add address=198.51.100.2/30 interface=ether2 comment="ISP2 gateway"

/ip route
# Основные маршруты
add gateway=192.0.2.1 comment="ISP1 gateway"
add gateway=198.51.100.1 comment="ISP2 gateway"

/ip firewall mangle
# Маршрутизация для балансировки
add chain=prerouting in-interface=ether3 connection-mark=no-mark \
    per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection \
    new-connection-mark=isp1_conn
add chain=prerouting in-interface=ether3 connection-mark=no-mark \
    per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection \
    new-connection-mark=isp2_conn

add chain=prerouting connection-mark=isp1_conn action=mark-routing \
    new-routing-mark=to-isp1
add chain=prerouting connection-mark=isp2_conn action=mark-routing \
    new-routing-mark=to-isp2

# Маршруты для балансировки
/ip route
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-mark=to-isp1 check-gateway=ping
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-mark=to-isp2 check-gateway=ping
Это базовая примерная настройка. Можно усложнить балансировку, добавив весовые коэффициенты и автоматическое переключение.

3. Настройка VLAN на порте 3
Порт 3 содержит три тэгированные VLAN, каждая с подсетями не более 1024 хостов (~/22).

Создание VLAN интерфейсов:

Код: Выделить всё

/interface vlan
add interface=ether3 name=vlan10 vlan-id=10
add interface=ether3 name=vlan20 vlan-id=20
add interface=ether3 name=vlan30 vlan-id=30
Назначение IP-адресов для VLAN:

Код: Выделить всё

/ip address
add address=192.168.10.1/22 interface=vlan10
add address=192.168.20.1/22 interface=vlan20
add address=192.168.30.1/22 interface=vlan30
DHCP-серверы для VLAN:

Код: Выделить всё

/ip dhcp-server
add address-pool=pool10 interface=vlan10 name=dhcp10
add address-pool=pool20 interface=vlan20 name=dhcp20
add address-pool=pool30 interface=vlan30 name=dhcp30

/ip pool
add name=pool10 ranges=192.168.10.2-192.168.10.1023
add name=pool20 ranges=192.168.20.2-192.168.20.1023
add name=pool30 ranges=192.168.30.2-192.168.30.1023

/ip dhcp-server network
add address=192.168.10.0/22 gateway=192.168.10.1
add address=192.168.20.0/22 gateway=192.168.20.1
add address=192.168.30.0/22 gateway=192.168.30.1
4. Настройка портов 4 и 5 — нетэгированные подсети
Допустим, у вас есть следующие сети:

Порт 4: 192.168.40.0/24 и 192.168.41.0/24
Порт 5: 192.168.50.0/24
Настраиваем IP-адреса на интерфейсах:

Код: Выделить всё

/ip address
add address=192.168.40.1/24 interface=ether4
add address=192.168.41.1/24 interface=ether4
add address=192.168.50.1/24 interface=ether5
Настраиваем DHCP для каждой подсети:

Код: Выделить всё

/ip pool
add name=pool40 range=192.168.40.2-192.168.40.254
add name=pool41 range=192.168.41.2-192.168.41.254
add name=pool50 range=192.168.50.2-192.168.50.254

/ip dhcp-server
add address-pool=pool40 interface=ether4 name=dhcp40
add address-pool=pool41 interface=ether4 name=dhcp41
add address-pool=pool50 interface=ether5 name=dhcp50

/ip dhcp-server network
add address=192.168.40.0/24 gateway=192.168.40.1
add address=192.168.41.0/24 gateway=192.168.41.1
add address=192.168.50.0/24 gateway=192.168.50.1

Re: Балансировка нагрузки, VLAN, DHCP-серверов и работы с тегированными/нетегированными сетями

Добавлено: 22 июл 2025, 11:15
ya
Пример настройки маршрутов и правил NAT для балансировки входящего и исходящего трафика.

1. Настройка mangle для балансировки
Это уже было частично рассмотрено, но я повторю и дополню для полноты.

Мульти-WAN балансировка с помощью per-connection-classifier

Код: Выделить всё

/ip firewall mangle
# Маркируем соединения по исходным IP и портам
add chain=prerouting in-interface=ether3 connection-mark=no-mark \
    per-connection-classifier=both-addresses-and-ports:2/0 action=mark-connection \
    new-connection-mark=isp1_conn
add chain=prerouting in-interface=ether3 connection-mark=no-mark \
    per-connection-classifier=both-addresses-and-ports:2/1 action=mark-connection \
    new-connection-mark=isp2_conn

# Маркируем маршруты для соединений
add chain=prerouting connection-mark=isp1_conn action=mark-routing \
    new-routing-mark=to-isp1
add chain=prerouting connection-mark=isp2_conn action=mark-routing \
    new-routing-mark=to-isp2
2. Маршруты с routing-mark
Далее, добавляем маршруты с routing-mark, чтобы трафик шел через правильный интерфейс:

Код: Выделить всё

/ip route
# Основной маршрут для интернета через первый провайдер
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-mark=to-isp1 check-gateway=ping

# Основной маршрут через второй провайдер
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-mark=to-isp2 check-gateway=ping
192.0.2.1 и 198.51.100.1 — это шлюзы для интернет-интерфейсов

3. Настройка NAT (маскаратинг)
Чтобы обеспечить выход в интернет с локальной сети через оба канала, необходимо настроить masquerade:

Код: Выделить всё

/ip firewall nat
# Маскарад для первого WAN
add chain=srcnat out-interface=ether1 action=masquerade

# Маскарад для второго WAN
add chain=srcnat out-interface=ether2 action=masquerade
Если хотите более точную маршрутизацию, можно настроить src-nat с routing-mark, чтобы исходящий трафик через определенный интерфейс использовал свой маскарад.

Например:

Код: Выделить всё

# Маскарад для трафика, идущего через первый канал
add chain=srcnat out-interface=ether1 routing-mark=to-isp1 action=masquerade

# Для второго
add chain=srcnat out-interface=ether2 routing-mark=to-isp2 action=masquerade
mangle правила маркируют соединения и маршруты
routes направляют трафик через соответствующий шлюз
nat правила обеспечивают NAT для выхода в интернет.

Re: Балансировка нагрузки, VLAN, DHCP-серверов и работы с тегированными/нетегированными сетями

Добавлено: 22 июл 2025, 11:20
ya
Для усложнения балансировки с использованием весовых коэффициентов и автоматического переключения (автоматического фейловэча) на MikroTik, рекомендуется использовать протокол BGP или ECMP (Equal Cost Multi-Path). Однако в MikroTik чаще используют Routing Marks и Netwatch или Script для автоматического переключения.

Ниже я предложу пример с использованием Routing Marks, ip route с весами и простым автоматическим переключением при потере связи с одним из каналов.

1. Настройка весов через routing table
Вариант с routing table и multipath
На MikroTik можно настроить несколько маршрутов с одинаковым distance, но разными routing marks и весами.

Код: Выделить всё

/ip route
# Основной маршрут через первый канал с весом 3
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-mark=to-isp1 check-gateway=ping scope=30 distance=1

# Второй канал с меньшим весом (например, 1) — реже используемый
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-mark=to-isp2 check-gateway=ping scope=30 distance=1
Обратите внимание: Если оба маршрута имеют одинаковый distance, то MikroTik будет использовать оба для балансировки (ECMP). Вес в данном случае можно регулировать через routing table и multipath, задавая при этом routing-table с разными метками.

2. Использование Netwatch и скриптов для автоматического переключения
Для автоматического переключения при потере связи с провайдером можно использовать Netwatch и скрипты.

Пример:
Создайте Netwatch для проверки доступности шлюза провайдера

Код: Выделить всё

/tool netwatch
add host=192.0.2.1 interval=30s timeout=5s up-script=":log info \"ISP1 is up\"; /ip route enable [find comment=\"ISP1\"]" down-script=":log info \"ISP1 is down\"; /ip route disable [find comment=\"ISP1\"]"
add host=198.51.100.1 interval=30s timeout=5s up-script=":log info \"ISP2 is up\"; /ip route enable [find comment=\"ISP2\"]" down-script=":log info \"ISP2 is down\"; /ip route disable [find comment=\"ISP2\"]"
В маршрутах добавьте комментарии

Код: Выделить всё

/ip route
add dst-address=0.0.0.0/0 gateway=192.0.2.1 comment="ISP1" check-gateway=ping distance=1
add dst-address=0.0.0.0/0 gateway=198.51.100.1 comment="ISP2" check-gateway=ping distance=1
Скрипты включают/выключают маршруты при недоступности каналов, обеспечивая автоматическое переключение.

Re: Балансировка нагрузки, VLAN, DHCP-серверов и работы с тегированными/нетегированными сетями

Добавлено: 22 июл 2025, 11:25
ya
Для реализации балансировки с весовыми коэффициентами с помощью мульти-пути (ECMP) в MikroTik, можно использовать routing table и multipath, задавая разные routing marks и distance или routing table с разными metric.

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

Шаг 1. Таблицы маршрутов (routing tables) для каждого провайдера

Код: Выделить всё

/ip route
# Основной маршрут через первый провайдер - более "весомый"
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-mark=isp1 check-gateway=ping comment="Main ISP (вес 3)"

# Второй канал - менее "весомый"
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-mark=isp2 check-gateway=ping comment="Backup ISP (вес 1)"
Шаг 2. Таблицы маршрутов с routing-mark и добавьте маршруты с одинаковым distance, чтобы включить мульти-путь

Код: Выделить всё

/ip route
# Основной маршрут для обоих провайдеров, с одинаковым `distance` для использования ECMP
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-mark=isp1 check-gateway=ping scope=30 distance=1 routing-table=main comment="Main route via ISP1"

add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-mark=isp2 check-gateway=ping scope=30 distance=1 routing-table=main comment="Main route via ISP2"
routing-table=main — это таблица маршрутов по умолчанию.
Оба маршрута имеют одинаковый distance и scope, что позволяет MikroTik использовать ECMP — равное использование обоих каналов.

Шаг 3. Настройте routing mark для исходящего трафика
Чтобы весь исходящий трафик использовал эти маршруты, создайте mangle правила:

Код: Выделить всё

/ip firewall mangle
# Маркируем исходящие соединения
add chain=postrouting out-interface=ether1 connection-mark=no-mark \
    action=mark-connection new-connection-mark=isp1_conn
add chain=postrouting out-interface=ether2 connection-mark=no-mark \
    action=mark-connection new-connection-mark=isp2_conn

# Маркируем маршруты
add chain=prerouting connection-mark=isp1_conn action=mark-routing new-routing-mark=to-isp1
add chain=prerouting connection-mark=isp2_conn action=mark-routing new-routing-mark=to-isp2
И в маршрутах укажите routing-mark=to-isp1 и to-isp2, чтобы исходящий трафик направлялся через соответствующие провайдеры.

Итог
Используется ECMP с равными distance, что позволяет балансировать трафик между каналами.
Весовые коэффициенты достигаются за счет разницы в routing-mark и соответствующих маршрутах.
Можно дополнительно настроить netwatch и скрипты для автоматического переключения при сбоях.

Re: Балансировка нагрузки, VLAN, DHCP-серверов и работы с тегированными/нетегированными сетями

Добавлено: 22 июл 2025, 11:32
ya
Для более точной маршрутизации с учетом исходных IP-адресов и балансировки по каналам, можно настроить src-nat с использованием routing-mark. Это позволит исходящему трафику, исходящему через определенный интерфейс, иметь соответствующий исходный IP и проходить через нужный маршрут.

Общий подход

routing-mark для каждого провайдера.
mangle правила, чтобы маркировать исходящий трафик, исходящий через определенные интерфейсы, с соответствующим routing-mark.
src-nat, чтобы NAT применялся к маршрутам с нужным routing-mark.

маршруты с routing-mark, чтобы трафик через разные интерфейсы использовал свои маршруты.

Пример настройки

1. Создаем маршруты с routing-mark для каждого провайдера

Код: Выделить всё

/ip route
# Маршрут через провайдер 1
add dst-address=0.0.0.0/0 gateway=192.0.2.1 routing-mark=to-isp1 check-gateway=ping comment="ISP1 route"

# Маршрут через провайдер 2
add dst-address=0.0.0.0/0 gateway=198.51.100.1 routing-mark=to-isp2 check-gateway=ping comment="ISP2 route"
2. Настраиваем mangle для маркировки исходящего трафика по интерфейсу

Код: Выделить всё

/ip firewall mangle
# Маркируем трафик, исходящий через интерфейс ether1 (ISP1)
add chain=prerouting in-interface=ether1 action=mark-routing new-routing-mark=to-isp1 passthrough=yes

# Маркируем трафик, исходящий через интерфейс ether2 (ISP2)
add chain=prerouting in-interface=ether2 action=mark-routing new-routing-mark=to-isp2 passthrough=yes
3. Настраиваем src-nat, чтобы NAT применялся к нужным маршрутам

Код: Выделить всё

/ip firewall nat
# Маскарад для трафика через ISP1
add chain=srcnat out-interface=ether1 routing-mark=to-isp1 action=masquerade

# Маскарад для трафика через ISP2
add chain=srcnat out-interface=ether2 routing-mark=to-isp2 action=masquerade
Итог
Трафик, исходящий через ether1, маркируется в routing-mark=to-isp1 и NAT применяется через masquerade для этого интерфейса.
Аналогично для ether2.
Маршруты с routing-mark обеспечивают использование нужных шлюзов для каждого канала.
Такой подход позволяет точно контролировать, какой трафик идет через какой канал с соответствующим исходным IP.