Сети провайдеров на MikroTik — архитектура
Сети провайдеров на MikroTik — архитектура и проектирование
MikroTik широко используется интернет-провайдерами в России и СНГ — от небольших домовых сетей на 50 абонентов до операторов связи с десятками тысяч подключений. Низкая стоимость оборудования, мощный RouterOS, поддержка PPPoE/RADIUS/MPLS и гибкость настройки делают MikroTik оптимальным выбором для малых и средних ISP. В этом руководстве рассмотрим архитектуры провайдерских сетей на MikroTik разного масштаба: от одиночного CCR как BRAS до многоуровневых сетей с MPLS, RADIUS-интеграцией и системами биллинга.
Руководство актуально для RouterOS 7.20+.
Описание
Уровни провайдерской сети
Любая провайдерская сеть строится по трёхуровневой модели:
code[Upstream / IX] | === CORE (ядро) === | === AGGREGATION (агрегация) === | === ACCESS (доступ) === | [Абоненты]
Core (ядро) — маршрутизаторы, связывающие сеть провайдера с upstream-каналами и точками обмена трафиком (IX). Здесь работает BGP, NAT (CGNAT), Traffic Flow, основная маршрутизация.
Aggregation (агрегация) — коммутаторы L2/L3, агрегирующие трафик от нескольких коммутаторов доступа. Здесь VLAN-транки, STP/RSTP, иногда OSPF.
Access (доступ) — коммутаторы, к которым непосредственно подключены абоненты. Порт на абонента, VLAN per user или VLAN per house, DHCP snooping.
Типы архитектур по масштабу
| Масштаб | Абоненты | Архитектура | Оборудование MikroTik |
|---|---|---|---|
| Малый ISP | до 500 | Один BRAS (всё в одном) | CCR2004-1G-12S+2XS |
| Средний ISP | 500–5000 | BRAS + агрегация + доступ | CCR2116-12G-4S+ / CRS326 / CSS326 |
| Крупный ISP | 5000+ | Несколько BRAS, MPLS/VPLS | Несколько CCR2116, CRS518, MPLS core |
Роли оборудования MikroTik
| Роль | Модель | Описание | Макс. абонентов |
|---|---|---|---|
| BRAS | CCR2004-1G-12S+2XS | PPPoE-сервер, NAT, QoS, RADIUS | ~3000 PPPoE |
| BRAS (мощный) | CCR2116-12G-4S+ | Высокопроизводительный BRAS | ~8000 PPPoE |
| Агрегация L3 | CRS326-24S+2Q+RM | 24 порта SFP+, L3 routing | Агрегация 24 коммутаторов |
| Агрегация L2 | CRS326-24G-2S+RM | 24 порта Gigabit + 2 SFP+ | Агрегация 24 домов |
| Доступ L2 | CSS326-24G-2S+RM | Управляемый L2-коммутатор | 24 абонента |
| Доступ L2 | CRS112-8G-4S-IN | 8 портов + 4 SFP | 8 абонентов (малый дом) |
| CPE | hEX S (RB760iGS) | Абонентский роутер | 1 абонент |
| CPE | hAP ax2 | Wi-Fi 6 абонентский роутер | 1 абонент |
Выбор модели подключения абонентов
| Модель | Описание | Плюсы | Минусы |
|---|---|---|---|
| PPPoE | Абонент подключается по PPPoE | Аутентификация, учёт, тарифы | Overhead 8 байт, MTU 1492 |
| IPoE + DHCP | Абонент получает IP по DHCP | Простота, нет overhead | Нет аутентификации без 802.1X |
| VLAN per user | Каждый абонент в своём VLAN | Полная изоляция | Много VLAN, сложнее управление |
| PPPoE + VLAN per house | PPPoE + VLAN на каждый дом | Баланс изоляции и простоты | Средняя сложность |
Для российских ISP наиболее популярна модель PPPoE + VLAN per house: каждый дом (коммутатор доступа) находится в своём VLAN, абоненты подключаются по PPPoE.
Настройка
Архитектура 1: Малый ISP (до 500 абонентов)
Один CCR2004 выполняет все функции: BRAS (PPPoE-сервер), NAT, файрвол, QoS, маршрутизация. Подходит для небольших районных или домовых провайдеров.
code[Upstream ISP] | [CCR2004 — BRAS/NAT/Firewall] | [CRS326 — Aggregation Switch] / | \ [CSS326] [CSS326] [CSS326] — Access switches (дома) | | | Абоненты Абоненты Абоненты
Конфигурация BRAS (CCR2004):
[admin@MikroTik] ># ============================================ # Малый ISP: CCR2004 как BRAS # 300 абонентов PPPoE, канал 1 Гбит/с # ============================================ # --- Системные настройки --- /system/identity/set name="ISP-BRAS-01" # Часовой пояс и NTP /system/clock/set time-zone-name=Europe/Moscow /system/ntp/client/set enabled=yes /system/ntp/client/servers/add address=ru.pool.ntp.org # --- Интерфейсы --- # sfp-sfpplus1 — Upstream (к провайдеру) # sfp-sfpplus2 — Downlink (к коммутатору агрегации) # --- IP-адресация --- # Внешний IP (от upstream-провайдера) /ip/address/add address=203.0.113.2/30 interface=sfp-sfpplus1 comment="Upstream" # Локальный IP для PPPoE (gateway для абонентов) /ip/address/add address=10.0.0.1/32 interface=lo comment="PPPoE local address" # Управление /ip/address/add address=172.16.0.1/24 interface=ether1 comment="Management" # --- Маршруты --- /ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 comment="Default via upstream" # --- Пулы адресов для абонентов --- /ip/pool/add name=pool-subscribers-1 ranges=10.10.0.2-10.10.1.254 \ comment="Subscribers pool 1 (510 addresses)" /ip/pool/add name=pool-subscribers-2 ranges=10.10.2.2-10.10.3.254 \ comment="Subscribers pool 2 (510 addresses)" /ip/pool/set pool-subscribers-1 next-pool=pool-subscribers-2 # --- PPP Profiles (тарифы) --- /ppp/profile/add name=tariff-10M local-address=10.0.0.1 \ remote-address=pool-subscribers-1 \ rate-limit=10M/10M dns-server=8.8.8.8,8.8.4.4 \ comment="Тариф 10 Мбит/с" /ppp/profile/add name=tariff-50M local-address=10.0.0.1 \ remote-address=pool-subscribers-1 \ rate-limit=50M/50M dns-server=8.8.8.8,8.8.4.4 \ comment="Тариф 50 Мбит/с" /ppp/profile/add name=tariff-100M local-address=10.0.0.1 \ remote-address=pool-subscribers-1 \ rate-limit=100M/100M dns-server=8.8.8.8,8.8.4.4 \ comment="Тариф 100 Мбит/с" # --- PPPoE Server --- /interface/pppoe-server/server/add service-name=ISP-Connect \ interface=sfp-sfpplus2 \ default-profile=tariff-50M \ authentication=pap,chap,mschap2 \ one-session-per-host=yes \ max-mtu=1480 max-mru=1480 \ keepalive-timeout=30 \ comment="PPPoE Server for subscribers" # --- NAT (Masquerade) --- /ip/firewall/nat/add chain=srcnat out-interface=sfp-sfpplus1 \ src-address=10.10.0.0/22 action=masquerade \ comment="NAT subscribers to Internet" # --- Firewall (базовая защита BRAS) --- /ip/firewall/filter/add chain=input connection-state=established,related action=accept /ip/firewall/filter/add chain=input connection-state=invalid action=drop /ip/firewall/filter/add chain=input protocol=icmp action=accept /ip/firewall/filter/add chain=input src-address=172.16.0.0/24 action=accept \ comment="Allow management subnet" /ip/firewall/filter/add chain=input in-interface=sfp-sfpplus2 protocol=tcp \ dst-port=8728,8729,22,80,443 action=drop \ comment="Block management from subscriber side" /ip/firewall/filter/add chain=input action=drop comment="Drop all other input"
Архитектура 2: Средний ISP (500–5000 абонентов)
Для среднего провайдера нужно разделение ролей: выделенный BRAS, отдельные коммутаторы агрегации, иерархия VLAN.
code[Upstream 1] [Upstream 2] \ / [CCR2116 — BRAS/NAT] | [CRS326-24S+ — Core/Aggregation L3] / | \ [CRS326] [CRS326] [CRS326] — Aggregation L2 (районы) /|\ /|\ /|\ [CSS] [CSS] [CSS] — Access (дома)
VLAN-планирование:
| VLAN | Назначение | Подсеть |
|---|---|---|
| 100–199 | Абоненты район 1 (по домам) | PPPoE (IP из пула) |
| 200–299 | Абоненты район 2 | PPPoE (IP из пула) |
| 300–399 | Абоненты район 3 | PPPoE (IP из пула) |
| 900 | Управление коммутаторами | 172.16.0.0/24 |
| 999 | Мониторинг (SNMP/Zabbix) | 172.16.99.0/24 |
Конфигурация BRAS (CCR2116):
[admin@MikroTik] ># ============================================ # Средний ISP: CCR2116 как BRAS # 3000 абонентов PPPoE, 2x upstream по 10 Гбит/с # ============================================ # --- VLAN-интерфейсы для абонентских районов --- # Транк от CRS326 приходит на sfp-sfpplus1 /interface/vlan/add name=vlan100-district1 vlan-id=100 interface=sfp-sfpplus1 /interface/vlan/add name=vlan200-district2 vlan-id=200 interface=sfp-sfpplus1 /interface/vlan/add name=vlan300-district3 vlan-id=300 interface=sfp-sfpplus1 /interface/vlan/add name=vlan900-mgmt vlan-id=900 interface=sfp-sfpplus1 # --- Bridge для абонентских VLAN --- /interface/bridge/add name=br-subscribers comment="Bridge for subscriber VLANs" /interface/bridge/port/add bridge=br-subscribers interface=vlan100-district1 /interface/bridge/port/add bridge=br-subscribers interface=vlan200-district2 /interface/bridge/port/add bridge=br-subscribers interface=vlan300-district3 # --- IP-пулы (10 000 адресов с запасом) --- /ip/pool/add name=pool-main ranges=10.10.0.2-10.10.39.254 \ comment="Main pool: 10 230 addresses" /ip/pool/add name=pool-reserve ranges=10.10.40.2-10.10.59.254 \ comment="Reserve pool: 5 118 addresses" /ip/pool/set pool-main next-pool=pool-reserve # --- RADIUS-интеграция --- /radius/add service=ppp address=172.16.0.10 secret=RadiusSecret123! \ timeout=3s comment="Primary RADIUS (billing)" /radius/add service=ppp address=172.16.0.11 secret=RadiusSecret123! \ timeout=3s comment="Backup RADIUS" # Включаем RADIUS для PPP /ppp/aaa/set use-radius=yes accounting=yes interim-update=5m # --- PPP Profiles (тарифы, скорость из RADIUS) --- /ppp/profile/add name=default-radius local-address=10.0.0.1 \ remote-address=pool-main \ dns-server=8.8.8.8,8.8.4.4 \ comment="Default profile, rate-limit from RADIUS" /ppp/profile/add name=tariff-blocked local-address=10.0.0.1 \ remote-address=pool-main \ rate-limit=128K/128K \ dns-server=172.16.0.5 \ comment="Blocked tariff (redirect to billing page)" # --- PPPoE Server --- /interface/pppoe-server/server/add service-name=ISP-PPPoE \ interface=br-subscribers \ default-profile=default-radius \ authentication=chap,mschap2 \ one-session-per-host=yes \ max-mtu=1480 max-mru=1480 \ keepalive-timeout=30 \ comment="Main PPPoE server" # --- NAT (src-nat с конкретным IP) --- /ip/firewall/nat/add chain=srcnat src-address=10.10.0.0/16 \ out-interface=sfp-sfpplus3 \ action=src-nat to-addresses=203.0.113.0/28 \ comment="NAT subscribers via public IP pool" # --- Управление --- /ip/address/add address=172.16.0.1/24 interface=vlan900-mgmt \ comment="Management network"
Конфигурация коммутатора агрегации (CRS326-24S+2Q+):
[admin@MikroTik] ># ============================================ # Агрегация: CRS326 (L2 switching) # ============================================ /system/identity/set name="AGG-SW-01" # Bridge с VLAN-filtering /interface/bridge/add name=bridge vlan-filtering=yes # Порты к BRAS (trunk) /interface/bridge/port/add bridge=bridge interface=sfp-sfpplus1 \ pvid=1 frame-types=admit-only-vlan-tagged # Порты к коммутаторам доступа (trunk) /interface/bridge/port/add bridge=bridge interface=sfp-sfpplus2 \ pvid=1 frame-types=admit-only-vlan-tagged /interface/bridge/port/add bridge=bridge interface=sfp-sfpplus3 \ pvid=1 frame-types=admit-only-vlan-tagged /interface/bridge/port/add bridge=bridge interface=sfp-sfpplus4 \ pvid=1 frame-types=admit-only-vlan-tagged # VLAN таблица — пропускаем абонентские VLAN /interface/bridge/vlan/add bridge=bridge vlan-ids=100-199 \ tagged=sfp-sfpplus1,sfp-sfpplus2 comment="District 1 VLANs" /interface/bridge/vlan/add bridge=bridge vlan-ids=200-299 \ tagged=sfp-sfpplus1,sfp-sfpplus3 comment="District 2 VLANs" /interface/bridge/vlan/add bridge=bridge vlan-ids=300-399 \ tagged=sfp-sfpplus1,sfp-sfpplus4 comment="District 3 VLANs" /interface/bridge/vlan/add bridge=bridge vlan-ids=900 \ tagged=sfp-sfpplus1,sfp-sfpplus2,sfp-sfpplus3,sfp-sfpplus4 \ comment="Management VLAN" # Управление через VLAN 900 /interface/vlan/add name=vlan900-mgmt vlan-id=900 interface=bridge /ip/address/add address=172.16.0.2/24 interface=vlan900-mgmt /ip/route/add dst-address=0.0.0.0/0 gateway=172.16.0.1
Конфигурация коммутатора доступа (CSS326):
[admin@MikroTik] ># ============================================ # Доступ: CSS326 (дом) # VLAN 105 — абоненты этого дома # ============================================ /system/identity/set name="ACC-HOUSE-105" /interface/bridge/add name=bridge vlan-filtering=yes # Порт uplink к агрегации (trunk) /interface/bridge/port/add bridge=bridge interface=sfp-sfpplus1 \ pvid=1 frame-types=admit-only-vlan-tagged # Порты абонентов (access, VLAN 105) /interface/bridge/port/add bridge=bridge interface=ether1 pvid=105 /interface/bridge/port/add bridge=bridge interface=ether2 pvid=105 /interface/bridge/port/add bridge=bridge interface=ether3 pvid=105 # ... до ether24 # VLAN таблица /interface/bridge/vlan/add bridge=bridge vlan-ids=105 \ tagged=sfp-sfpplus1 \ untagged=ether1,ether2,ether3,ether4,ether5,ether6,ether7,ether8,\ ether9,ether10,ether11,ether12,ether13,ether14,ether15,ether16,\ ether17,ether18,ether19,ether20,ether21,ether22,ether23,ether24 # Management VLAN /interface/bridge/vlan/add bridge=bridge vlan-ids=900 tagged=sfp-sfpplus1,bridge /interface/vlan/add name=vlan900-mgmt vlan-id=900 interface=bridge /ip/address/add address=172.16.0.105/24 interface=vlan900-mgmt /ip/route/add dst-address=0.0.0.0/0 gateway=172.16.0.1
Архитектура 3: Крупный ISP (5000+ абонентов)
Для крупного провайдера нужно несколько BRAS, MPLS-ядро, OSPF/BGP-маршрутизация, отказоустойчивость.
code[Upstream 1] [Upstream 2] [IX MSK-IX] \ | / [CCR2116 #1]===MPLS/OSPF===[CCR2116 #2] — Core routers \ / [CRS518]====MPLS====[CRS518] — Distribution / | \ / | \ [CRS326] [CRS326] [CRS326] [CRS326] — Aggregation /|\ /|\ /|\ /|\ [CSS] ... [CSS] [CSS] ... [CSS] — Access
Ключевые отличия от среднего ISP:
- MPLS/VPLS между площадками — виртуальные L2-каналы через IP-сеть
- OSPF для внутренней маршрутизации между BRAS и коммутаторами
- BGP для получения full view от upstream-провайдеров и IX
- Несколько BRAS с балансировкой нагрузки
- CGNAT вместо обычного NAT (для экономии IPv4-адресов)
[admin@MikroTik] ># ============================================ # Крупный ISP: Core router (CCR2116 #1) # OSPF + BGP + MPLS # ============================================ # --- OSPF (внутренняя маршрутизация) --- /routing/ospf/instance/add name=ospf-isp router-id=10.255.0.1 /routing/ospf/area/add name=backbone instance=ospf-isp area-id=0.0.0.0 /routing/ospf/interface-template/add area=backbone interfaces=sfp-sfpplus1 \ type=ptp comment="To Core router #2" /routing/ospf/interface-template/add area=backbone interfaces=sfp-sfpplus2 \ type=ptp comment="To Distribution SW #1" /routing/ospf/interface-template/add area=backbone interfaces=sfp-sfpplus3 \ type=ptp comment="To Distribution SW #2" /routing/ospf/interface-template/add area=backbone interfaces=lo \ type=ptp comment="Loopback" # --- BGP (upstream-провайдеры) --- /routing/bgp/connection/add name=upstream-1 as=65001 \ remote.address=198.51.100.1 remote.as=12345 \ local.role=customer \ address-families=ip \ routing-table=main \ output.default-originate=never \ comment="Upstream ISP #1" /routing/bgp/connection/add name=upstream-2 as=65001 \ remote.address=198.51.100.5 remote.as=67890 \ local.role=customer \ address-families=ip \ routing-table=main \ comment="Upstream ISP #2" # --- MPLS --- /mpls/ldp/add lsr-id=10.255.0.1 transport-addresses=10.255.0.1 /mpls/ldp/interface/add interface=sfp-sfpplus1 comment="LDP to Core #2" /mpls/ldp/interface/add interface=sfp-sfpplus2 comment="LDP to Dist #1" /mpls/ldp/interface/add interface=sfp-sfpplus3 comment="LDP to Dist #2"
Адресное планирование
Правильное планирование IP-адресов — основа масштабируемой сети:
| Назначение | Подсеть | Примечание |
|---|---|---|
| Loopback-адреса маршрутизаторов | 10.255.0.0/24 | /32 на каждый |
| Линки между маршрутизаторами | 10.255.1.0/24 | /30 или /31 на каждый линк |
| Управление оборудованием | 172.16.0.0/16 | Сегментировать по районам |
| Абоненты PPPoE | 10.0.0.0/8 | Сегментировать по BRAS |
| Публичные IP (NAT) | 203.0.113.0/24 | От upstream или RIPE |
| Серверы (DNS, RADIUS, billing) | 172.16.100.0/24 | Отдельный сегмент |
RADIUS-интеграция и биллинг
Для средних и крупных ISP RADIUS обязателен. Популярные биллинговые системы для российских провайдеров:
| Система | Описание | Стоимость |
|---|---|---|
| LANBilling | Российский биллинг, интеграция с MikroTik | Коммерческая |
| Abills | Open-source биллинг с RADIUS | Бесплатно |
| NoDeny | Биллинг для малых/средних ISP | Коммерческая |
| Carbon Billing | Российский биллинг | Коммерческая |
| Hydra | Биллинг для крупных операторов | Коммерческая |
Базовые RADIUS-атрибуты для MikroTik PPPoE:
[admin@MikroTik] ># Атрибуты, которые RADIUS отправляет MikroTik: Mikrotik-Rate-Limit = "50M/100M" # Скорость upload/download Framed-IP-Address = 10.10.5.25 # Статический IP (если нужен) Framed-Pool = "pool-main" # Пул адресов Mikrotik-Group = "tariff-100M" # PPP Profile Session-Timeout = 86400 # Максимальное время сессии (сек) Acct-Interim-Interval = 300 # Интервал промежуточного учёта (сек)
Настройка FreeRADIUS (clients.conf):
[admin@MikroTik] ># /etc/freeradius/3.0/clients.conf client mikrotik-bras-01 { ipaddr = 172.16.0.1 secret = RadiusSecret123! shortname = bras-01 nastype = mikrotik }
Мониторинг ISP-сети: Zabbix + SNMP + Traffic Flow
[admin@MikroTik] ># --- SNMP для мониторинга (Zabbix) --- /snmp/set enabled=yes contact="noc@isp.ru" location="Moscow, DC-1" /snmp/community/set [find default=yes] name=ISP-SNMP-ro read-access=yes \ addresses=172.16.99.0/24 # --- Traffic Flow для анализа трафика --- /ip/traffic-flow/set enabled=yes interfaces=all cache-entries=256k /ip/traffic-flow/target/add dst-address=172.16.99.5:2055 version=9 \ comment="NetFlow collector (ntopng)" # --- Graphing (встроенные графики) --- /tool/graphing/interface/add interface=sfp-sfpplus1 comment="Upstream" /tool/graphing/interface/add interface=sfp-sfpplus2 comment="Subscribers" /tool/graphing/resource/add
Ключевые метрики для мониторинга ISP:
| Метрика | Источник | Пороги |
|---|---|---|
| CPU Load | SNMP | Warning: >70%, Critical: >90% |
| Память | SNMP | Warning: >80%, Critical: >95% |
| Активные PPPoE-сессии | SNMP/API | Зависит от ёмкости BRAS |
| Утилизация портов | SNMP | Warning: >80% |
| BGP-сессии | SNMP/API | Alert при down |
| Packet loss (upstream) | Ping | Warning: >0.1%, Critical: >1% |
| Latency (upstream) | Ping | Warning: >10ms, Critical: >50ms |
Защита BRAS (hardening)
[admin@MikroTik] ># --- Ограничение доступа к управлению --- # Разрешаем управление только из management-сети /ip/firewall/filter/add chain=input src-address=172.16.0.0/24 action=accept \ comment="Allow management network" /ip/firewall/filter/add chain=input protocol=icmp action=accept /ip/firewall/filter/add chain=input connection-state=established,related action=accept # Защита от абонентов: блокируем доступ к сервисам /ip/firewall/filter/add chain=input in-interface=br-subscribers protocol=tcp \ dst-port=22,23,80,443,8291,8728,8729 action=drop \ comment="Block management from subscribers" /ip/firewall/filter/add chain=input action=drop comment="Drop all other" # --- Отключение ненужных сервисов --- /ip/service/set telnet disabled=yes /ip/service/set ftp disabled=yes /ip/service/set www disabled=yes /ip/service/set api disabled=yes /ip/service/set api-ssl disabled=yes /ip/service/set ssh address=172.16.0.0/24 /ip/service/set winbox address=172.16.0.0/24 # --- Защита от DNS amplification --- /ip/dns/set allow-remote-requests=no # --- Connection Tracking tuning для BRAS --- /ip/firewall/connection/tracking/set tcp-established-timeout=1h \ udp-timeout=30s generic-timeout=30s \ tcp-close-timeout=10s tcp-close-wait-timeout=10s # --- Ограничение PPPoE-подключений --- /interface/pppoe-server/server/set [find] one-session-per-host=yes
Проверка
Проверка PPPoE-сессий
[admin@MikroTik] ># Количество активных PPPoE-сессий /ppp/active/print count-only # Список активных сессий /ppp/active/print # Подробная информация по абоненту /ppp/active/print where name="subscriber-login" # Статистика PPPoE-сервера /interface/pppoe-server/server/print stats
Проверка RADIUS
[admin@MikroTik] ># Статистика RADIUS /radius/print stats # Проверка связи с RADIUS-сервером /ping address=172.16.0.10 count=5 # Мониторинг RADIUS-запросов (в логах) /log/print where topics~"radius"
Проверка BGP
[admin@MikroTik] ># Статус BGP-сессий /routing/bgp/session/print # Количество полученных маршрутов /routing/bgp/session/print detail # Таблица маршрутизации — количество записей /ip/route/print count-only
Проверка MPLS
[admin@MikroTik] ># LDP-соседи /mpls/ldp/neighbor/print # MPLS forwarding table /mpls/forwarding-table/print # Проверка MPLS-пути /tool/traceroute address=10.255.0.2 protocol=icmp
Мониторинг нагрузки
[admin@MikroTik] ># CPU и память /system/resource/print # Нагрузка на интерфейсы /interface/print stats # Top потребители полосы /tool/torch interface=sfp-sfpplus2 src-address=10.10.0.0/16
Типичные ошибки
Ошибка 1: Один BRAS на 5000+ абонентов
Симптомы: CPU 100%, PPPoE-сессии обрываются, медленный NAT.
Причина: даже CCR2116 имеет предел по PPPoE-сессиям (~8000 при полной нагрузке NAT + QoS). При перегрузке страдает всё: маршрутизация, NAT, очереди.
Решение: разделить нагрузку на несколько BRAS, каждый обслуживает свой район. Балансировка через OSPF или статические маршруты.
Ошибка 2: VLAN-планирование без запаса
Симптомы: при подключении нового дома не хватает VLAN, приходится перестраивать сеть.
Решение: планировать VLAN-диапазоны с запасом минимум 2x. Использовать схему: район → диапазон VLAN (100–199, 200–299 и т.д.).
Ошибка 3: Нет management VLAN
Симптомы: при аварии на BRAS теряется доступ к коммутаторам доступа, невозможно диагностировать проблему удалённо.
Решение: всегда выделяйте management VLAN (например, 900) и настройте out-of-band доступ к оборудованию. Управление должно работать независимо от абонентского трафика.
Ошибка 4: masquerade вместо src-nat на BRAS
Симптомы: при переподключении upstream-канала NAT-трансляции сбрасываются, абоненты теряют сессии.
Причина: masquerade пересоздаёт NAT-таблицу при изменении IP на интерфейсе. Для статического IP лучше использовать src-nat с фиксированным to-addresses.
[admin@MikroTik] ># Неправильно /ip/firewall/nat/add chain=srcnat action=masquerade # Правильно /ip/firewall/nat/add chain=srcnat src-address=10.0.0.0/8 \ out-interface=sfp-sfpplus1 action=src-nat to-addresses=203.0.113.0/28
Ошибка 5: Нет ограничения доступа абонентов к BRAS
Симптомы: абоненты могут сканировать порты BRAS, пытаться подобрать пароли к Winbox/SSH, атаковать DNS/API.
Решение: жёсткий firewall на input chain: разрешить только management-подсеть, заблокировать всё остальное. Отключить ненужные сервисы.
Ошибка 6: Нет мониторинга
Симптомы: провайдер узнаёт о проблемах от абонентов, а не из системы мониторинга. Время реакции на аварию — часы вместо минут.
Решение: обязательно развернуть Zabbix или аналог. Мониторить: CPU, память, утилизацию портов, количество PPPoE-сессий, BGP-сессии, ping до upstream. Настроить алерты в Telegram или SMS.
Итоги
Проектирование ISP-сети на MikroTik требует чёткого разделения ролей оборудования, грамотного VLAN/IP-планирования и обязательной интеграции с RADIUS и биллингом. Ключевые правила:
- Один BRAS — не более 3000–5000 PPPoE-сессий (с запасом)
- VLAN per house — оптимальная модель для большинства ISP
- RADIUS обязателен для сетей от 100+ абонентов
- Management-сеть должна быть отделена от абонентского трафика
- Мониторинг (Zabbix + SNMP) — не опция, а необходимость
- Защита BRAS: firewall + отключение ненужных сервисов
- Планируйте ёмкость с запасом минимум 2x от текущего количества абонентов
[Upstream / IX]
|
=== CORE (ядро) ===
|
=== AGGREGATION (агрегация) ===
|
=== ACCESS (доступ) ===
|
[Абоненты]
[Upstream ISP]
|
[CCR2004 — BRAS/NAT/Firewall]
|
[CRS326 — Aggregation Switch]
/ | \
[CSS326] [CSS326] [CSS326] — Access switches (дома)
| | |
Абоненты Абоненты Абоненты
# ============================================
# Малый ISP: CCR2004 как BRAS
# 300 абонентов PPPoE, канал 1 Гбит/с
# ============================================
# --- Системные настройки ---
/system/identity/set name="ISP-BRAS-01"
# Часовой пояс и NTP
/system/clock/set time-zone-name=Europe/Moscow
/system/ntp/client/set enabled=yes
/system/ntp/client/servers/add address=ru.pool.ntp.org
# --- Интерфейсы ---
# sfp-sfpplus1 — Upstream (к провайдеру)
# sfp-sfpplus2 — Downlink (к коммутатору агрегации)
# --- IP-адресация ---
# Внешний IP (от upstream-провайдера)
/ip/address/add address=203.0.113.2/30 interface=sfp-sfpplus1 comment="Upstream"
# Локальный IP для PPPoE (gateway для абонентов)
/ip/address/add address=10.0.0.1/32 interface=lo comment="PPPoE local address"
# Управление
/ip/address/add address=172.16.0.1/24 interface=ether1 comment="Management"
# --- Маршруты ---
/ip/route/add dst-address=0.0.0.0/0 gateway=203.0.113.1 comment="Default via upstream"
# --- Пулы адресов для абонентов ---
/ip/pool/add name=pool-subscribers-1 ranges=10.10.0.2-10.10.1.254 \
comment="Subscribers pool 1 (510 addresses)"
/ip/pool/add name=pool-subscribers-2 ranges=10.10.2.2-10.10.3.254 \
comment="Subscribers pool 2 (510 addresses)"
/ip/pool/set pool-subscribers-1 next-pool=pool-subscribers-2
# --- PPP Profiles (тарифы) ---
/ppp/profile/add name=tariff-10M local-address=10.0.0.1 \
remote-address=pool-subscribers-1 \
rate-limit=10M/10M dns-server=8.8.8.8,8.8.4.4 \
comment="Тариф 10 Мбит/с"
/ppp/profile/add name=tariff-50M local-address=10.0.0.1 \
remote-address=pool-subscribers-1 \
rate-limit=50M/50M dns-server=8.8.8.8,8.8.4.4 \
comment="Тариф 50 Мбит/с"
/ppp/profile/add name=tariff-100M local-address=10.0.0.1 \
remote-address=pool-subscribers-1 \
rate-limit=100M/100M dns-server=8.8.8.8,8.8.4.4 \
comment="Тариф 100 Мбит/с"
# --- PPPoE Server ---
/interface/pppoe-server/server/add service-name=ISP-Connect \
interface=sfp-sfpplus2 \
default-profile=tariff-50M \
authentication=pap,chap,mschap2 \
one-session-per-host=yes \
max-mtu=1480 max-mru=1480 \
keepalive-timeout=30 \
comment="PPPoE Server for subscribers"
# --- NAT (Masquerade) ---
/ip/firewall/nat/add chain=srcnat out-interface=sfp-sfpplus1 \
src-address=10.10.0.0/22 action=masquerade \
comment="NAT subscribers to Internet"
# --- Firewall (базовая защита BRAS) ---
/ip/firewall/filter/add chain=input connection-state=established,related action=accept
/ip/firewall/filter/add chain=input connection-state=invalid action=drop
/ip/firewall/filter/add chain=input protocol=icmp action=accept
/ip/firewall/filter/add chain=input src-address=172.16.0.0/24 action=accept \
comment="Allow management subnet"
/ip/firewall/filter/add chain=input in-interface=sfp-sfpplus2 protocol=tcp \
dst-port=8728,8729,22,80,443 action=drop \
comment="Block management from subscriber side"
/ip/firewall/filter/add chain=input action=drop comment="Drop all other input"
[Upstream 1] [Upstream 2]
\ /
[CCR2116 — BRAS/NAT]
|
[CRS326-24S+ — Core/Aggregation L3]
/ | \
[CRS326] [CRS326] [CRS326] — Aggregation L2 (районы)
/|\ /|\ /|\
[CSS] [CSS] [CSS] — Access (дома)
# ============================================
# Средний ISP: CCR2116 как BRAS
# 3000 абонентов PPPoE, 2x upstream по 10 Гбит/с
# ============================================
# --- VLAN-интерфейсы для абонентских районов ---
# Транк от CRS326 приходит на sfp-sfpplus1
/interface/vlan/add name=vlan100-district1 vlan-id=100 interface=sfp-sfpplus1
/interface/vlan/add name=vlan200-district2 vlan-id=200 interface=sfp-sfpplus1
/interface/vlan/add name=vlan300-district3 vlan-id=300 interface=sfp-sfpplus1
/interface/vlan/add name=vlan900-mgmt vlan-id=900 interface=sfp-sfpplus1
# --- Bridge для абонентских VLAN ---
/interface/bridge/add name=br-subscribers comment="Bridge for subscriber VLANs"
/interface/bridge/port/add bridge=br-subscribers interface=vlan100-district1
/interface/bridge/port/add bridge=br-subscribers interface=vlan200-district2
/interface/bridge/port/add bridge=br-subscribers interface=vlan300-district3
# --- IP-пулы (10 000 адресов с запасом) ---
/ip/pool/add name=pool-main ranges=10.10.0.2-10.10.39.254 \
comment="Main pool: 10 230 addresses"
/ip/pool/add name=pool-reserve ranges=10.10.40.2-10.10.59.254 \
comment="Reserve pool: 5 118 addresses"
/ip/pool/set pool-main next-pool=pool-reserve
# --- RADIUS-интеграция ---
/radius/add service=ppp address=172.16.0.10 secret=RadiusSecret123! \
timeout=3s comment="Primary RADIUS (billing)"
/radius/add service=ppp address=172.16.0.11 secret=RadiusSecret123! \
timeout=3s comment="Backup RADIUS"
# Включаем RADIUS для PPP
/ppp/aaa/set use-radius=yes accounting=yes interim-update=5m
# --- PPP Profiles (тарифы, скорость из RADIUS) ---
/ppp/profile/add name=default-radius local-address=10.0.0.1 \
remote-address=pool-main \
dns-server=8.8.8.8,8.8.4.4 \
comment="Default profile, rate-limit from RADIUS"
/ppp/profile/add name=tariff-blocked local-address=10.0.0.1 \
remote-address=pool-main \
rate-limit=128K/128K \
dns-server=172.16.0.5 \
comment="Blocked tariff (redirect to billing page)"
# --- PPPoE Server ---
/interface/pppoe-server/server/add service-name=ISP-PPPoE \
interface=br-subscribers \
default-profile=default-radius \
authentication=chap,mschap2 \
one-session-per-host=yes \
max-mtu=1480 max-mru=1480 \
keepalive-timeout=30 \
comment="Main PPPoE server"
# --- NAT (src-nat с конкретным IP) ---
/ip/firewall/nat/add chain=srcnat src-address=10.10.0.0/16 \
out-interface=sfp-sfpplus3 \
action=src-nat to-addresses=203.0.113.0/28 \
comment="NAT subscribers via public IP pool"
# --- Управление ---
/ip/address/add address=172.16.0.1/24 interface=vlan900-mgmt \
comment="Management network"
# ============================================
# Агрегация: CRS326 (L2 switching)
# ============================================
/system/identity/set name="AGG-SW-01"
# Bridge с VLAN-filtering
/interface/bridge/add name=bridge vlan-filtering=yes
# Порты к BRAS (trunk)
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus1 \
pvid=1 frame-types=admit-only-vlan-tagged
# Порты к коммутаторам доступа (trunk)
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus2 \
pvid=1 frame-types=admit-only-vlan-tagged
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus3 \
pvid=1 frame-types=admit-only-vlan-tagged
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus4 \
pvid=1 frame-types=admit-only-vlan-tagged
# VLAN таблица — пропускаем абонентские VLAN
/interface/bridge/vlan/add bridge=bridge vlan-ids=100-199 \
tagged=sfp-sfpplus1,sfp-sfpplus2 comment="District 1 VLANs"
/interface/bridge/vlan/add bridge=bridge vlan-ids=200-299 \
tagged=sfp-sfpplus1,sfp-sfpplus3 comment="District 2 VLANs"
/interface/bridge/vlan/add bridge=bridge vlan-ids=300-399 \
tagged=sfp-sfpplus1,sfp-sfpplus4 comment="District 3 VLANs"
/interface/bridge/vlan/add bridge=bridge vlan-ids=900 \
tagged=sfp-sfpplus1,sfp-sfpplus2,sfp-sfpplus3,sfp-sfpplus4 \
comment="Management VLAN"
# Управление через VLAN 900
/interface/vlan/add name=vlan900-mgmt vlan-id=900 interface=bridge
/ip/address/add address=172.16.0.2/24 interface=vlan900-mgmt
/ip/route/add dst-address=0.0.0.0/0 gateway=172.16.0.1
# ============================================
# Доступ: CSS326 (дом)
# VLAN 105 — абоненты этого дома
# ============================================
/system/identity/set name="ACC-HOUSE-105"
/interface/bridge/add name=bridge vlan-filtering=yes
# Порт uplink к агрегации (trunk)
/interface/bridge/port/add bridge=bridge interface=sfp-sfpplus1 \
pvid=1 frame-types=admit-only-vlan-tagged
# Порты абонентов (access, VLAN 105)
/interface/bridge/port/add bridge=bridge interface=ether1 pvid=105
/interface/bridge/port/add bridge=bridge interface=ether2 pvid=105
/interface/bridge/port/add bridge=bridge interface=ether3 pvid=105
# ... до ether24
# VLAN таблица
/interface/bridge/vlan/add bridge=bridge vlan-ids=105 \
tagged=sfp-sfpplus1 \
untagged=ether1,ether2,ether3,ether4,ether5,ether6,ether7,ether8,\
ether9,ether10,ether11,ether12,ether13,ether14,ether15,ether16,\
ether17,ether18,ether19,ether20,ether21,ether22,ether23,ether24
# Management VLAN
/interface/bridge/vlan/add bridge=bridge vlan-ids=900 tagged=sfp-sfpplus1,bridge
/interface/vlan/add name=vlan900-mgmt vlan-id=900 interface=bridge
/ip/address/add address=172.16.0.105/24 interface=vlan900-mgmt
/ip/route/add dst-address=0.0.0.0/0 gateway=172.16.0.1
[Upstream 1] [Upstream 2] [IX MSK-IX]
\ | /
[CCR2116 #1]===MPLS/OSPF===[CCR2116 #2] — Core routers
\ /
[CRS518]====MPLS====[CRS518] — Distribution
/ | \ / | \
[CRS326] [CRS326] [CRS326] [CRS326] — Aggregation
/|\ /|\ /|\ /|\
[CSS] ... [CSS] [CSS] ... [CSS] — Access
# ============================================
# Крупный ISP: Core router (CCR2116 #1)
# OSPF + BGP + MPLS
# ============================================
# --- OSPF (внутренняя маршрутизация) ---
/routing/ospf/instance/add name=ospf-isp router-id=10.255.0.1
/routing/ospf/area/add name=backbone instance=ospf-isp area-id=0.0.0.0
/routing/ospf/interface-template/add area=backbone interfaces=sfp-sfpplus1 \
type=ptp comment="To Core router #2"
/routing/ospf/interface-template/add area=backbone interfaces=sfp-sfpplus2 \
type=ptp comment="To Distribution SW #1"
/routing/ospf/interface-template/add area=backbone interfaces=sfp-sfpplus3 \
type=ptp comment="To Distribution SW #2"
/routing/ospf/interface-template/add area=backbone interfaces=lo \
type=ptp comment="Loopback"
# --- BGP (upstream-провайдеры) ---
/routing/bgp/connection/add name=upstream-1 as=65001 \
remote.address=198.51.100.1 remote.as=12345 \
local.role=customer \
address-families=ip \
routing-table=main \
output.default-originate=never \
comment="Upstream ISP #1"
/routing/bgp/connection/add name=upstream-2 as=65001 \
remote.address=198.51.100.5 remote.as=67890 \
local.role=customer \
address-families=ip \
routing-table=main \
comment="Upstream ISP #2"
# --- MPLS ---
/mpls/ldp/add lsr-id=10.255.0.1 transport-addresses=10.255.0.1
/mpls/ldp/interface/add interface=sfp-sfpplus1 comment="LDP to Core #2"
/mpls/ldp/interface/add interface=sfp-sfpplus2 comment="LDP to Dist #1"
/mpls/ldp/interface/add interface=sfp-sfpplus3 comment="LDP to Dist #2"
# Атрибуты, которые RADIUS отправляет MikroTik:
Mikrotik-Rate-Limit = "50M/100M" # Скорость upload/download
Framed-IP-Address = 10.10.5.25 # Статический IP (если нужен)
Framed-Pool = "pool-main" # Пул адресов
Mikrotik-Group = "tariff-100M" # PPP Profile
Session-Timeout = 86400 # Максимальное время сессии (сек)
Acct-Interim-Interval = 300 # Интервал промежуточного учёта (сек)
# /etc/freeradius/3.0/clients.conf
client mikrotik-bras-01 {
ipaddr = 172.16.0.1
secret = RadiusSecret123!
shortname = bras-01
nastype = mikrotik
}
# --- SNMP для мониторинга (Zabbix) ---
/snmp/set enabled=yes contact="noc@isp.ru" location="Moscow, DC-1"
/snmp/community/set [find default=yes] name=ISP-SNMP-ro read-access=yes \
addresses=172.16.99.0/24
# --- Traffic Flow для анализа трафика ---
/ip/traffic-flow/set enabled=yes interfaces=all cache-entries=256k
/ip/traffic-flow/target/add dst-address=172.16.99.5:2055 version=9 \
comment="NetFlow collector (ntopng)"
# --- Graphing (встроенные графики) ---
/tool/graphing/interface/add interface=sfp-sfpplus1 comment="Upstream"
/tool/graphing/interface/add interface=sfp-sfpplus2 comment="Subscribers"
/tool/graphing/resource/add
# --- Ограничение доступа к управлению ---
# Разрешаем управление только из management-сети
/ip/firewall/filter/add chain=input src-address=172.16.0.0/24 action=accept \
comment="Allow management network"
/ip/firewall/filter/add chain=input protocol=icmp action=accept
/ip/firewall/filter/add chain=input connection-state=established,related action=accept
# Защита от абонентов: блокируем доступ к сервисам
/ip/firewall/filter/add chain=input in-interface=br-subscribers protocol=tcp \
dst-port=22,23,80,443,8291,8728,8729 action=drop \
comment="Block management from subscribers"
/ip/firewall/filter/add chain=input action=drop comment="Drop all other"
# --- Отключение ненужных сервисов ---
/ip/service/set telnet disabled=yes
/ip/service/set ftp disabled=yes
/ip/service/set www disabled=yes
/ip/service/set api disabled=yes
/ip/service/set api-ssl disabled=yes
/ip/service/set ssh address=172.16.0.0/24
/ip/service/set winbox address=172.16.0.0/24
# --- Защита от DNS amplification ---
/ip/dns/set allow-remote-requests=no
# --- Connection Tracking tuning для BRAS ---
/ip/firewall/connection/tracking/set tcp-established-timeout=1h \
udp-timeout=30s generic-timeout=30s \
tcp-close-timeout=10s tcp-close-wait-timeout=10s
# --- Ограничение PPPoE-подключений ---
/interface/pppoe-server/server/set [find] one-session-per-host=yes
# Количество активных PPPoE-сессий
/ppp/active/print count-only
# Список активных сессий
/ppp/active/print
# Подробная информация по абоненту
/ppp/active/print where name="subscriber-login"
# Статистика PPPoE-сервера
/interface/pppoe-server/server/print stats
# Статистика RADIUS
/radius/print stats
# Проверка связи с RADIUS-сервером
/ping address=172.16.0.10 count=5
# Мониторинг RADIUS-запросов (в логах)
/log/print where topics~"radius"
# Статус BGP-сессий
/routing/bgp/session/print
# Количество полученных маршрутов
/routing/bgp/session/print detail
# Таблица маршрутизации — количество записей
/ip/route/print count-only
# LDP-соседи
/mpls/ldp/neighbor/print
# MPLS forwarding table
/mpls/forwarding-table/print
# Проверка MPLS-пути
/tool/traceroute address=10.255.0.2 protocol=icmp
# CPU и память
/system/resource/print
# Нагрузка на интерфейсы
/interface/print stats
# Top потребители полосы
/tool/torch interface=sfp-sfpplus2 src-address=10.10.0.0/16
# Неправильно
/ip/firewall/nat/add chain=srcnat action=masquerade
# Правильно
/ip/firewall/nat/add chain=srcnat src-address=10.0.0.0/8 \
out-interface=sfp-sfpplus1 action=src-nat to-addresses=203.0.113.0/28