Как настроить IPTV PfSense 2.0 Печать
11.06.12 11:32

Я свято и наивно верю, что если человек понимает, что он делает, то он делает это намного эффективнее, чем если просто тупо следует алгоритму, а посему - немного теории.

 

Файл:igmpproxy.jpg

 

Смотрим схему - PC1 хочет смотреть IPTV.

(1) player генерирует IGMP-report, тем самым говоря, что хочет получать multicast поток с неким multicast адресом (пусть будет 239.0.0.1), multicast поток - это поток UDP пакетов (звук + изображение). Разные multicast адреса - разные каналы. Данный IGMP-report также является multicast пакетом, потом транслируется локальным свичом на все порты (в пределах сегмента сети), т.е. его получают все устройства, подключенные к данному свичу (если свич не шибко умный).

(2) Но всем устройствам глубоко фиолетово на этот IGMP-report, однако, только не pfSense'у с работающим igmpproxy, который осознаёт, что у него на LAN появилось какое-то устройство, жаждущее получить multicast-поток с адресом 239.0.0.1. LAN на данной схеме в терминологии igmpproxy является Downstream интерфейсов, т.е. интерфейс, где находится получатель(и) потока. Теперь pfSense'у надо где-то взять этот поток и он формирует IGMP-report на Upstream интерфейсе (WAN), надеясь поиметь этот поток с провайдера. Заметим, что это не пакет (1) просто смаршрутизированный на WAN интерфейс, это совершенно новый пакет, сгенерированный самим pfSense'ом (хотя это сути не меняет).

(3) Устройство провайдера, получив, IGMP-report с интересным адресом 239.0.0.1 восклицает "ба! да здесь кто-то хочет смотреть первый канал!" и начинает лупить в вашу сторону UDP-поток с destination IP address 239.0.0.1.

(4) pfSense уже знает, кто хочет смотреть первый канал, ибо на шаге (2) igmpproxy ядру сказал, что этот поток желают на интерфейсе LAN и ядро FreeBSD уже без какого-либо участия igmpproxy начинает маршрутизировать этот UDP поток на LAN-интерфейс, где благодарные пользователи видят оживший экран своего Player'а.

 

Процедура установки/конфигурирования.

1. Установить пакет igmpproxy из System->Packages

2. Создать правило на LAN-интерфесе в Firewall->Rules (лучше поместить это правило как можно выше, перед всеми разрешающими правилами)

Pass Proto=IGMP Source=LANnet Destination=224.0.0.0/4 AdvancedOptions отметить "This allows packets with ip options to pass ..." Save/Apply

3. Создать правило на WAN-интерфейсе в Firewall->Rules Pass Proto=UDP Destination=224.0.0.0/4 Save/Apply

4. Сконфигурировать igmpproxy в Services->IGMP proxy. Сделать LAN Downstream, а WAN Upstream.

5. Проверить, что igmpproxy запустился в Status->Services.


Всё, в 90% случаев это заработает.

Опционные шаги:

6. Сложный случай раз - провайдер вещает из какой-то сети, отличной от той, что прописана на Upstream (от 1.1.1.0/24 на моей диаграмме), например с адреса 3.4.5.42. Необходимо в конфигурации igmpproxy на Upstream интерфейсе добавить эту сеть в Networks - 3.4.5.0/24 (можно 3.4.5.42/32 для пущего страха).

7. Сложный случай два - у вас крутая сеть и на pfSense LAN есть маршрутизатор, который может маршрутизировать multicast пакеты и за этим маршрутизатором, скажем в сети 10.10.10.0/24, есть устройство, которое хочет смотреть первый канал. Необходимо в конфигурации igmpproxy на Downstream интерфейсе добавить эту сеть в Networks. Возможно, придётся создать правило, аналогичное пункту 2 для данной сети, хотя врядли (зависит от того, как работает этот маршрутизатор).

8. Сложный случай три - это одновременно имеем сложные случаи раз и два. Выполняем пункты 6 и 7.


PS: правила могут быть (и должны быть) жёстче, здесь приведён пример, аналогичный "разрешить всё" для обычного трафика.

PPS: UDP-поток IPTV - это обычно много маленьких пакетов, т.е. довольно интенсивная нагрузка на pfSense, если изображение рассыпается, посмотрите на нагрузку - тянет ли Ваше железо.

PPPS: наверняка что-то забыл, поправки и вопросы приветствуются.


Рекомендовано чтение: IGMP protocol.

 

источник: http://ru.doc.pfsense.org

ссылка на материал: http://thin.kiev.ua/router-os/50-pfsense/617-iptv-pfsense20.html

{jcomments on}

Последнее обновление 11.06.12 11:37