UPnP на MikroTik — автоматический проброс портов
UPnP (Universal Plug and Play) — протокол, позволяющий приложениям на устройствах в локальной сети автоматически запрашивать у маршрутизатора проброс портов. Без UPnP каждый порт нужно пробрасывать вручную через правила NAT в firewall. С UPnP — игровая консоль, VoIP-телефон или торрент-клиент сами открывают нужные порты на роутере, без участия администратора. Это удобно, но создаёт серьёзные риски безопасности: любое приложение в сети может без ведома администратора открыть произвольный порт наружу.
В RouterOS 7 UPnP поддерживается через меню /ip/upnp. Протокол реализует спецификацию IGD (Internet Gateway Device), которую понимают Windows, macOS, PlayStation, Xbox, большинство VoIP-клиентов и торрент-программ.
Описание
Как работает UPnP
Когда UPnP включён на роутере, происходит следующее:
- Устройство в LAN отправляет SSDP-запрос (Simple Service Discovery Protocol) через multicast на адрес 239.255.255.250:1900
- Роутер отвечает, сообщая свой IP и URL для управления (control URL)
- Приложение на устройстве отправляет SOAP-запрос на control URL с просьбой создать port mapping
- Роутер создаёт динамическое правило NAT (dst-nat), перенаправляющее указанный внешний порт на внутренний IP и порт устройства
- Когда приложение завершает работу (или по таймауту), маппинг удаляется
Весь процесс прозрачен для пользователя. Именно поэтому UPnP так популярен в домашних сетях — пользователю не нужно разбираться в настройках NAT.
Где нужен UPnP
| Сценарий | Почему нужен UPnP | Альтернатива |
|---|---|---|
| Игровые консоли (PS5, Xbox Series) | NAT Type Open для мультиплеера | Ручной проброс портов |
| Торрент-клиенты | Входящие соединения от пиров | Проброс одного порта (6881) |
| VoIP / SIP-телефоны | RTP-потоки через случайные порты | STUN/TURN сервер |
| Онлайн-игры на ПК | Matchmaking, voice chat | Ручной проброс |
| Умный дом | Камеры, IoT-устройства | Cloud relay (без UPnP) |
NAT Type и игровые консоли
Игровые консоли (PlayStation, Xbox) классифицируют NAT по типам:
- NAT Type 1 (Open) — консоль имеет публичный IP (DMZ или прямое подключение)
- NAT Type 2 (Moderate) — UPnP или ручной проброс работает корректно
- NAT Type 3 (Strict) — порты не проброшены, мультиплеер ограничен
Для комфортной игры нужен NAT Type 2 или лучше. UPnP — самый простой способ добиться NAT Type 2 без ручной настройки десятков портов, которые используют консоли.
Безопасность: почему UPnP — это дыра в firewall
UPnP не имеет механизма аутентификации. Любое приложение в вашей локальной сети может:
- Открыть произвольный порт на роутере наружу
- Перенаправить трафик с внешнего порта на любое устройство в LAN
- Сделать это без уведомления администратора
Реальные угрозы:
- Malware — вредоносное ПО на заражённом компьютере открывает порт для управления извне (C2 канал)
- Утечка данных — троян открывает порт для прямого доступа к файлам
- Атака на IoT — уязвимый IoT-девайс через UPnP открывает себя в интернет
Именно через UPnP работали ботнеты Mirai, Hajime и другие атаки на IoT-устройства.
Настройка
Предварительные требования
- RouterOS 7.20+
- Настроенный NAT (masquerade или src-nat для выхода в интернет)
- Настроенный firewall (базовые правила фильтрации)
Шаг 1: Включение UPnP
[admin@MikroTik] >/ip/upnp set enabled=yes allow-disable-external-interface=no
Параметр allow-disable-external-interface=no запрещает UPnP-клиентам отключать внешний интерфейс — оставьте его в no для безопасности.
Шаг 2: Добавление интерфейсов
UPnP должен знать, какой интерфейс внешний (WAN), а какой внутренний (LAN). Необходимо добавить оба:
[admin@MikroTik] ># Внешний интерфейс (WAN) /ip/upnp/interfaces add interface=ether1 type=external # Внутренний интерфейс (LAN) /ip/upnp/interfaces add interface=bridge1 type=internal
Если у вас несколько LAN-сегментов (например, VLAN для игровых устройств), добавьте каждый как internal:
[admin@MikroTik] >/ip/upnp/interfaces add interface=vlan-gaming type=internal /ip/upnp/interfaces add interface=vlan-home type=internal
Шаг 3: Проверка конфигурации
[admin@MikroTik] >/ip/upnp print
Ожидаемый вывод:
codeenabled: yes allow-disable-external-interface: no show-dummy-rule: yes
[admin@MikroTik] >/ip/upnp/interfaces print
Ожидаемый вывод:
codeFlags: X - disabled # INTERFACE TYPE 0 ether1 external 1 bridge1 internal
Полная конфигурация одной командой
Для быстрого развёртывания — все команды одним блоком:
[admin@MikroTik] >/ip/upnp set enabled=yes allow-disable-external-interface=no /ip/upnp/interfaces add interface=ether1 type=external /ip/upnp/interfaces add interface=bridge1 type=internal
Проверка
Просмотр активных UPnP-маппингов
После того как клиентское устройство запросило проброс, маппинг появится в таблице:
[admin@MikroTik] >/ip/upnp/mappings print
Пример вывода (PlayStation 5):
[admin@MikroTik] ># PROTOCOL INT-PORT EXT-PORT INT-ADDRESS EXT-ADDRESS DESCRIPTION ENABLED TIMEOUT 0 udp 3478 3478 192.168.88.50 0.0.0.0 PS5-UDP-3478 yes 0s 1 udp 3479 3479 192.168.88.50 0.0.0.0 PS5-UDP-3479 yes 0s 2 tcp 3480 3480 192.168.88.50 0.0.0.0 PS5-TCP-3480 yes 0s
Здесь видно: PlayStation 5 автоматически запросила проброс трёх портов для PSN-мультиплеера.
Проверка через Winbox
В Winbox: IP → UPnP → Mappings. Вкладка показывает все активные маппинги в реальном времени. Можно видеть, какое устройство открыло какие порты.
Проверка NAT Type на консоли
После включения UPnP проверьте NAT Type в настройках сети консоли:
- PS5: Settings → Network → Test Internet Connection → NAT Type должен быть Type 2
- Xbox: Settings → General → Network Settings → NAT Type должен быть Open или Moderate
Мониторинг через логирование
Для отслеживания UPnP-активности включите логирование:
[admin@MikroTik] >/system/logging add topics=upnp action=memory
Просмотр логов:
[admin@MikroTik] >/log print where topics~"upnp"
Это позволит видеть, когда и какие устройства создают или удаляют маппинги.
Рекомендации по безопасности
Включать UPnP только при необходимости
UPnP нужен далеко не всегда. Если вы можете настроить ручной проброс портов — это всегда безопаснее:
[admin@MikroTik] ># Ручной проброс — безопасная альтернатива UPnP для PS5 /ip/firewall/nat add chain=dstnat protocol=udp dst-port=3478-3480 \ in-interface=ether1 action=dst-nat \ to-addresses=192.168.88.50 to-ports=3478-3480 \ comment="PS5 NAT open" /ip/firewall/nat add chain=dstnat protocol=tcp dst-port=3478-3480 \ in-interface=ether1 action=dst-nat \ to-addresses=192.168.88.50 to-ports=3478-3480 \ comment="PS5 NAT open TCP"
Не включать UPnP в офисной сети
В корпоративной среде UPnP — неконтролируемая дыра. Любой сотрудник (или малварь на его компьютере) может открыть порт наружу. Для офиса:
[admin@MikroTik] ># Убедитесь что UPnP выключен /ip/upnp set enabled=no
Ограничение UPnP на уровне VLAN
Если UPnP нужен только для игровой зоны — создайте отдельный VLAN и добавьте в UPnP только его:
[admin@MikroTik] ># Только VLAN с консолями имеет UPnP /ip/upnp/interfaces add interface=vlan-gaming type=internal # НЕ добавляйте основной bridge или рабочий VLAN
Периодическая проверка маппингов
Регулярно проверяйте, какие порты открыты через UPnP:
[admin@MikroTik] >/ip/upnp/mappings print
Если видите незнакомые устройства или подозрительные порты — расследуйте.
Альтернатива: ручной проброс портов
Ручной проброс (static dst-nat) всегда безопаснее UPnP, потому что:
- Администратор контролирует каждый открытый порт
- Нельзя открыть порт без доступа к роутеру
- Правила видны в firewall и поддаются аудиту
- Нет зависимости от поведения клиентского ПО
Для большинства сценариев достаточно пробросить несколько портов вручную:
| Приложение | Порты | Протокол |
|---|---|---|
| PlayStation Network | 3478-3480 | TCP + UDP |
| Xbox Live | 3074 | TCP + UDP |
| qBittorrent | 6881 (или выбранный) | TCP + UDP |
| SIP/VoIP | 5060 | UDP |
[admin@MikroTik] ># Пример: проброс для Xbox /ip/firewall/nat add chain=dstnat protocol=udp dst-port=3074 \ in-interface=ether1 action=dst-nat \ to-addresses=192.168.88.51 comment="Xbox Live UDP" /ip/firewall/nat add chain=dstnat protocol=tcp dst-port=3074 \ in-interface=ether1 action=dst-nat \ to-addresses=192.168.88.51 comment="Xbox Live TCP"
Типичные ошибки
1. UPnP включён, но маппинги не появляются
Причина: не добавлены интерфейсы в /ip/upnp/interfaces.
Решение: проверьте и добавьте оба интерфейса (external и internal):
[admin@MikroTik] >/ip/upnp/interfaces print # Если пусто — добавьте: /ip/upnp/interfaces add interface=ether1 type=external /ip/upnp/interfaces add interface=bridge1 type=internal
2. NAT Type остаётся Strict на консоли
Причина: firewall блокирует UPnP-трафик (SSDP multicast) или созданные маппинги.
Решение: убедитесь, что firewall разрешает multicast-трафик на порт 1900:
[admin@MikroTik] >/ip/firewall/filter add chain=input protocol=udp dst-port=1900 \ in-interface=bridge1 action=accept \ comment="Allow UPnP SSDP" place-before=0
Также проверьте, что правило forward не блокирует трафик для проброшенных портов.
3. Несколько устройств конфликтуют за один порт
Причина: два устройства запрашивают один и тот же внешний порт (например, две консоли запрашивают порт 3074).
Решение: UPnP назначает порт первому запросившему. Второе устройство получит отказ. Варианты:
- Настроить на втором устройстве другой порт (если приложение позволяет)
- Использовать ручной проброс с разными внешними портами
4. UPnP работает, но приложение всё равно не подключается
Причина: маппинг создан, но firewall filter блокирует forward-трафик для этого порта.
Решение: добавьте разрешающее правило forward для подсети, где находится устройство:
[admin@MikroTik] >/ip/firewall/filter add chain=forward dst-address=192.168.88.0/24 \ connection-state=new,established,related action=accept \ in-interface=ether1 comment="Allow forwarded traffic to LAN" place-before=0
5. UPnP-маппинги исчезают после перезагрузки
Это нормальное поведение. UPnP-маппинги динамические — они хранятся в памяти и пропадают при перезагрузке роутера. После загрузки приложения на клиентских устройствах заново запрашивают маппинги.
Если маппинги не восстанавливаются — перезапустите приложение или устройство.
6. Забыли выключить UPnP после тестирования
Причина: UPnP был включён для отладки и остался включённым в продакшн-сети.
Решение: если UPnP больше не нужен — выключите:
[admin@MikroTik] >/ip/upnp set enabled=no /ip/upnp/interfaces remove [find]
Итоги
UPnP на MikroTik — удобный инструмент для домашних сетей с игровыми консолями, торрент-клиентами и VoIP-телефонами. Он избавляет от необходимости вручную пробрасывать порты. Однако UPnP несёт серьёзные риски: любое приложение в сети может открыть порт наружу без ведома администратора.
Правила применения просты: в домашней сети с консолями — включайте. В офисной или продакшн-среде — категорически нет. Если можете обойтись ручным пробросом — всегда выбирайте его. И обязательно периодически проверяйте /ip/upnp/mappings на предмет подозрительных записей.
/ip/upnp set enabled=yes allow-disable-external-interface=no
# Внешний интерфейс (WAN)
/ip/upnp/interfaces add interface=ether1 type=external
# Внутренний интерфейс (LAN)
/ip/upnp/interfaces add interface=bridge1 type=internal
/ip/upnp/interfaces add interface=vlan-gaming type=internal
/ip/upnp/interfaces add interface=vlan-home type=internal
/ip/upnp print
enabled: yes
allow-disable-external-interface: no
show-dummy-rule: yes
/ip/upnp/interfaces print
Flags: X - disabled
# INTERFACE TYPE
0 ether1 external
1 bridge1 internal
/ip/upnp set enabled=yes allow-disable-external-interface=no
/ip/upnp/interfaces add interface=ether1 type=external
/ip/upnp/interfaces add interface=bridge1 type=internal
/ip/upnp/mappings print
# PROTOCOL INT-PORT EXT-PORT INT-ADDRESS EXT-ADDRESS DESCRIPTION ENABLED TIMEOUT
0 udp 3478 3478 192.168.88.50 0.0.0.0 PS5-UDP-3478 yes 0s
1 udp 3479 3479 192.168.88.50 0.0.0.0 PS5-UDP-3479 yes 0s
2 tcp 3480 3480 192.168.88.50 0.0.0.0 PS5-TCP-3480 yes 0s
/system/logging add topics=upnp action=memory
/log print where topics~"upnp"
# Ручной проброс — безопасная альтернатива UPnP для PS5
/ip/firewall/nat add chain=dstnat protocol=udp dst-port=3478-3480 \
in-interface=ether1 action=dst-nat \
to-addresses=192.168.88.50 to-ports=3478-3480 \
comment="PS5 NAT open"
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=3478-3480 \
in-interface=ether1 action=dst-nat \
to-addresses=192.168.88.50 to-ports=3478-3480 \
comment="PS5 NAT open TCP"
# Убедитесь что UPnP выключен
/ip/upnp set enabled=no
# Только VLAN с консолями имеет UPnP
/ip/upnp/interfaces add interface=vlan-gaming type=internal
# НЕ добавляйте основной bridge или рабочий VLAN
/ip/upnp/mappings print
# Пример: проброс для Xbox
/ip/firewall/nat add chain=dstnat protocol=udp dst-port=3074 \
in-interface=ether1 action=dst-nat \
to-addresses=192.168.88.51 comment="Xbox Live UDP"
/ip/firewall/nat add chain=dstnat protocol=tcp dst-port=3074 \
in-interface=ether1 action=dst-nat \
to-addresses=192.168.88.51 comment="Xbox Live TCP"
/ip/upnp/interfaces print
# Если пусто — добавьте:
/ip/upnp/interfaces add interface=ether1 type=external
/ip/upnp/interfaces add interface=bridge1 type=internal
/ip/firewall/filter add chain=input protocol=udp dst-port=1900 \
in-interface=bridge1 action=accept \
comment="Allow UPnP SSDP" place-before=0
/ip/firewall/filter add chain=forward dst-address=192.168.88.0/24 \
connection-state=new,established,related action=accept \
in-interface=ether1 comment="Allow forwarded traffic to LAN" place-before=0
/ip/upnp set enabled=no
/ip/upnp/interfaces remove [find]