Каталог Поиск 0 Сравнить 0 Закладки 0 Корзина Войти
Каталог
105082, Москва, ул. Фридриха Энгельса, 75с21, БЦ Бауманский ИТКОЛ
Пн - Пт: с 09-00 до 18-00 Сб: с 10-00 до 18-00 Вс: выходной
Страницы: 1
RSS
SSDP-мультикаст между VLANами, UniFi Network
 
USG3 — версия прошивки 4.4.18  
Cloudkey — версия прошивки 0.10.0 — контроллер 5.7.20-10627  
Unifi 8/150 PoE switch — прошивка 3.9.28.8575  
EdgeSwitch 8/150 — прошивка 1.7.32  
Unifi AP-AC-Pro — версия прошивки 3.9.28.8575  

Я разделил свою домашнюю сеть, создав новую VLAN для всех моих AV/IoT устройств и добавил новый SSID, привязанный к этой VLAN, для беспроводных устройств, таких как контроллеры центрального отопления.  
Перенёс всё оборудование Sonos на VLAN для IoT, включил MDNS и igmp-proxy, чтобы можно было управлять Sonos с моей частной VLAN, а также настроил соответствующие правила в фаерволе, чтобы Sonos мог отправлять статус обратно на любые контроллеры — приложения на iPad’ах, Windows и так далее — в приватной VLAN.  
Всё работает нормально после создания файла config.gateway.json на Cloud Key с такой конфигурацией:  
- {  
   "protocols": {  
       "igmp-proxy": {  
           "interface": {  
               "eth1": {  
                   "role": "upstream",  
                   "threshold": "1"  
               },  
               "eth1.20": {  
                   "role": "downstream",  
                   "threshold": "1"  
               }  
           }  
       },  
       "static": {  
           "interface-route": {  
               "0.0.0.0/0": {  
                   "next-hop-interface": {  
                       "pppoe0": {  
                           "distance": "1"  
                       }  
                   }  
               }  
           }  
       }  
   }  
}  

Я в Великобритании, у меня спутниковое ТВ через Sky Q. Основная и субсидарная спутниковые приставки имеют отключённую Wi-Fi Mesh-сеть и подключены к сети напрямую через свитчи. Приложение Sky Q на iPad не подключается к основной приставке, если iPad не находится в IoT WLAN.  

Я захватил некоторый трафик, который генерирует приложение, и заметил, что при запуске оно отправляет 4 UDP SSDP широковещательных пакета с адресом назначения 239.255.255.250 и портом 1900. Я вижу, как они достигают интерфейса USG — счётчик пакетов растёт на 4 при каждом запуске приложения — iPad находится под адресом 192.168.250.36:  

- steven@UniFiSecurityGateway:~$ show ip multicast mfc  
Group           Origin           In          Out                Pkts         Bytes  Wrong  
239.255.255.250 192.168.250.76   eth1        eth1.20             126        5.02KB      0  
239.255.255.250 192.168.250.47   eth1        eth1.20            4546        1.63MB      0  
239.255.255.250 192.168.250.36   eth1        eth1.20              89       13.87KB      0  
239.255.255.250 192.168.250.80   eth1        eth1.20            1088      255.10KB      0  

steven@UniFiSecurityGateway:~$ show ip multicast mfc  
Group           Origin           In          Out                Pkts         Bytes  Wrong  
239.255.255.250 192.168.250.76   eth1        eth1.20             126        5.02KB      0  
239.255.255.250 192.168.250.47   eth1        eth1.20            4554        1.64MB      0  
239.255.255.250 192.168.250.36   eth1        eth1.20              93       14.49KB      0  
239.255.255.250 192.168.250.80   eth1        eth1.20            1093      256.05KB      0  

В отличие от другого SSDP-трафика, который у меня нормально маршрутизируется, приложение Sky ставит TTL равный 1, в то время как обычно для такого трафика это 4. Из-за этого пакеты не маршрутизируются между VLAN.  

Я почитал о похожих проблемах и нашёл полезный пост на форуме EdgeRouter:  
DLNA IGMP SSDP multicast между роутерами  

В комментарии 17 пользователь предложил использовать IPTABLES, чтобы увеличить TTL до 4 при маршрутизации пакетов между сетями.  
Сотрудник UBNT подтвердил, что такой подход возможен, но на тот момент в CLI это не поддерживалось.  

Кто-нибудь пробовал что-то подобное с IPTABLES на USG или есть другие идеи, как корректно протянуть этот трафик между VLAN?  
Спасибо заранее!
 
Привет, у меня такая же проблема. Моя сеть поделена на четыре сектора:  
LAN NATIVE -------- 192.168.14.0/24 (USG3P - SWITCH UNIFI - UAP AC-LITE)  
LAN STAFF --------- 192.168.15.0/24 с VLAN15 и WIFI LAN  
LAN GUEST --------- 192.168.16.0/24 с VLAN16 и WIFI LAN  
LAN MULTIMEDIA - 192.168.17.0/24 с VLAN17 и WIFI LAN (в этой сети у меня все мультимедийные устройства: Chromecast, Apple TV и декодер SKYQ Platinum)  

Проблема в том, что если я с iPhone или iPad подключаюсь к WIFI STAFF (VLAN15), приложение SkyQ для iOS не видит декодер SkyQ. А если я в WIFI MULTIMEDIA — приложение SkyQ находит декодер.  

Я прочитал все темы, но кое-что не понял.  

@stevenwilkes, не мог бы ты подробно объяснить все шаги по решению этой проблемы? Заранее большое спасибо!
 
Он использует много случайных портов из высокого диапазона, и в конце концов мне надоело проверять их в Wire Shark. Я создал правило TCP и UDP с моего Sky Q бокса из IoT VLAN в мой частный VLAN с группой номеров портов, как указано ниже:  
-
 
Классно. Я думал, что это будет с флагом -L, но ладно. Скрипт написан, так что, надеюсь, будет работать дальше. И последний вопрос: ты открывал порты конкретно или просто открыл всё? Я ограничил доступ до своих мобильных устройств, хотел чуть покрепче настроить. Случайно не знаешь список портов, которые использует Sky?
 
Это тоже не отображается в моём выводе команды /sbin/iptables -L. Но у меня была такая же ситуация — если я вручную через SSH вводил команду и добавлял правильные правила файервола из IoT в приватные VLAN, то приложение Sky на iOS работало нормально. Любое перепрошивание или перезагрузка USG ломали всё, пока не добавлял запуск этого скрипта при старте.
 
Я только что выполнил команду, и что интересно — как только я открыл доступ моим устройствам i к IP-адресам sky (правило в брандмауэре в интерфейсе), приложение sky сразу же заработало отлично. Значит, либо команда сработала, но не отобразилась в iptables -L, либо она не сработала и вообще не была нужна?!
 
Судя по твоему сообщению, ты просто выполнил команду? Я проверял команду вручную, прежде чем оформить её в скрипт, как предложил T-Dawg выше. Мой реальный скрипт такой:  
- #!/bin/sh  
/sbin/iptables -A PREROUTING -t mangle -i eth1 -d 239.255.255.250 -j TTL --ttl-set 4  

Этот скрипт сохранил как iptables.sh в /config/scripts/post-config.d.  
Проверь, чтобы у тебя был правильный интерфейс, у меня, например, eth1.
 
Привет, @stevenwilkes, не мог бы ты поделиться своим скриптом, который использовал на USG? Я пытался выполнить /sbin/iptables -A PREROUTING -t mangle -i eth1 -d 239.255.255.250 -j TTL --ttl-set 4 под root на USG, но, похоже, запись не добавляется 🙁
 
Не переживай, рад, что смог помочь — я сам через такое проходил и сдерживался, чтобы не бросить телефон, когда он не мог найти приставку! Меня тоже сбивает с толку весь этот набор портов, в итоге я просто разрешил управлять приставкой Sky только с двух телефонов из белого списка — для меня это как раз то, что нужно. При этом приставка всё равно блокируется для большинства устройств в сети.

Рад слышать, что она нормально переживает перезагрузки и перепрошивки, это полезный совет, который стоит помнить для любых будущих изменений 😁
 
Еще раз спасибо за помощь, @T-Dawg. Это сработало отлично, и я провел остаток вечера, любуясь огромным количеством случайных высоких портов, которые приставка Sky Q использует для связи с приложением на iPad. Из-за этого мои меж VLAN правила фаервола стали немного сложнее, но, по крайней мере, теперь приложение успешно подключается к Sky Box даже после восстановления стандартного правила блокировки с IOT в приватный VLAN. Скрипт, судя по всему, сохраняется после перезагрузки и даже после принудительного повторного развертывания USG.
 
Без проблем. Да, нужно добавить правило prerouting mangle для исходного интерфейса (или switch-интерфейса). В моём случае switch0 — это моя основная LAN, а switch0.15 — IOT VLAN (VLAN 15). Значит, я добавляю правило на интерфейс switch0, а тебе нужно поменять это на твой исходный интерфейс на USG. Приложение Sky шлёт мультикаст-пакеты с TTL=1, но сама приставка Sky отвечает с TTL=4, и это вовсе не проблема (ещё один отличный ход разработчиков Sky), так что правило prerouting на VLAN назначения/skybox тебе не понадобится.

И да, когда создашь скрипт в этой папке (лучше сделать это под root через sudo), не забудь выставить права на выполнение командой: chmod u+x <имя_файла>. Ещё важно, чтобы в начале скрипта была указана оболочка и полный путь для iptables. Вот пример моего скрипта:

#!/bin/sh  
/sbin/iptables -A PREROUTING -t mangle -i switch0 -d 239.255.255.250 -j TTL --ttl-set 4
 
Спасибо за это. Сегодня вечером попробую использовать своё имя интерфейса, которое, как я предполагаю, будет локальным интерфейсом USG в VLAN, с которого мой клиент отправляет начальный мультикаст. Извините за моё незнание Linux, но я думаю, что мне нужно будет изменить скрипт с помощью CHMOD, чтобы он правильно выполнялся?
 
У меня была похожая проблема с IGMP proxy, который не пересылал SSDP-трафик на мой Sky box здесь, в Великобритании. Та же ситуация — tcpdump показывал, что TTL у discovery-пакетов стоит равным 1. Это на ER-X, но, конечно, принцип тот же... Следя за обсуждением, я добавил правило TTL в PREROUTING с помощью mangle, и всё сразу же заработало. Я использовал команду:  
iptables -A PREROUTING -t mangle -i switch0 -d 239.255.255.250 -j TTL --ttl-set 4

Что касается сохранения этого правила, в отсутствии более официального способа (или, скажем, правки perl-скриптов vyatta, которые всё равно перезапишутся при обновлении), я записал команду iptables в shell-скрипт и положил его в /config/script/post-config.d/ — этот скрипт запускается при каждом старте от имени root.
Страницы: 1
Читают тему (гостей: 1)