- Диагноз: почему RouterOS 7 — это не RouterOS 6 с новым логотипом
- Причины боли: что ломается при переходе и почему OSPF «не поднимается»
- Рецепт: полная настройка OSPF, WiFi и CHR в RouterOS 7 с готовыми командами
- Осложнения: типовые ошибки и как их лечить
- Прогноз: итог и профилактика
Диагноз
У тебя новый MikroTik, на нём RouterOS 7, и ты с удивлением обнаруживаешь, что старые конфиги из v6 работают через раз. OSPF соседи не поднимаются, WiFi ведёт себя странно, а CHR вообще загадочное существо. Знакомо?
RouterOS 7 — это не просто «обновлённая шестёрка». Там переписаны маршрутизация, логика OSPF, модель WiFi-интерфейсов. Короче, Mikrotik решил, что было слишком просто — и сделал по-другому. Местами лучше, местами — «ну зачем».
После этого рецепта у тебя будет:
- Рабочий OSPF в RouterOS 7 с правильными area, интерфейсами и фильтрами
- Настроенный WiFi через новую модель WiFi-пакета (не CAPsMAN v2, а именно новый)
- CHR, поднятый в облаке или на гипервизоре — с лицензией и базовой безопасностью
- Скрипты, которые можно скопировать и вставить прямо в терминал
Причины — почему болит
1. OSPF в v7 — это другой пакет
В RouterOS 7 маршрутизация вынесена в отдельный демон routing. Раньше всё было в ip ospf, теперь — в routing ospf. Старые скрипты не заведутся без правки. Совместимости нет, миграция — только руками.
2. WiFi-интерфейсы переехали
В RouterOS 7 появился новый пакет wifi (не wireless). На новых устройствах (hAP ax², ax³, RB5009 с WiFi) он стоит по умолчанию. CAPsMAN тоже переписан. Если ты лезешь в /interface wireless и не видишь своих точек — именно поэтому.
3. CHR — отдельный зверь
Cloud Hosted Router — это RouterOS без железа. Работает на VMware, Hyper-V, KVM, VirtualBox, AWS, Hetzner. Но у него своя система лицензий (p1/p10/p-unlimited), и без активации скорость ограничена 1 Мбит/с. Многие про это забывают и потом удивляются.
4. Firewall и connection tracking изменились
В v7 переписан nftables-бэкенд. Часть старых правил fasttrack не работает корректно без явного указания. Это влияет на производительность OSPF hello-пакетов при высокой нагрузке.
5. Скачать RouterOS 7 — не очевидно
На сайте Mikrotik есть и v6, и v7, и CHR-образы. Новички качают не то и потом удивляются, почему оно не ставится. Дальше расскажу, что именно качать.
Рецепт
Часть 0 — Скачать и установить RouterOS 7
Для физического железа
Заходишь на https://mikrotik.com/download, выбираешь свою архитектуру (ARM, ARM64, MIPSBE, TILE, x86 — зависит от модели), качаешь Main package в формате .npk.
Заливаешь через Winbox → Files → Upload. Потом:
# В терминале RouterOS:
/system package update
# Или вручную после загрузки .npk файла:
/system reboot
RouterOS 7 для CHR (KVM/VMware/Hyper-V)
Качаешь CHR-образ под свой гипервизор:
chr-7.x.x.img.zip— для KVM/QEMUchr-7.x.x.vmdk.zip— для VMwarechr-7.x.x.vhd.zip— для Hyper-V
# Развёртывание CHR на KVM (Linux-хост):
# Распаковываем образ
unzip chr-7.14.img.zip
# Создаём диск из образа
qemu-img convert -f raw chr-7.14.img -O qcow2 chr-7.14.qcow2
# Запускаем виртуалку (пример для virt-install):
virt-install \
--name mikrotik-chr \
--ram 512 \
--vcpus 2 \
--disk path=/var/lib/libvirt/images/chr-7.14.qcow2,format=qcow2 \
--network bridge=br0 \
--network bridge=br1 \
--os-variant generic \
--import \
--noautoconsole
admin, пароль — пустой. Первое, что делаешь после входа — меняешь пароль. Второе — активируешь лицензию, иначе 1 Мбит/с навсегда.Активация лицензии CHR
# Внутри RouterOS CHR:
# Смотрим текущую лицензию
/system license print
# Получаем Trial на 60 дней (p1 = 1 Мбит, p10 = 10 Мбит, p-unlimited = без ограничений)
/system license get-trial level=p-unlimited
# Или вводим купленный ключ:
/system license import key=XXXX-XXXX-XXXX-XXXX
Часть 1 — Базовая настройка RouterOS 7 после установки
Первичная конфигурация (делай это всегда)
# Меняем имя роутера
/system identity set name=MikroTik-GW01
# Меняем пароль admin
/user set admin password="ВашСложныйПароль123!"
# Создаём нового пользователя с полными правами (опционально, но правильно)
/user add name=netadmin password="АдминПароль456!" group=full
# Отключаем ненужные сервисы (<a class="wpil_keyword_link" href="https://it-apteka.com/category/security/" target="_blank" rel="noopener" title="Безопасность" data-wpil-keyword-link="linked" data-wpil-monitor-id="1291">безопасность</a>)
/ip service disable telnet,ftp,www,api,api-ssl
/ip service set ssh port=22022 # меняем порт SSH
# Настраиваем NTP
/system ntp client set enabled=yes
/system ntp client servers add address=pool.ntp.org
# Смотрим версию
/system resource print
Настройка интерфейсов
# Переименовываем интерфейсы (для ясности)
/interface set ether1 name=WAN comment="Uplink to ISP"
/interface set ether2 name=LAN1 comment="LAN segment 1"
/interface set ether3 name=LAN2 comment="LAN segment 2"
# Создаём bridge для LAN (стандартная практика)
/interface bridge add name=bridge-lan protocol-mode=rstp
/interface bridge port add bridge=bridge-lan interface=LAN1
/interface bridge port add bridge=bridge-lan interface=LAN2
# Назначаем IP на bridge (LAN)
/ip address add address=192.168.10.1/24 interface=bridge-lan
# WAN - DHCP от провайдера
/ip dhcp-client add interface=WAN disabled=no
Часть 2 — Настройка OSPF в RouterOS 7
/ip ospfВ RouterOS 7:
/routing ospf
Это разные команды, разная логика, разные параметры. Не пытайся копировать конфиги из v6 — только нервы потратишь.
Шаг 1 — Убеждаемся, что пакет routing установлен
# Проверяем наличие routing пакета
/system package print
# Если routing не установлен - качаем extra packages с сайта mikrotik.com
# для своей <a title="Архитектура процессоров MikroTik: Таблица совместимости с RouterOS" href="https://it-apteka.com/mikrotik-tablica-sovmestimosti-s-routeros/" target="_blank" rel="noopener" data-wpil-monitor-id="1280">архитектуры и версии RouterOS</a>, заливаем и перезагружаем
Шаг 2 — Создаём OSPF Instance (экземпляр)
# Создаём новый OSPF instance
/routing ospf instance add \
name=ospf-main \
router-id=10.0.0.1 \
version=2 \
redistribute-connected=no \
redistribute-static=no \
comment="Main OSPF instance"
# Проверяем
/routing ospf instance print
Шаг 3 — Создаём OSPF Area
# Backbone area (обязательная для OSPF)
/routing ospf area add \
name=backbone \
area-id=0.0.0.0 \
instance=ospf-main \
comment="Backbone area"
# Если нужна дополнительная area (например, area 1):
/routing ospf area add \
name=area1 \
area-id=0.0.0.1 \
instance=ospf-main \
type=regular \
comment="Branch area 1"
# Stub area (если нужно):
/routing ospf area add \
name=stub-area \
area-id=0.0.0.2 \
instance=ospf-main \
type=stub \
comment="Stub area for remote site"
Шаг 4 — Добавляем интерфейсы в OSPF
# Добавляем интерфейс в backbone area
/routing ospf interface-template add \
interfaces=ether4 \
area=backbone \
type=ptp \
hello-interval=10s \
dead-interval=40s \
priority=1 \
comment="Link to core router"
# Для broadcast-сети (например, общий L2 сегмент):
/routing ospf interface-template add \
interfaces=bridge-lan \
area=backbone \
type=broadcast \
hello-interval=10s \
dead-interval=40s \
priority=1 \
comment="LAN segment"
# Пассивный интерфейс (анонсируем, но OSPF hello не шлём):
/routing ospf interface-template add \
interfaces=loopback0 \
area=backbone \
type=ptp \
passive=yes \
comment="Loopback - passive"
/interface bridge add name=loopback0 и потом /ip address add address=10.0.0.1/32 interface=loopback0. Да, именно через bridge. Это не баг, это фича.Шаг 5 — Настраиваем редистрибуцию маршрутов
# Редистрибуция connected-маршрутов в OSPF (делаем через routing filter):
/routing filter rule add \
chain=ospf-redistribute \
rule="if (dst in 192.168.0.0/16) { accept }"
/routing filter rule add \
chain=ospf-redistribute \
rule="reject"
# Применяем фильтр к instance:
/routing ospf instance set ospf-main \
redistribute-connected=yes \
out-filter-chain=ospf-redistribute
# Редистрибуция статических маршрутов:
/routing ospf instance set ospf-main \
redistribute-static=yes
Шаг 6 — Проверяем, что OSPF работает
# Смотрим соседей
/routing ospf neighbor print
# Смотрим OSPF-маршруты в таблице маршрутизации
/ip route print where routing-mark=main protocol=ospf
# Детальный вывод по конкретному соседу
/routing ospf neighbor print detail
# Смотрим OSPF LSA database
/routing ospf lsa print
# Если что-то не так - смотрим лог routing:
/log print where topics~"ospf"
Полный рабочий конфиг OSPF для двух роутеров
Допустим, у нас два роутера: R1 (10.0.0.1) и R2 (10.0.0.2), соединены через ether4 (10.0.1.0/30).
R1 (RouterOS 7):
# R1 - полный конфиг OSPF
/interface bridge add name=loopback0
/ip address add address=10.0.0.1/32 interface=loopback0
/ip address add address=10.0.1.1/30 interface=ether4
/routing ospf instance add name=ospf-main router-id=10.0.0.1 version=2
/routing ospf area add name=backbone area-id=0.0.0.0 instance=ospf-main
/routing ospf interface-template add interfaces=ether4 area=backbone type=ptp
/routing ospf interface-template add interfaces=loopback0 area=backbone type=ptp passive=yes
R2 (RouterOS 7):
# R2 - полный конфиг OSPF
/interface bridge add name=loopback0
/ip address add address=10.0.0.2/32 interface=loopback0
/ip address add address=10.0.1.2/30 interface=ether4
/routing ospf instance add name=ospf-main router-id=10.0.0.2 version=2
/routing ospf area add name=backbone area-id=0.0.0.0 instance=ospf-main
/routing ospf interface-template add interfaces=ether4 area=backbone type=ptp
/routing ospf interface-template add interfaces=loopback0 area=backbone type=ptp passive=yes
# Проверка на R1 - должны увидеть R2 как соседа:
/routing ospf neighbor print
# Ожидаемый вывод:
# Flags: V - virtual; D - dynamic
# # INSTANCE AREA ADDRESS ROUTER-ID STATE ...
# 0 ospf-main backbone 10.0.1.2 10.0.0.2 Full ...
Часть 3 — Настройка WiFi в RouterOS 7
RouterOS 7 принёс новый WiFi-пакет. На новых устройствах (hAP ax², Chateau, RB5009W и т.д.) по умолчанию стоит именно он — не старый wireless.
Шаг 1 — Проверяем, какой пакет используется
# Смотрим пакеты
/system package print
# Если видишь "wifi" - это новый пакет, читай дальше
# Если видишь "wireless" - старый пакет, команды другие
# Смотрим WiFi интерфейсы:
/interface wifi print
Шаг 2 — Создаём WiFi Security Profile
# Создаём профиль безопасности WPA2/WPA3
/interface wifi security add \
name=wifi-sec-main \
authentication-types=wpa2-psk,wpa3-psk \
passphrase="ВашПарольWifi123!" \
comment="Main WiFi security"
# Только WPA3 (для новых устройств):
/interface wifi security add \
name=wifi-sec-wpa3 \
authentication-types=wpa3-psk \
passphrase="СильныйПароль2024!" \
comment="WPA3 only"
Шаг 3 — Создаём WiFi Configuration Profile
# Создаём конфигурационный профиль для 2.4 GHz
/interface wifi configuration add \
name=cfg-2ghz \
ssid="MyNetwork_2G" \
mode=ap \
security=wifi-sec-main \
channel.band=2ghz-g/n \
channel.width=20mhz \
comment="2.4 GHz config"
# Конфиг для 5 GHz
/interface wifi configuration add \
name=cfg-5ghz \
ssid="MyNetwork_5G" \
mode=ap \
security=wifi-sec-main \
channel.band=5ghz-a/n/ac/ax \
channel.width=80mhz \
comment="5 GHz config"
Шаг 4 — Применяем конфиг к физическому WiFi-интерфейсу
# Смотрим имена физических WiFi-интерфейсов
/interface wifi print
# Применяем конфиг (замени wifi1 на своё имя интерфейса)
/interface wifi set wifi1 \
configuration=cfg-2ghz \
disabled=no
/interface wifi set wifi2 \
configuration=cfg-5ghz \
disabled=no
# Проверяем статус:
/interface wifi print detail
Шаг 5 — Добавляем WiFi в bridge (чтобы клиенты получали IP из LAN)
# Добавляем WiFi интерфейсы в bridge-lan
/interface bridge port add bridge=bridge-lan interface=wifi1
/interface bridge port add bridge=bridge-lan interface=wifi2
# Проверяем bridge:
/interface bridge port print
Настройка гостевой сети WiFi (отдельный VLAN)
# Создаём VLAN 100 для гостей
/interface vlan add name=vlan100-guest vlan-id=100 interface=bridge-lan
# IP для гостевой <a class="wpil_keyword_link" href="https://it-apteka.com/category/networks/" target="_blank" rel="noopener" title="Сети" data-wpil-keyword-link="linked" data-wpil-monitor-id="1289">сети</a>
/ip address add address=192.168.100.1/24 interface=vlan100-guest
# DHCP для гостей
/ip pool add name=pool-guest ranges=192.168.100.100-192.168.100.200
/ip dhcp-server add name=dhcp-guest interface=vlan100-guest address-pool=pool-guest disabled=no
/ip dhcp-server network add address=192.168.100.0/24 gateway=192.168.100.1 dns-server=8.8.8.8
# Гостевой WiFi security profile
/interface wifi security add \
name=wifi-sec-guest \
authentication-types=wpa2-psk \
passphrase="ГостевойПароль789" \
comment="Guest WiFi"
# Гостевой WiFi конфиг
/interface wifi configuration add \
name=cfg-guest \
ssid="MyNetwork_Guest" \
mode=ap \
security=wifi-sec-guest \
comment="Guest network"
# Создаём виртуальный AP интерфейс для гостей
/interface wifi add name=wifi-guest master-interface=wifi1 configuration=cfg-guest disabled=no
# Добавляем гостевой WiFi в VLAN:
/interface bridge port add bridge=bridge-lan interface=wifi-guest pvid=100
# Firewall: запрещаем гостям лезть в основную LAN
/ip firewall filter add \
chain=forward \
in-interface=wifi-guest \
out-interface=bridge-lan \
action=drop \
comment="Block guest to LAN"
Часть 4 — Настройка CHR на Hetzner / облаке
Деплой CHR на Hetzner Cloud (KVM)
# На сервере Hetzner (Debian/Ubuntu):
# Качаем CHR образ
wget https://download.mikrotik.com/routeros/7.14/chr-7.14.img.zip
unzip chr-7.14.img.zip
# Конвертируем в qcow2
qemu-img convert -f raw chr-7.14.img -O qcow2 chr-7.14.qcow2
# Если используешь готовый VPS - можно записать образ прямо на диск (ОСТОРОЖНО):
# dd if=chr-7.14.img of=/dev/sda bs=4M status=progress
# После этого сервер перезагрузится с RouterOS
# Для работы через rescue-систему Hetzner:
# 1. Заходишь в Hetzner Console
# 2. Активируешь Rescue System
# 3. Подключаешься по SSH
# 4. Записываешь образ на диск командой dd выше
# 5. Перезагружаешь без rescue
Первоначальная настройка CHR после запуска
# Подключаемся через VNC или serial console
# Логин: admin, пароль: (пустой)
# Меняем пароль НЕМЕДЛЕННО
/user set admin password="КрепкийПарольAdmin!"
# Смотрим интерфейсы
/interface print
# Задаём IP (если нет DHCP от провайдера)
/ip address add address=5.100.200.10/24 interface=ether1
/ip route add dst-address=0.0.0.0/0 gateway=5.100.200.1
# Разрешаем SSH (и сразу защищаем):
/ip firewall filter add chain=input protocol=tcp dst-port=22 \
src-address=ВашIPДомашний/32 action=accept comment="SSH from home"
/ip firewall filter add chain=input protocol=tcp dst-port=22 \
action=drop comment="Block SSH from everywhere"
# Включаем firewall для защиты:
/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 in-interface=ether1 action=drop comment="Drop all from WAN"
Скрипт автоматического бэкапа конфига CHR
# <a title="Запуск скрипта установки Microsoft DirectX, .NET Framework и VC++ в Steam - что это и как исправить зависание" href="https://it-apteka.com/zapusk-skripta-ustanovki-microsoft-directx-net-framework-i-vc-v-steam-chto-jeto-i-kak-ispravit-zavisanie/" target="_blank" rel="noopener" data-wpil-monitor-id="1277">Скрипт бэкапа —</a> создаёт файл и отправляет на FTP/SFTP
# Добавляем в /system scripts
/system script add name=backup-config source={
:local backupName ("<a class="wpil_keyword_link" href="https://it-apteka.com/category/rezervnoe-kopirovanie/" target="_blank" rel="noopener" title="Резервное копирование" data-wpil-keyword-link="linked" data-wpil-monitor-id="1288">backup</a>-" . [/system identity get name] . "-" . [/system clock get date])
/system backup save name=$backupName
/export file=$backupName
:log info ("Backup created: " . $backupName)
}
# Запускаем по расписанию (каждый день в 03:00)
/system scheduler add \
name=daily-backup \
on-event=backup-config \
start-time=03:00:00 \
interval=1d \
comment="Daily config backup"
Часть 5 — Финальная настройка RouterOS 7: безопасность и мониторинг
Базовый firewall для роутера (Copy-Paste готов)
# <a title="Настройка VLAN на MikroTik (RouterOS 7): полный гайд по bridge, trunk и Wi-Fi" href="https://it-apteka.com/nastrojka-vlan-na-mikrotik-routeros-7-polnyj-gajd-po-bridge-trunk-i-wi-fi/" target="_blank" rel="noopener" data-wpil-monitor-id="1278">Полный минимальный firewall для RouterOS</a> 7
# --- INPUT chain (что разрешено к самому роутеру) ---
/ip firewall filter
# Разрешаем established/related
add chain=input connection-state=established,related action=accept comment="Accept established"
# Дропаем invalid
add chain=input connection-state=invalid action=drop comment="Drop invalid"
# ICMP (ping) разрешаем
add chain=input protocol=icmp action=accept comment="Accept ICMP"
# Winbox только из LAN
add chain=input protocol=tcp dst-port=8291 in-interface=bridge-lan action=accept comment="Winbox from LAN only"
# SSH только из LAN (или конкретного IP)
add chain=input protocol=tcp dst-port=22 in-interface=bridge-lan action=accept comment="SSH from LAN"
# Дропаем всё остальное на вход
add chain=input action=drop comment="Drop all other input"
# --- FORWARD chain (что разрешено через роутер) ---
add chain=forward connection-state=established,related action=accept comment="Accept established forward"
add chain=forward connection-state=invalid action=drop comment="Drop invalid forward"
# FastTrack для высокой производительности
add chain=forward connection-state=established,related action=fasttrack-connection hw-offload=yes comment="FastTrack"
# Разрешаем LAN → WAN
add chain=forward in-interface=bridge-lan out-interface=WAN action=accept comment="LAN to WAN"
# Дропаем остальное
add chain=forward action=drop comment="Drop all other forward"
# --- NAT ---
/ip firewall nat
add chain=srcnat out-interface=WAN action=masquerade comment="Masquerade to WAN"
Мониторинг — включаем SNMP и Netflow
# SNMP v2c (для Zabbix/Grafana)
/snmp set enabled=yes
/snmp community set public name=public security=none read-access=yes
/snmp community add name=monitoring security=none read-access=yes \
addresses=192.168.10.100/32 comment="Zabbix server"
# Netflow (для анализа трафика)
/ip traffic-flow set enabled=yes
/ip traffic-flow target add dst-address=192.168.10.100 port=2055 version=9
Осложнения — типичные ошибки и как их лечить
OSPF соседи не поднимаются (State = Init или Exchange)
/routing ospf neighbor print показывает State=Init или вообще пусто.Чеклист:
- Проверь, что на обоих роутерах одинаковые
hello-intervalиdead-interval - Проверь, что area-id совпадает (0.0.0.0 != 0.0.0.1)
- Проверь firewall — OSPF использует протокол 89 (не TCP/UDP):
# Разрешаем OSPF-трафик в firewall
/ip firewall filter add chain=input protocol=ospf action=accept comment="Allow OSPF" place-before=0
/ip firewall filter add chain=forward protocol=ospf action=accept comment="Allow OSPF forward" place-before=0
# Пингуем соседа:
/ping 10.0.1.2 count=5
# Смотрим лог:
/log print where topics~"ospf"
WiFi интерфейсы не видны в /interface wifi
# Проверяем, установлен ли правильный пакет
/system package print | grep wifi
# Если стоит "wireless" вместо "wifi" - устройство не поддерживает новый пакет
# Либо нужно установить wifi пакет из extra packages
# Качаем extra packages для своей архитектуры с mikrotik.com
# После установки пакета wifi:
/system reboot
# Проверяем снова:
/interface wifi print
CHR — скорость ограничена 1 Мбит/с
# Проверяем лицензию
/system license print
# Если level=free - нужна активация
# Получить trial:
/system license get-trial level=p-unlimited
# Проверяем наличие интернета с роутера:
/ping 8.8.8.8 count=3
# Если нет интернета - сначала настрой IP/gateway, потом активируй лицензию
RouterOS 7 не видит старый конфиг v6
# Экспортируем конфиг в текстовый файл
/export file=old-config-v6
# Скачиваем файл через FTP или Winbox → Files
# Открываем в редакторе и правим:
# - "/ip ospf ..." меняем на "/routing ospf ..."
# - Убираем устаревшие параметры
# Импортируем исправленный файл:
/import file=new-config-v7.rsc
# Смотрим ошибки:
/log print where topics~"script"
FastTrack конфликтует с OSPF при высокой нагрузке
# Если OSPF соседи падают при высоком трафике:
# Добавляем исключение для OSPF из fasttrack
/ip firewall filter add \
chain=forward \
protocol=ospf \
action=accept \
comment="Exclude OSPF from FastTrack" \
place-before=0
# Или явно не применяем FastTrack к протоколу 89:
/ip firewall filter set [find comment="FastTrack"] \
protocol=!ospf
Winbox не подключается к RouterOS 7
# Проверяем, включён ли сервис:
/ip service print
# Winbox должен быть enabled на порту 8291
/ip service enable winbox
/ip service set winbox port=8291
# Качаем актуальную версию Winbox с mikrotik.com/download
# Версия Winbox должна быть 3.x или 4.x для RouterOS 7
Прогноз
Короче, вот что мы сделали:
- Скачали и развернули RouterOS 7 — на железе и в виде CHR
- Настроили OSPF через новый
/routing ospf— с instance, area и интерфейсами - Подняли WiFi через новый пакет wifi с security profile и guest-сетью
- Защитили роутер firewall-ом, включили мониторинг
- Прошлись по типичным граблям, чтобы ты не наступил на них первым
- ✅ OSPF соседи в State=Full
- ✅ OSPF маршруты появились в таблице маршрутизации
- ✅ WiFi клиенты получают IP и выходят в интернет
- ✅ Гостевая сеть не видит основной LAN
- ✅ CHR лицензия активирована
- ✅ Firewall настроен, ненужные сервисы отключены
- ✅ Бэкап конфига по расписанию работает
- ✅ SNMP отвечает на запросы от Zabbix
Если OSPF завёлся с первого раза — добро пожаловать в клуб людей, которые читают документацию. Если не завёлся — перечитай секцию «Осложнения», там ответ почти наверняка есть.
Есть вопросы по конкретной топологии, CHR в AWS или настройке OSPF v3 для IPv6? Пиши в комментарии — разберём.
Оставайтесь на связи
Рецепты от IT-боли. Без воды, без рекламы, без маркетинговой шелухи.
Подписаться на IT-Аптеку →



