iptv через FreeBSD шлюз
Модератор: terminus
Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2007-11-25 20:34:18
iptv через FreeBSD шлюз
Здравствуйте.
У меня в сети провайдер начал вещать iptv через широковещание(multicast).
Дома 3 компа и шлюз.
Шлюз:
FreeBSD 6.2 , NatD, IPFW.
Захотелось очень смотреть tv на компьютерах внутри сети. И тут возникли проблемы.
Поиск информации в инете дал 2 программки: mroute и igmpproxy(адаптированную под FreeBSD).
Также было пересобрано ядро с добавлением опции MROUTED.
Ни одна из программ не помогла решить задачу.
Т.е. программки запускаются и в режиме отладки видно что пакеты multicast проходят во внутреннюю сеть и выходят из неё.
Смотрю траффик на одном из компьютеров внутренней сети, пакеты действительно проходят, но телевизер так и не заработал(vlc)....
Прошу помощи, как решить проблему....
И вообще возможно ли это реализовать на Фре?
У меня в сети провайдер начал вещать iptv через широковещание(multicast).
Дома 3 компа и шлюз.
Шлюз:
FreeBSD 6.2 , NatD, IPFW.
Захотелось очень смотреть tv на компьютерах внутри сети. И тут возникли проблемы.
Поиск информации в инете дал 2 программки: mroute и igmpproxy(адаптированную под FreeBSD).
Также было пересобрано ядро с добавлением опции MROUTED.
Ни одна из программ не помогла решить задачу.
Т.е. программки запускаются и в режиме отладки видно что пакеты multicast проходят во внутреннюю сеть и выходят из неё.
Смотрю траффик на одном из компьютеров внутренней сети, пакеты действительно проходят, но телевизер так и не заработал(vlc)....
Прошу помощи, как решить проблему....
И вообще возможно ли это реализовать на Фре?
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- мл. сержант
- Сообщения: 124
- Зарегистрирован: 2007-11-06 17:07:27
- Откуда: Москва
Re: iptv через FreeBSD шлюз
Делал в свое время такое. Заработал прадва только igmpproxy и то криво както. Если быстро каналы листать то машина вешается намертво без каких либо сообщений. Сам igmpproxy там настроек почти нет. если не кажет то копайте фаервол
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2007-11-25 20:34:18
Re: iptv через FreeBSD шлюз
На роутере 2 интерфейса
rl0 - внутренний 192.168.0.1/255.255.255.0
vr0 - внешний 84.22.135.154/255.255.255.252
Группа для вещания, например 239.192.1.1
igmpproxy.conf:
rc.ipfw:
Опции ядра:
igmpproxy -d, в момент включения vlc на машине внутри выдаёт следующую картину:
Не подскажете, всё ли правильно настроено?
Или может где-то ошибся?
rl0 - внутренний 192.168.0.1/255.255.255.0
vr0 - внешний 84.22.135.154/255.255.255.252
Группа для вещания, например 239.192.1.1
igmpproxy.conf:
Код: Выделить всё
phyint vr0 upstream ratelimit 0 threshold 1
altnet 239.192.1.1
phyint rl0 downstream ratelimit 0 threshold 1
Код: Выделить всё
#!/bin/sh
ipfw="/sbin/ipfw -q"
if_int="rl0"
if_ext="vr0"
ip_int="192.168.0.1"
net_int="192.168.0.0/24"
#На всякий пожарный
${ipfw} add 10 allow ip from any to any ssh via ${if_int}
#Разрешаем пакеты на lo0
${ipfw} add 100 allow all from any to any via lo0
#Блокируем ssh извне
${ipfw} add 1100 deny ip from any to any ssh in via ${if_ext}
#Блокируем Apach из вне
${ipfw} add 1200 deny ip from any to any 80 in via ${if_ext}
#Блокируем Samba из вне
${ipfw} add 1300 deny ip from any to any 901 in via ${if_ext}
#natd
${ipfw} add 39000 tee 10001 ip from any to any out xmit ${if_ext}
${ipfw} add 40000 divert natd all from any to any via ${if_ext}
${ipfw} add 41000 tee 10001 ip from any to any in recv ${if_ext}
${ipfw} add 65000 allow all from any to any
Код: Выделить всё
machine i386
#cpu I486_CPU
#cpu I586_CPU
cpu I686_CPU
ident gate
options IPFIREWALL # Включаем FireWall
options IPFIREWALL_VERBOSE # Добавляем возможность логгирования
options IPFIREWALL_VERBOSE_LIMIT=100 # Ограничение на кол-во логов
options IPFIREWALL_DEFAULT_TO_ACCEPT # allow from any to any
options IPDIVERT # Включаем перенаправление пакетов
options DUMMYNET # Включаем возможность ограничивать скорость
options IPFIREWALL_FORWARD # Включаем Форвардинг портов
options MROUTING # Включаем мультикаст
options IPSTEALTH # Чтобы не менялся ttl пакетов, для мультикаста iptv
Код: Выделить всё
igmpproxy, Version 0.1 beta3 for FreeBSD, Build 071123
Copyright 2005 by Johnny Egeland <johnny@rlo.org>
Copyright 2007 by Pavel Korshunov, http://www.korshunov.com
Distributed under the GNU GENERAL PUBLIC LICENSE, Version 2 - check GPL.txt
Debu: Searching for config file at '/usr/local/etc/igmpproxy.conf'
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface vr0.
Debu: Config: IF: Got upstream token.
Debu: Config: IF: Got ratelimit token '0'.
Debu: Config: IF: Got threshold token '1'.
Debu: Config: IF: Got altnet token 239.192.1.1/24.
Debu: Config: IF: Altnet: Parsed altnet to 239.192.1/24.
Debu: IF name : vr0
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 1
Debu: Allowednet ptr : 8053040
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface rl0.
Debu: Config: IF: Got downstream token.
Debu: Config: IF: Got ratelimit token '0'.
Debu: Config: IF: Got threshold token '1'.
Debu: IF name : rl0
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 2
Debu: Allowednet ptr : 0
Debu: get if vector
Debu: Searching for config file at 'rl0':65554:0:2
Debu: Searching for config file at 'rl0':2:0:2
Debu: Physical Index value of IF 'rl0' is 1
Debu: buildIfVc: Interface rl0 Addr: 192.168.0.1, Flags: 0xffff8843, Network: 192.168.0/24
Debu: Searching for config file at 'vr0':131090:0:2
Debu: Searching for config file at 'vr0':2:0:2
Debu: Physical Index value of IF 'vr0' is 2
Debu: buildIfVc: Interface vr0 Addr: 84.22.135.154, Flags: 0xffff8843, Network: 84.22.135.152/29
Debu: Searching for config file at 'plip0':196626:0:2
Debu: Searching for config file at 'lo0':262162:0:2
Debu: Searching for config file at 'lo0':28:0:2
Debu: Searching for config file at 'lo0':28:0:2
Debu: Searching for config file at 'lo0':2:0:2
Debu: Physical Index value of IF 'lo0' is 4
Debu: buildIfVc: Interface lo0 Addr: 127.0.0.1, Flags: 0xffff8049, Network: 127/8
Debu: Found config for rl0
Debu: Found config for vr0
Note: adding VIF, Ix 0 Fl 0x0 IP 0x0100a8c0 rl0, Threshold: 1, Ratelimit: 0
Debu: Network for [rl0] : 192.168.0/24
Note: adding VIF, Ix 1 Fl 0x0 IP 0x9a871654 vr0, Threshold: 1, Ratelimit: 0
Debu: Network for [vr0] : 84.22.135.152/29
Debu: Network for [vr0] : 239.192.1/24
Debu: Got 232448 byte buffer size in 8 iterations
Debu: Joining all-routers group 224.0.0.2 on vif 192.168.0.1
Note: joinMcGroup: 224.0.0.2 on rl0
Debu: SENT Membership query from 192.168.0.1 to 224.0.0.1
Debu: Sent membership query from 192.168.0.1 to 224.0.0.1. Delay: 10
Debu: All Created timeout 1 (#0) - delay 10 secs 134531520
Debu: (Id:1, Time:10)
Debu: All Created timeout 2 (#1) - delay 21 secs 134528968
Debu: (Id:1, Time:10)
Debu: (Id:2, Time:21)
Note: RECV V2 member report from 192.168.0.1 to 224.0.0.2
Note: The IGMP message was from myself. Ignoring.
Note: RECV Membership query from 192.168.0.1 to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 192.168.0.1 to 224.0.0.1
Note: RECV V2 member report from 192.168.0.1 to 224.0.0.2
Note: The IGMP message was from myself. Ignoring.
Note: RECV Membership query from 10.0.0.90 to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 10.0.0.90 to 224.0.0.1
Note: RECV V2 member report from 192.168.0.3 to 239.192.1.1
Debu: Should insert group 239.192.1.1 (from: 192.168.0.3) to route table. Vif Ix : 0
Debu: No existing route for 239.192.1.1. Create new.
Debu: No routes in table. Insert at beginning.
Info: Inserted route table entry for 239.192.1.1 on VIF #0
Debu: Joining group 239.192.1.1 upstream on IF address 84.22.135.154
Note: joinMcGroup: 239.192.1.1 on vr0
Debu:
Current routing table (Insert Route);
-----------------------------------------------------
Debu: #0: Src: 0.0.0.0, Dst: 239.192.1.1, Age:2, St: I, OutVifs: 0x00000001
Debu:
-----------------------------------------------------
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV Leave message from 192.168.0.3 to 224.0.0.2
Debu: Got leave message from 192.168.0.3 to 239.192.1.1. Starting last member detection.
Debu: SENT Membership query from 192.168.0.1 to 239.192.1.1
Debu: Sent membership query from 192.168.0.1 to 239.192.1.1. Delay: 10
Debu: While Created timeout 3 (#1) - delay 3 secs
Debu: (Id:1, Time:7)
Debu: (Id:3, Time:3)
Debu: (Id:2, Time:18)
Note: RECV Membership query from 10.0.0.90 to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 10.0.0.90 to 224.0.0.1
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Debu: About to call timeout 1 (#0)
Debu: Aging routes in table.
Debu:
Current routing table (Age active routes);
-----------------------------------------------------
Debu: #0: Src: 0.0.0.0, Dst: 239.192.1.1, Age:2, St: I, OutVifs: 0x00000001
Debu:
-----------------------------------------------------
Note: RECV Membership query from 10.0.0.90 to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 10.0.0.90 to 224.0.0.1
Debu: About to call timeout 3 (#0)
Debu: SENT Membership query from 192.168.0.1 to 239.192.1.1
Debu: Sent membership query from 192.168.0.1 to 239.192.1.1. Delay: 10
Debu: While Created timeout 4 (#0) - delay 10 secs
Debu: (Id:4, Time:10)
Debu: (Id:2, Time:8)
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV Membership query from 10.0.0.90 to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 10.0.0.90 to 224.0.0.1
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV V2 member report from 84.22.135.154 to 239.192.1.1
Note: The IGMP message was from myself. Ignoring.
Note: RECV Membership query from 10.0.0.90 to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 10.0.0.90 to 224.0.0.1
Debu: About to call timeout 4 (#0)
Debu: Removing group 239.192.1.1. Died of old age.
Debu: Removed route entry for 239.192.1.1 from table.
Note: Route is not active. No kernel updates done.
Debu: Leaving group 239.192.1.1 upstream on IF address 84.22.135.154
Note: leaveMcGroup: 239.192.1.1 on vr0
Debu:
Current routing table (Remove route);
Или может где-то ошибся?
Последний раз редактировалось kind21 2007-11-26 19:52:10, всего редактировалось 1 раз.
- Alex Keda
- стреляли...
- Сообщения: 35426
- Зарегистрирован: 2004-10-18 14:25:19
- Откуда: Made in USSR
- Контактная информация:
Re: iptv через FreeBSD шлюз
Убей их всех! Бог потом рассортирует...
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2007-11-25 20:34:18
Re: iptv через FreeBSD шлюз
Вот:
ipfw show
ipfw show
Код: Выделить всё
00010 709 54896 allow ip from any to any dst-port 22 via rl0
00100 32 1984 allow ip from any to any via lo0
01100 0 0 deny ip from any to any dst-port 22 in via vr0
01200 0 0 deny ip from any to any dst-port 80 in via vr0
01300 0 0 deny ip from any to any dst-port 901 in via vr0
39000 6382 2884917 tee 10001 ip from any to any out xmit vr0
40000 113526 141789326 divert 8668 ip from any to any via vr0
41000 107082 138821081 tee 10001 ip from any to any in recv vr0
65000 124703 146806076 allow ip from any to any
65535 0 0 deny ip from any to any
-
- мл. сержант
- Сообщения: 124
- Зарегистрирован: 2007-11-06 17:07:27
- Откуда: Москва
Re: iptv через FreeBSD шлюз
Не селен в ipfw. Попробуйте добавить еще . А лучше погуглите на предмет ipfw + igmp
Код: Выделить всё
ipfw add igmp from any to any
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2007-11-25 20:34:18
Re: iptv через FreeBSD шлюз
Дак вроде политика разрешать всё стоит....
Должно и так проходить....
Хотя...
Всё равно попробовал твоё предложение и всё равно не работает....
Думаю в чём то другом причина...
Только куда копать уже не знаю..
Код: Выделить всё
allow ip from any to any
Хотя...
Всё равно попробовал твоё предложение и всё равно не работает....
Код: Выделить всё
00010 1975 134396 allow ip from any to any dst-port 22 via rl0
00100 2694 170712 allow ip from any to any via lo0
01100 9 528 deny ip from any to any dst-port 22 in via vr0
01200 0 0 deny ip from any to any dst-port 80 in via vr0
01300 0 0 deny ip from any to any dst-port 901 in via vr0
39000 123871 7194430 tee 10001 ip from any to any out xmit vr0
40000 502511 503659430 divert 8668 ip from any to any via vr0
41000 378639 496463656 tee 10001 ip from any to any in recv vr0
42000 17 496 allow igmp from any to 224.0.0.0/24
65000 815110 761129578 allow ip from any to any
65535 0 0 deny ip from any to any
Только куда копать уже не знаю..
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2007-11-25 20:34:18
Re: iptv через FreeBSD шлюз
Проследил tcpdump'ом ход пакетов,
так вот пакеты наружу посылаются, а внутрь ничего не проходит...
может и в правилах ipfw чего напутал...
т.е. на сколько понимаю надо чтобы igmp пакеты проходили внутрь....
кто силён в ipfw подскажите всё правильно?
так вот пакеты наружу посылаются, а внутрь ничего не проходит...
может и в правилах ipfw чего напутал...
т.е. на сколько понимаю надо чтобы igmp пакеты проходили внутрь....
кто силён в ipfw подскажите всё правильно?
- freeman
- лейтенант
- Сообщения: 734
- Зарегистрирован: 2007-03-18 5:13:25
Re: iptv через FreeBSD шлюз
Случайно наткнулся в инете и вспомнил этот вопрос.
options MROUTING и options PIM - в ядре включал ? Для 6-ок говорят необходимо.
нашёл тут.
options MROUTING и options PIM - в ядре включал ? Для 6-ок говорят необходимо.
нашёл тут.
Остатся должен только один ...
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: iptv через FreeBSD шлюз
Для начала стоит разрешить UDP в обе стороны:
чтобы мультикаст ходил в обе стороны нужно статически роутить широковещательные сети на in интерфейс, иначе ничего не заработает, это один из самых тупейших багов IGMP:
потом, тупо транслировать поток,через VLC (udp-multicast):
RTP-streming:
Код: Выделить всё
ipwf add allow udp from any to any
Код: Выделить всё
static_routes="static1 static2"
route_static1="-net 224.0.0.0/8 -iface vr0"
route_static2="-net 233.163.114.0/24 -iface vr0"
route_static3="-net 84.22.135.154/28" -face vr0"
Код: Выделить всё
vlc -vvv input_stream --sout '#duplicate{dst=
standard{access=udp,mux=ts,url=239.192.1.1,sap,name="TestStream"},
dst=standard{access=udp,mux=ts,url=192.168.0.1}}'
Код: Выделить всё
vlc -vvv input_stream --sout '#rtp{dst=192.168.0.1,port=1234,sdp=http://server.example.org:8080/test.sdp}'
Z301171463546 - можно пожертвовать мне денег
-
- рядовой
- Сообщения: 23
- Зарегистрирован: 2007-11-25 20:34:18
Re: iptv через FreeBSD шлюз
В общем проблему рашил так:
Есть под линукс программка igmpproxy, она как раз транслирует траффика по протоколу IGMP с внешнего на внутренний интерфейс.
нашлись умельцы переделавшие её под freeBSD.
Вот её то и воспользовался.
1. Собрал ядро:
2. Установил igmpProxy.
/usr/local/etc/igmpproxy.conf
/etc/rc.conf
3. Перенаправил порт 1234 с внешнего интерфейса на внутренний.
Сделал это при помощи PORTFWD потому как ipfw не победил...
В результате работает.
Единственно что не устраивает так это то, что перенаправление могу делать только на один комп...
соответсвенно все остальные отсекаются....
пока не придумал как победить...
У кого-нибудь есть идеи?
ps: на сколько я понимаю через vlc тоже будет работать только для одного компа...
только ещё и каналы на фрюхе листать придётся...
Есть под линукс программка igmpproxy, она как раз транслирует траффика по протоколу IGMP с внешнего на внутренний интерфейс.
нашлись умельцы переделавшие её под freeBSD.
Вот её то и воспользовался.
1. Собрал ядро:
Код: Выделить всё
#Включаем поддержку multicast
options MROUTING
/usr/local/etc/igmpproxy.conf
Код: Выделить всё
#Чтобы быстро переключалися каналы
quickleave
#Входящий поток, внешняя сеть
phyint vr0 upstream
#Исходящий, внутрення сеть
phyint rl0 downstream
Код: Выделить всё
igmpproxy_enable="YES"
Сделал это при помощи PORTFWD потому как ipfw не победил...
В результате работает.
Единственно что не устраивает так это то, что перенаправление могу делать только на один комп...
соответсвенно все остальные отсекаются....
пока не придумал как победить...
У кого-нибудь есть идеи?
ps: на сколько я понимаю через vlc тоже будет работать только для одного компа...
только ещё и каналы на фрюхе листать придётся...
- zingel
- beastie
- Сообщения: 6204
- Зарегистрирован: 2007-10-30 3:56:49
- Откуда: Moscow
- Контактная информация:
Re: iptv через FreeBSD шлюз
мультикаст он на то и мультикасть, что от одного ко всем, нужно перенаправить поток на мультикаст домен, и тогда этот поток смогут ловить все те, кто имеет настройки одинаковые с Вашим бродкаст доменом, другими словами смогут получать udp-рассылку все те кто в Вашей подсети, вот для этого нужно накинуть диапазоны мультикаст сетей на те интерфейсы, через которые Выхотите вешать в сеть, делается через статичный роутинг, силами rc.conf, igmpproxy вещает по-схеме (если тупо) UDP-multicast -> udp-socket -> bind -> listen, предоставляя юзерлед основы igmp-snooping, то отдает поток только на определнный порт, который ждеёт подключения, организуя схему клиент-сервер, vlc же транслирует мультикаст на всю сеть, Вам необходимо запускать vlc следующим образом
xxx.xx.xx.xx - адрес источника потока (откуда Вы будите брать мультикаст или можно вставить адрес igmp-proxy)
yy - порт вещания (что в первой команде, что во-второй он одинкаков)
233.163.114.152 - адрес мультикаст домена, он должен быть такой или похожий на этот
Код: Выделить всё
vlc xxx.xx.xx.xx:yy --sout udp:233.163.114.152:yyyy --ttl=3
yy - порт вещания (что в первой команде, что во-второй он одинкаков)
233.163.114.152 - адрес мультикаст домена, он должен быть такой или похожий на этот
Z301171463546 - можно пожертвовать мне денег
- leksey
- рядовой
- Сообщения: 13
- Зарегистрирован: 2008-12-21 1:04:55
- Контактная информация: