LINUX.ORG.RU
ФорумAdmin

Openwrt и IPTV/UDP multicast

 , ,


0

2

Проблема, что на роутере с openwrt сабж не работает или недонастроен.

Есть ТВ в коробочке от Ростелекома (но думаю провайдер здесь не принципиален), какое-то время назад они сделали так, что не нужен ни STB порт, ни вланы - работает и так.

И есть два роутера, на одном всего два чекбокса, после включения которых ТВ показывает:

  • включить IGMP маршрутизацию
  • включить IGMP snooping

На втором, на котором openwrt, в провайдерской коробочке работает только контент по запросу, а IPTV нет.

На работающем роутере, вроде всё логично, запущен igmpproxy и настроены правила

-A INPUT -d 224.0.0.0/4 -p igmp -j ACCEPT
-A INPUT -d 224.0.0.0/4 -p udp -m udp ! --dport 1900 -j ACCEPT
-A FORWARD -d 224.0.0.0/4 -p udp -j ACCEPT

На openwrt:

  • включен IGMP snooping на br-lan
  • igmpproxy
quickleave
phyint pppoe-wan upstream ratelimit 0 threshold 1
        altnet 0.0.0.0/0
phyint br-lan downstream ratelimit 0 threshold 1
phyint lo disabled ratelimit 0 threshold 1
  • правила файрвола:
config rule
        option src      'wan'
        option proto    'igmp'
        option dest_ip '224.0.0.0/4'
        option target   'ACCEPT'

config rule
        option src     'wan'
        option proto    'udp'
        option dest_ip  '224.0.0.0/4'
        option target   'ACCEPT'

config rule                                  
        option src 'wan'                          
        option proto 'udp'                   
        option dest 'lan'                         
        option dest_ip '224.0.0.0/4'         
        option target 'ACCEPT' 

и не работает «multicast unavialable» на приставке.

Что не так, что упускаю?

★★★★★
Ответ на: комментарий от anonymous

выполнил

root@Australia:~# /etc/init.d/igmpproxy stop
root@Australia:~# igmpproxy -n -d -vv /root/igmpproxy.conf
Searching for config file at ‘/root/igmpproxy.conf’
Config: Got a phyint token.
Config: IF: Config for interface pppoe-wan.
Config: IF: Got upstream token.
Config: IF: Got altnet token 0.0.0.0/0.
Config: IF: Altnet: Parsed altnet to default.
IF name : pppoe-wan
Next ptr : 0
Ratelimit : 0
Threshold : 1
State : 1
Allowednet ptr : 77dcaba0
Config: Got a phyint token.
Config: IF: Config for interface br-lan.
Config: IF: Got downstream token.
IF name : br-lan
Next ptr : 0
Ratelimit : 0
Threshold : 1
State : 2
Allowednet ptr : 0
buildIfVc: Interface lo Addr: 127.0.0.1, Flags: 0x0049, Network: 127/8
buildIfVc: Interface br-lan Addr: 192.168.1.1, Flags: 0x1043, Network: 192.168.1/24
buildIfVc: Interface pppoe-wan Addr: 100.80.185.24, Flags: 0x10d1, Network: 100.83.255.143/32
Found config for br-lan
Found config for pppoe-wan
adding VIF, Ix 0 Fl 0x0 IP 0x0101a8c0 br-lan, Threshold: 1, Ratelimit: 0
Network for [br-lan] : 192.168.1/24
Found upstrem IF #0, will assing as upstream Vif 2 adding VIF, Ix 1 Fl 0x0 IP 0x18b95064 pppoe-wan, Threshold: 1, Ratelimit: 0
Network for [pppoe-wan] : 100.83.255.143/32
Network for [pppoe-wan] : default
Got 262144 byte buffer size in 0 iterations
Joining all-routers group 224.0.0.2 on vif 192.168.1.1
Joining group 224.0.0.2 on interface br-lan
Joining all igmpv3 multicast routers group 224.0.0.22 on vif 192.168.1.1
Joining group 224.0.0.22 on interface br-lan
SENT Membership query from 192.168.1.1 to 224.0.0.1
Sent membership query from 192.168.1.1 to 224.0.0.1. Delay: 10
Created timeout 1 (#0) - delay 10 secs
(Id:1, Time:10)
Created timeout 2 (#1) - delay 21 secs
(Id:1, Time:10)
(Id:2, Time:21)
RECV Membership query from 192.168.1.1 to 224.0.0.1
RECV V2 member report from 192.168.1.1 to 224.0.0.2
The IGMP message was from myself. Ignoring.
RECV V2 member report from 192.168.1.1 to 224.0.0.22
The IGMP message was from myself. Ignoring.
About to call timeout 1 (#0)
Aging routes in table.

Current routing table (Age active routes):

No routes in table…

Route activate request from 192.168.1.248 to 239.255.255.250 on VIF[1]
No table entry for 239.255.255.250 [From: 192.168.1.248].
Inserting route.
No existing route for 239.255.255.250. Create new.
No routes in table. Insert at beginning.
Inserted route table entry for 239.255.255.250 on VIF #-1
No downstream listeners for group 239.255.255.250. No join sent.

Current routing table (Insert Route):

#0: Dst: 239.255.255.250, Age:2, St: I, OutVifs: 0x00000000, dHosts: not tracked

Current routing table (Activate Route):

#0: Src0: 192.168.1.248, Dst: 239.255.255.250, Age:2, St: A, OutVifs: 0x00000000, dHosts: not tracked

RECV V2 member report from 192.168.1.248 to 239.255.255.250
Should insert group 239.255.255.250 (from: 192.168.1.248) to route table. Vif Ix : 0
Updated route entry for 239.255.255.250 on VIF #0
Vif bits : 0x00000001
Setting TTL for Vif 0 to 1
Adding MFC: 192.168.1.248 -> 239.255.255.250, InpVIf: 1
Joining group 239.255.255.250 upstream on IF address 100.80.185.24
Joining group 239.255.255.250 on interface pppoe-wan

Current routing table (Insert Route):

#0: Src0: 192.168.1.248, Dst: 239.255.255.250, Age:2, St: A, OutVifs: 0x00000001, dHosts: not tracked

RECV V2 member report from 192.168.1.248 to 224.0.1.187
Should insert group 224.0.1.187 (from: 192.168.1.248) to route table. Vif Ix : 0
No existing route for 224.0.1.187. Create new.
Found existing routes. Find insert location.
Inserting at beginning, before route 239.255.255.250
Inserted route table entry for 224.0.1.187 on VIF #0
Joining group 224.0.1.187 upstream on IF address 100.80.185.24
Joining group 224.0.1.187 on interface pppoe-wan

Current routing table (Insert Route):

#0: Dst: 224.0.1.187, Age:2, St: I, OutVifs: 0x00000001, dHosts: not tracked
#1: Src0: 192.168.1.248, Dst: 239.255.255.250, Age:2, St: A, OutVifs: 0x00000001, dHosts: not tracked

About to call timeout 2 (#0)
SENT Membership query from 192.168.1.1 to 224.0.0.1
Sent membership query from 192.168.1.1 to 224.0.0.1. Delay: 10
Created timeout 3 (#0) - delay 10 secs
(Id:3, Time:10)
Created timeout 4 (#1) - delay 21 secs
(Id:3, Time:10)
(Id:4, Time:21)
RECV Membership query from 192.168.1.1 to 224.0.0.1
About to call timeout 3 (#0)
Aging routes in table.

Current routing table (Age active routes):

#0: Dst: 224.0.1.187, Age:1, St: I, OutVifs: 0x00000001, dHosts: not tracked
#1: Src0: 192.168.1.248, Dst: 239.255.255.250, Age:2, St: A, OutVifs: 0x00000001, dHosts: not tracked

RECV V2 member report from 192.168.1.1 to 224.0.0.2
The IGMP message was from myself. Ignoring.
RECV V2 member report from 192.168.1.1 to 224.0.0.22
The IGMP message was from myself. Ignoring.
RECV V2 member report from 192.168.1.248 to 224.0.1.187
Should insert group 224.0.1.187 (from: 192.168.1.248) to route table. Vif Ix : 0
Updated route entry for 224.0.1.187 on VIF #0

Current routing table (Insert Route):

#0: Dst: 224.0.1.187, Age:1, St: I, OutVifs: 0x00000001, dHosts: not tracked
#1: Src0: 192.168.1.248, Dst: 239.255.255.250, Age:1, St: A, OutVifs: 0x00000001, dHosts: not tracked

RECV V2 member report from 192.168.1.1 to 224.0.0.2
The IGMP message was from myself. Ignoring.
RECV V2 member report from 192.168.1.248 to 224.0.1.187
Should insert group 224.0.1.187 (from: 192.168.1.248) to route table. Vif Ix : 0
Updated route entry for 224.0.1.187 on VIF #0

^[About to call timeout 22 (#0)
SENT Membership query from 192.168.1.1 to 224.0.0.1
Sent membership query from 192.168.1.1 to 224.0.0.1. Delay: 10
Created timeout 26 (#0) - delay 10 secs
(Id:26, Time:10)
Created timeout 27 (#1) - delay 115 secs
(Id:26, Time:10)
(Id:27, Time:115)
RECV Membership query from 192.168.1.1 to 224.0.0.1
^Cselect() failure; Errno(4): Interrupted system call
Got a interrupt signal. Exiting.
clean handler called
Removing route entry for 224.0.1.60
Vif bits : 0x00000000
Removing MFC: 192.168.1.172 -> 224.0.1.60, InpVIf: 1
MRT_DEL_MFC; Errno(2): No such file or directory
Removing route entry for 224.0.1.187
Leaving group 224.0.1.187 upstream on IF address 100.80.185.24
Leaving group 224.0.1.187 on interface pppoe-wan
Removing route entry for 239.255.255.250
Vif bits : 0x00000001
Setting TTL for Vif 0 to 1
Removing MFC: 192.168.1.172 -> 239.255.255.250, InpVIf: 1
Vif bits : 0x00000001
Setting TTL for Vif 0 to 1
Removing MFC: 192.168.1.248 -> 239.255.255.250, InpVIf: 1
Leaving group 239.255.255.250 upstream on IF address 100.80.185.24
Leaving group 239.255.255.250 on interface pppoe-wan
All routes removed. Routing table is empty.
Shutdown complete….

MaxML
()
Ответ на: комментарий от MaxML

В общем, выясняется, что igmp не ходит через pppoe, а шлется параллельным потоком. Тогда возвращаем interface iptv:

config device
       option name br-lan'
       option type 'bridge'
       list ports 'eth0.1'
       option igmp_snooping '1'

config interface 'lan'
       option device 'br-lan'
       option proto 'static'
       option ipaddr '192.168.1.1'
       option netmask '255.255.255.0'
       option ip6assign '60'
       option igmp_snooping '1'

#не уверен, что эта секция нужна. попробовать закомментировать
config device
       option name 'eth0.2'
       option macaddr 'c3:21:35:3a:1b:07'

config interface 'wan'
       option device 'eth0.2'
       option proto 'pppoe'
       option username 'XXXXXXXXX_X@msk'
       option password 'XXXXXXXXX'
       option ipv6 'auto'

config switch
       option name 'switch0'
       option reset '1'
       option enable_vlan '1'

config switch_vlan
       option device 'switch0'
       option vlan '1'
       option vid '1'
       option ports '6t 1 2 3'

config switch_vlan
       option device 'switch0'
       option vlan '2'
       option vid '2'
       option ports '6t 0 4'

config interface 'iptv'
       option proto 'static'
       option device 'eth0.2'
       option ipaddr '10.10.10.1'
       option netmask '255.255.255.0'
       option type 'bridge'

Интерфейс iptv надо в luci добавить в зону wan. По-идее, если не планируется смотреть ТВ на других локальных портах, то igmpproxy не нужен. Вроде бы, этого должно быть достаточно, если не провайдер не использует vlan для передачи iptv.

anonymous
()
Ответ на: комментарий от anonymous

Нет. Я звонил в Ростелеком, они сказали что для центрального федерального округа вообще не используется VLAN. Да и по форумам это подтвердилось, пишут например, что не используется.

MaxML
()
Ответ на: комментарий от anonymous

Не помогло. После того, как я так сделал, не смог вообще зайти на роутер через Luci.
Формируется ошибка «RPC call to uci/get failed with ubus code 9: Unspecified error»
И также интернет есть, список каналов загружается, но в режиме онлайн просмотр не возможен.

MaxML
()
Ответ на: комментарий от anonymous

Вообщем после появления ошибки «RPC call to uci/get failed with ubus code 9: Unspecified error» пропал пункт меню Network - Switch в Luci роутера.
Пришлось роутер заново прошить.
После прошивки настроил только PPoE. VLANы не трогал, и они по умолчанию такие:
На VLAN 1 порты «1 2 3 4 6t»
На VLAN 1 порты «0 6t»
При этом список каналов загружается, но онлайн просмотр не возможен.

MaxML
()
Ответ на: комментарий от MaxML

Т.е. исходная конфигурация после прошивки с рабочим инетом, с загружающимся списком каналов, но без возможности онлайн просмотра

config interface ‘wan’
option device ‘eth0.2’
option proto ‘pppoe’
option username ‘XXXXXX_X@XXX’
option password ‘XXXXXXXXX’
option ipv6 ‘auto’
option type ‘bridge’

config interface ‘wan6’
option device ‘eth0.2’
option proto ‘dhcpv6’

config switch
option name ‘switch0’
option reset ‘1’
option enable_vlan ‘1’

config switch_vlan
option device ‘switch0’
option vlan ‘1’
option ports ‘1 2 3 4 6t’

config switch_vlan
option device ‘switch0’
option vlan ‘2’
option ports ‘0 6t’

MaxML
()
Ответ на: комментарий от MaxML

Объедините порт с приставкой с внешним портом (и уберите его с vlan 1):

config switch_vlan
  option device ‘switch0’
  option vlan ‘2’
  option ports ‘0 4 6t’

Если vlan не используется для iptv, то этого должно быть достаточно. Даже создавать интерфейс iptv не нужно. Может быть вариант, что провайдер должен прописать где-то у себя mac-адрес приставки? И всё-таки стоит попробовать посмотреть трафик с помощью tcpdump.

Поместить блок кода:

```код```
anonymous
()
Ответ на: комментарий от anonymous

Выполнил. Тщетно.

config interface ‘loopback’
option device ‘lo’
option proto ‘static’
option ipaddr ‘127.0.0.1’
option netmask ‘255.0.0.0’

config globals ‘globals’
option ula_prefix ‘ff99:1138:d4da::/48’

config device
option name ‘br-lan’
option type ‘bridge’
list ports ‘eth0.1’
option igmp_snooping ‘1’
option multicast ‘1’
option igmpversion ‘2’

config interface ‘lan’
option device ‘br-lan’
option proto ‘static’
option ipaddr ‘192.168.1.1’
option netmask ‘255.255.255.0’
option ip6assign ‘60’

config device
option name ‘eth0.2’
option macaddr ‘c4:71:54:1a:7b:05’

config interface ‘wan’
option device ‘eth0.2’
option proto ‘pppoe’
option username ‘XXXXXXX_X@XXX’
option password ‘XXXXXXXX’
option ipv6 ‘auto’
option type ‘bridge’

config interface ‘wan6’
option device ‘eth0.2’
option proto ‘dhcpv6’

config switch
option name ‘switch0’
option reset ‘1’
option enable_vlan ‘1’

config switch_vlan
option device ‘switch0’
option vlan ‘1’
option ports ‘6t 1 2 3’

config switch_vlan
option device ‘switch0’
option vlan ‘2’
option ports ‘6t 4 0’

MaxML
()
Ответ на: комментарий от MaxML
config switch_vlan
  option device ‘switch0’
  option vlan ‘2’
  option ports ‘6t 4 0’

Вот эта секция объединяет порты 4 и 0 в единую сеть, разрешая свободное хождение ethernet-фреймов между сетями на этих портах. Собственно, для lan тоже необязательно создавать мост из одного интерфейса eth0.1. Достаточно в конфигурацию lan вместо br-lan поместить eth0.1. Мост будет нужен, если необходимо объединить с локальной беспроводную сеть.

anonymous
()
Ответ на: комментарий от MaxML

Подключиться по ssh и запустить tcpdump:

tcpdump -ni eth0.2 igmp

Поглядеть, есть ли фреймы с vlan:

tcpdump -ni eth0.2 -e vlan

Для выделения кода используется кавычка, расположенная на клавише с буквой ё.

anonymous
()
Ответ на: комментарий от MaxML

Наконец-то все получилось!
В LUCi в разделе Interfaces создал интерфейс iptv (чувствителен к регистру). Выкладываю файл /etc/config/network

config interface 'loopback'
	option device 'lo'
	option proto 'static'
	option ipaddr '127.0.0.1'
	option netmask '255.0.0.0'

config globals 'globals'
	option ula_prefix 'bfc2:634a:fa90::/48'

config device
	option name 'br-lan'
	option type 'bridge'
	list ports 'eth0.1'
	option ipv6 '0'
        option igmp_snooping '1'

config interface 'lan'
	option device 'br-lan'
	option proto 'static'
	option ipaddr '192.168.1.1'
	option netmask '255.255.255.0'
	option ip6assign '60'
	option delegate '0'
        option igmp_snooping '1'

config device
	option name 'eth0.2'
	option macaddr 'd4:81:14:1b:7a:03'
	option igmpversion '2'
	option ipv6 '0'
	option sendredirects '1'
	option multicast '1'

config interface 'wan'
	option device 'eth0.2'
	option proto 'pppoe'
	option username 'XXXXXX@msk'
	option password 'XXXXX'
	option ipv6 '0'
	option type 'bridge'
	option sourcefilter '0'
	option delegate '0'

config device
        option name 'eth0.1'
        option type '8021q'
        option ifname 'eth0'
        option vid '1'
        option ipv6 '0'

config switch
	option name 'switch0'
	option reset '1'
	option enable_vlan '1'

config switch_vlan
	option device 'switch0'
	option vlan '1'
	option ports '6t 1 2 3'

config switch_vlan
        option device 'switch0'
        option vlan '2'
        option ports '6t 4 0'

config interface 'iptv'
	option proto 'static'
	option device 'eth0.2'
	list ipaddr '10.0.0.1'
	option gateway '255.255.255.255'
	option defaultroute '0'
	option delegate '0'

config device
	option name 'eth0'
	option ipv6 '0'

файл /etc/config/igmpproxy

config igmpproxy
	option quickleave 1
#	option verbose [0-3](none, minimal[default], more, maximum)

config phyint
	option network iptv
	option zone wan
	option direction upstream
#	list altnet 225.33.53.0/16
	list altnet 0.0.0.0/0

config phyint
	option network lan
	option zone lan
	option direction downstream
config phyint 
	option network loopback
	option direction disabled

файл /etc/config/firewall

config defaults
	option syn_flood '1'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'

config zone
	option name 'lan'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'
	list network 'lan'

config zone
	option name 'wan'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option masq '1'
	option mtu_fix '1'
	list network 'wan'
	list network 'IPTV'
	list network 'iptv'

config forwarding
	option src 'lan'
	option dest 'wan'

config rule
	option name 'Allow-DHCP-Renew'
	option src 'wan'
	option proto 'udp'
	option dest_port '68'
	option target 'ACCEPT'
	option family 'ipv4'

config rule
	option name 'Allow-Ping'
	option src 'wan'
	option proto 'icmp'
	option icmp_type 'echo-request'
	option family 'ipv4'
	option target 'ACCEPT'

config rule
	option name 'Allow-IGMP'
	option src 'wan'
	option proto 'igmp'
	option family 'ipv4'
	option target 'ACCEPT'

config rule
	option name 'Allow-IPTV-IGMPPROXY'
	option src 'wan'
	option proto 'udp'
	option dest 'lan'
	option dest_ip '224.0.0.0/4'
	option target 'ACCEPT'

config rule
	option name 'Allow-IPTV-ALL'
	option src 'wan'
	option proto 'all'
	option dest_ip '224.0.0.0/4'
	option target 'ACCEPT'

config rule
	option name 'Allow-DHCPv6'
	option src 'wan'
	option proto 'udp'
	option dest_port '546'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-MLD'
	option src 'wan'
	option proto 'icmp'
	option src_ip 'fe80::/10'
	list icmp_type '130/0'
	list icmp_type '131/0'
	list icmp_type '132/0'
	list icmp_type '143/0'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-ICMPv6-Input'
	option src 'wan'
	option proto 'icmp'
	list icmp_type 'echo-request'
	list icmp_type 'echo-reply'
	list icmp_type 'destination-unreachable'
	list icmp_type 'packet-too-big'
	list icmp_type 'time-exceeded'
	list icmp_type 'bad-header'
	list icmp_type 'unknown-header-type'
	list icmp_type 'router-solicitation'
	list icmp_type 'neighbour-solicitation'
	list icmp_type 'router-advertisement'
	list icmp_type 'neighbour-advertisement'
	option limit '1000/sec'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-ICMPv6-Forward'
	option src 'wan'
	option dest '*'
	option proto 'icmp'
	list icmp_type 'echo-request'
	list icmp_type 'echo-reply'
	list icmp_type 'destination-unreachable'
	list icmp_type 'packet-too-big'
	list icmp_type 'time-exceeded'
	list icmp_type 'bad-header'
	list icmp_type 'unknown-header-type'
	option limit '1000/sec'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-IPSec-ESP'
	option src 'wan'
	option dest 'lan'
	option proto 'esp'
	option target 'ACCEPT'

config rule
	option name 'Allow-ISAKMP'
	option src 'wan'
	option dest 'lan'
	option dest_port '500'
	option proto 'udp'
	option target 'ACCEPT'
MaxML
()
Последнее исправление: MaxML (всего исправлений: 1)
18 января 2025 г.
Ответ на: комментарий от MaxML

Спасибо, заработало.Хотя чуть изменил. Тоже отделил 4й порт свича от первых трех, но выделил его в отдельный vlan4 с другим мостом (192.168.4.1) Плюс все завернул в VPN. (openvpn). A то некоторые операторы бокируют iptv серверы.

GET
()