Помогите с мультикастом (IPTV)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

xrootx
Сообщения: 92

Помогите с мультикастом (IPTV)

Сообщение xrootx »

Здравствуйте, помогите прокинуть мультикаст (IPTV) в локалку. Моя локалка 192.168.0.0/24 локалка провайдера 10.0.0.0/8 стоит сервер под Gentoo с двумя сетевухами, соответственно eth0 смотрит в сеть провайдера а eth1 в мою локалку. Мультикаст идёт с 233.32.240.0/24 в iptables все правила по дефолту ACCEPT вроде не каких блокирующих правил нет. Побывал поднимать igmpproxy c таким конфигов:

Код: Выделить всё

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
altnet 233.32.240.0/24
phyint eth1 downstream  ratelimit 0  threshold 1

но не чего не работало. В ядре CONFIG_IP_MULTICAST=y Помогите плз!
Спасибо сказали:
Аватара пользователя
sda
Сообщения: 419
ОС: SuSE

Re: Помогите с мультикастом (IPTV)

Сообщение sda »

1. выдача с 233.32.240.0/24 идти не может (это трансляция, а не источник)
2. соответственно в altnet значение не верно
3. в codebox ниже выкладываю примерное описание для своего провайдера (авторы - я и товарищ Sample)

Код:

ТВ и наша сеть [править] Intro На данный момент (15 июля 2007) IPTV в нашей сети находится в стадии тестирования. На сайте http://himki.net можно посмотреть на каких улицах работают все каналы. Пользователи с других улиц могут смотреть только три канала Если вы счастливчик ссылка для вас: http://www.himki.net/tv/himki-tv.m3u Если же вас нет в списке, но посмотреть дискавери ( :))) ) очень хочется: http://himki.net/tv/free-tv.m3u Эти ссылки можно вбить в VLC, как рекомендует himki.net, а можно открыть редактором и вручную вбить ссылки в проигрыватель. [править] Как оно работает В нашей сети пакеты приходят с адреса 77.246.96.66 на адреса 233.163.114.0/24. 233.163.114.0/24 относится к группе адресов, называемых мультикаст адресами (подробнее про мультикаст тут. EN Wikipedia:Multicast) Если ничего не настраивать, выключить VPN, и прописать default роут на ваш шлюз, то возможно работать будет, но это не наш метод (с) :) Адреса вида 233.163.114.* нам сказал плейлист, а вот чтобы понять откуда "летит" сигнал нам нужен или tcpdump, или ethereal или wireshark. Можно конечно спросить об этом у представителей Провайдера и подождать ответа... потом ещё подождать... и ещё... (ну Вы поняли...). Для примера - картинки из ethereal/wireshark. Выключаем ВПН, сбрасываем всё в дефолт, запускаем на просмотр любой ТВ канал, и как "рут" (root) запускаем нашу чудо-программулину: Скриншотик с настройками -Попалсо?! -Раком! (с) '''''Here We Go!!!''''' [править] Просмотр ТВ [править] В Linux Первым делом убедитесь, что поддержка мультикаста включена в ядре (ядро скомпилированно с этой опцией, мудуль загружен, итп) Потом посмотрите включен ли мультикаст на интерфейсе ifconfig eth0 eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX inet addr:10.10.194.57 Bcast:10.10.194.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:114389194 errors:12 dropped:0 overruns:1334 frame:12 TX packets:138950758 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:72641939276 (69276.7 Mb) TX bytes:178563159926 (170291.0 Mb) Interrupt:21 Base address:0x4000 Если вы увидели слово MULTICAST, значит все хорошо, двигаемся дальше. Если Вы планируете воспользоваться программой igmpproxy для трансляции ТВ на Вашу "домашнюю" сеть, требуется убедиться в наличии ещё одной "ядрёной" функции: [sda@black ~]$ zcat /proc/config.gz | grep MROUT CONFIG_IP_MROUTE=y иначе - пересобирайте ядро, Господа... Заодно можно проверить и поддержку мультикаста самим ядром: [sda@black ~]$ zcat /proc/config.gz | grep MULTICAST CONFIG_IP_MULTICAST=y сие значит, что у меня означенная поддержка вкомпилена в ядро. [править] Вариант без VPN Если у вас в сегменте нет VPN (а остались такие? o_O), или по каким-то своим соображением вы выключаете VPN перед просмотром ТВ, вы должны проверить что default роут у вас прописан правильно. Наберите команду route Должна быть примерно такая картина Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.194.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 10.0.0.0 10.10.194.1 255.0.0.0 UG 0 0 0 eth0 0.0.0.0 10.10.194.1 0.0.0.0 UG 0 0 0 eth0 При таком раскладе таблицы роутинга все работает. [править] Вариант с VPN Если у вас интернет идет через VPN, вам нужно сделать некоторые телодвижения, для того чтобы ТВ заработало. Продумаем план действий. Нам нужно чтобы: 1. система поняла, что мультикаст пакеты приходят на интерфейс eth0, а не на vpn; 2. система поняла, что ip с которого происходит вещание (у нас 77.246.96.66) так же должен идти через eth0. После того, как мы составили план действий, приводим его в жизнь. route add -net 233.163.114.0/24 dev eth0 route add -host 77.246.96.66 dev eth0 Собственно говоря все. Enjoy =) [править] В Mac OS В Mac OS (тестировалось на 10.4.10) ТВ с выключенным VPN работает по умолчанию, чтобы заставить работать с VPN-ом, Нужно прописать роуты, для этого откройте программу Terminal (Applications->Utilities->Terminal) и введите там следующие строки: sudo route add -net 233.163.114.0/24 -iface en0 когда спросят - введите ваш пароль, потом еще одну строку: sudo route add -host 77.246.96.66 -iface en0 где en0 ваша сетевая карта, подключенная к химкинет. для того, чтобы не вбивать это заново после перезагрузки системы - внесите записи в /etc/rc.common : route add -net 10.0.0.0 10.10.xxx.1 255.0.0.0 route add -net 87.255.0.160 10.10.xxx.1 255.255.255.224 route add -net 87.255.0.192 10.10.xxx.1 255.255.255.248 route add -net 87.255.0.128 10.10.xxx.1 255.255.255.224 route add -net 233.163.114.0 10.10.xxx.1 255.255.255.0 route add -net 77.246.96.66 10.10.xxx.1 255.255.255.255 где ххх - это Ваш сегмент. [править] NAT и ТВ [править] Linux Если используете свою linux машину в качестве шлюза в своей домашней сети, вам нужно будет сделать еще пару телодвижений, чтобы такая конструкция заработала. Отсюда и далее будем считать, что eth0 - интерфейс himki.net, а eth1 - интерфейс вашей локальной сети. Для реализации нашей задачи нам понадобится скачать и установить программу igmpproxy в конфигурационном файле /etc/igmpproxy.conf пишем phyint eth0 upstream ratelimit 0 threshold 1 altnet 77.246.96.66/32 phyint eth1 downstream ratelimit 0 threshold 1 далее запускаем igmpproxy. Все. Enjoy. PS. конечно, вы должны еще сделать все, что написанно выше касательно Просмотра ТВ под Linux. [править] Iptables Или як позырить фильму з фаерволом да и с инетом... Допуск - тот же: eth0 - интерфейс локальной сети himki.net, eth1 - интерфейс вашей локальной сети, ppp0 - это впн к химкинет-у, lo - ло есть ло, ло-ло-ло-О-л! Разрешено: порты udp с 5242 по 5352 и 1235 (выбор каналов) протоколы gre, multicast, igmp Запрет: на весь broadcast Загрузка правил - iptables-restore (пояснение для дебилов) # Generated by iptables-save v1.3.6 on Mon Jul 16 20:19:02 2007 *mangle :PREROUTING ACCEPT [31271:43483307] :INPUT ACCEPT [31129:43468944] :FORWARD ACCEPT [15:1288] :OUTPUT ACCEPT [21322:1647428] :POSTROUTING ACCEPT [21334:1648532] COMMIT # Completed on Mon Jul 16 20:19:02 2007 # Generated by iptables-save v1.3.6 on Mon Jul 16 20:19:02 2007 *nat :PREROUTING ACCEPT [616:57428] :POSTROUTING ACCEPT [28:1665] :OUTPUT ACCEPT [84:5037] -A POSTROUTING -o ppp0 -j MASQUERADE -A POSTROUTING -o eth0 -j MASQUERADE COMMIT # Completed on Mon Jul 16 20:19:02 2007 # Generated by iptables-save v1.3.6 on Mon Jul 16 20:19:02 2007 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] :forward_ext - [0:0] :forward_int - [0:0] :input_ext - [0:0] :input_int - [0:0] :reject_func - [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -i eth1 -j input_int -A INPUT -i ppp0 -j input_ext -A INPUT -i eth0 -j input_ext -A INPUT -j input_ext -A INPUT -m limit --limit 3/min -j LOG --log-prefix "Firewall-IN-ILL-TARGET " --log-tcp-options --log-ip-options -A INPUT -j DROP -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu -A FORWARD -i eth1 -j forward_int -A FORWARD -i ppp0 -j forward_ext -A FORWARD -i eth0 -j forward_ext -A FORWARD -m limit --limit 3/min -j LOG --log-prefix "Firewall-FWD-ILL-ROUTING " --log-tcp-options --log-ip-options -A FORWARD -j DROP -A OUTPUT -o lo -j ACCEPT -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "Firewall-OUT-ERROR " --log-tcp-options --log-ip-options -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 0 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 11 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 12 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 14 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 18 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3/2 -j ACCEPT -A forward_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 5 -j ACCEPT -A forward_ext -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A forward_ext -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A forward_ext -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A forward_ext -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A forward_ext -m pkttype --pkt-type multicast -j ACCEPT -A forward_ext -p tcp -m limit --limit 3/min -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "Firewall-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options -A forward_ext -p icmp -m limit --limit 3/min -j LOG --log-prefix "Firewall-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options -A forward_ext -p udp -m limit --limit 3/min -j LOG --log-prefix "Firewall-FWDext-DROP-DEFLT " --log-tcp-options --log-ip-options -A forward_ext -m limit --limit 3/min -m state --state INVALID -j LOG --log-prefix "Firewall-FWDext-DROP-DEFLT-INV " --log-tcp-options --log-ip-options -A forward_ext -j DROP -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 0 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 11 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 12 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 14 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 18 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3/2 -j ACCEPT -A forward_int -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 5 -j ACCEPT -A forward_int -o ppp0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A forward_int -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A forward_int -o eth0 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT -A forward_int -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT -A forward_int -m pkttype --pkt-type multicast -j ACCEPT -A forward_int -p tcp -m limit --limit 3/min -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "Firewall-FWDint-DROP-DEFLT " --log-tcp-options --log-ip-options -A forward_int -p icmp -m limit --limit 3/min -j LOG --log-prefix "Firewall-FWDint-DROP-DEFLT " --log-tcp-options --log-ip-options -A forward_int -p udp -m limit --limit 3/min -j LOG --log-prefix "Firewall-FWDint-DROP-DEFLT " --log-tcp-options --log-ip-options -A forward_int -m limit --limit 3/min -m state --state INVALID -j LOG --log-prefix "Firewall-FWDint-DROP-DEFLT-INV " --log-tcp-options --log-ip-options -A forward_int -j reject_func -A input_ext -m pkttype --pkt-type broadcast -j DROP -A input_ext -p icmp -m state --state NEW -j reject_func -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 0 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 11 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 12 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 14 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 18 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 3/2 -j ACCEPT -A input_ext -p icmp -m state --state RELATED,ESTABLISHED -m icmp --icmp-type 5 -j ACCEPT -A input_ext -p gre -j ACCEPT -A input_ext -p igmp -j ACCEPT -A input_ext -p udp -m udp --dport 5242:5352 -j ACCEPT -A input_ext -p udp -m udp --dport 1235 -j ACCEPT -A input_ext -p tcp -m tcp --dport 113 -m state --state NEW -j reject_func -A input_ext -m pkttype --pkt-type multicast -j ACCEPT -A input_ext -p tcp -m limit --limit 3/min -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j LOG --log-prefix "Firewall-INext-DROP-DEFLT " --log-tcp-options --log-ip-options -A input_ext -p icmp -m limit --limit 3/min -j LOG --log-prefix "Firewall-INext-DROP-DEFLT " --log-tcp-options --log-ip-options -A input_ext -p udp -m limit --limit 3/min -j LOG --log-prefix "Firewall-INext-DROP-DEFLT " --log-tcp-options --log-ip-options -A input_ext -m limit --limit 3/min -m state --state INVALID -j LOG --log-prefix "Firewall-INext-DROP-DEFLT-INV " --log-tcp-options --log-ip-options -A input_ext -j DROP -A input_int -j ACCEPT -A reject_func -p tcp -j REJECT --reject-with tcp-reset -A reject_func -p udp -j REJECT --reject-with icmp-port-unreachable -A reject_func -j REJECT --reject-with icmp-proto-unreachable COMMIT # Completed on Mon Jul 16 20:19:02 2007 прежде чем орать, что нифига не работает, сделайте следующее: echo 1 >/proc/sys/net/ipv4/ip_forward С приведёнными выше настройками можно добиться даже вот такого интересного результата: Волшебный скриншотик и роутинг до "источника" - 77.246.96.66 - можно не прописывать, при условии, что Вы НЕ ИСПОЛЬЗУЕТЕ igmpproxy [править] Роутеры (Asus, Dlink, итп) Скоро.. [править] Плееры для просмотра ТВ Плееры, которые умеют смотреть наше ТВ 1. VLC 2. MPlayer 3. Xine несмотря на некую "ущербность" интерфейса MPlayer-а, он позволит (при соответствующих усилиях) получить наиболее качественную "картинку" [править] Если что-то не работает... Если вы все сделали правильно, но ничего не работает - убейте сибя апстену - проверьте следующее: * фаервол o multicast и igmp протоколы должны быть разрешены o порты udp с 5242 по 5352 и порт 1235 должны быть разрешены [править] Предупреждение Данная статья находится в стадии rc1 =) В ближайшем будущем будут добавления и правки

4. примеры роутинга даны сугубо для моего провайдера
А форумокъ всёжъ таки с гнiльцой...©
Спасибо сказали:
xrootx
Сообщения: 92

Re: Помогите с мультикастом (IPTV)

Сообщение xrootx »

а как узнать кто источник у 233.32.240.0/24 (провайдер Corbina)?
Спасибо сказали:
Аватара пользователя
sda
Сообщения: 419
ОС: SuSE

Re: Помогите с мультикастом (IPTV)

Сообщение sda »

sudo tcpdump -i eth0 -p udp
(когда смотреть будешь)
А форумокъ всёжъ таки с гнiльцой...©
Спасибо сказали:
nikitoska
Сообщения: 6
ОС: Gentoo

Re: Помогите с мультикастом (IPTV)

Сообщение nikitoska »

xrootx писал(а):
25.08.2007 20:18
а как узнать кто источник у 233.32.240.0/24 (провайдер Corbina)?

Ставишь igmpproxy, потом правишь конфиг:

Код: Выделить всё

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
altnet 85.21.90.0/24
altnet 85.21.91.0/24
phyint eth1 downstream  ratelimit 0  threshold 1

Если за натом больше одного компа, quickleave закомментируй или удали. Если инфейсов несколько, последнюю строчку из конфига раскомментируй phyint X disabled и вместо X пропиши там интерфейс, который не должен использоваться для iptv.

Далее разрешаешь в iptables соединения с/на 233.32.210.0/24 и 233.32.240.0/24 (правда Корбина в ближайшее время перейдёт на 240 и платные каналы закроет для теста):

Код: Выделить всё

iptables -t filter -A INPUT -d 233.32.210.0/24 -i eth0 -j ACCEPT
iptables -t filter -A INPUT -s 233.32.210.0/24 -i eth0 -j ACCEPT
тоже самое для OUTPUT и FORWARD + добавляешь в TTL 1
iptables -t mangle -A PREROUTING -d 233.32.210.0/24 -p udp -j TTL --ttl-inc 1

Ну и не забудь аналогично для 233.32.240.0/24 сделать. Если при добавлении последнего правила ошибочка или модуль сам не подгружается - modprobe ipt_TTL
Всё. IPTV работает...

ЗЫ - если у тебя больше двух сетевух, прописывай маршрутизацию на соотв. ресурсы.
Спасибо сказали:
xrootx
Сообщения: 92

Re: Помогите с мультикастом (IPTV)

Сообщение xrootx »

Сколько не пытался всё равно не получается. я отключил впн чтобы дефолтным шлюзом был не впн, очистил все правила в iptables вот как он щас выглядит:

Код: Выделить всё

# Generated by iptables-save v1.3.5 on Thu Aug 30 14:41:32 2007
*nat
:PREROUTING ACCEPT [40746831:1401272871]
:POSTROUTING ACCEPT [592690:54574365]
:OUTPUT ACCEPT [36169:4231357]
[50163:2665886] -A POSTROUTING -s 192.168.0.2 -j MASQUERADE
-A POSTROUTING -s 192.168.0.4 -j MASQUERADE
COMMIT
# Completed on Thu Aug 30 14:41:32 2007
# Generated by iptables-save v1.3.5 on Thu Aug 30 14:41:32 2007
*mangle
:PREROUTING ACCEPT [342699451:258256685491]
:INPUT ACCEPT [37250139:37270617818]
:FORWARD ACCEPT [101106709:81285146326]
:OUTPUT ACCEPT [63917848:18887152861]
:POSTROUTING ACCEPT [165086526:100180755640]
[136682:184906784] -A PREROUTING -d 233.32.240.0/255.255.255.0 -p udp -j TTL --ttl-inc 1
COMMIT
# Completed on Thu Aug 30 14:41:32 2007
# Generated by iptables-save v1.3.5 on Thu Aug 30 14:41:32 2007
*filter
:INPUT ACCEPT [2538049:1839776147]
:FORWARD ACCEPT [101106566:81285138752]
:OUTPUT ACCEPT [63917847:18887152777]
[5947:17310264] -A INPUT -i lo -j ACCEPT
[0:0] -A INPUT -i lo -j ACCEPT
[119642:161822984] -A INPUT -d 233.32.240.0/255.255.255.0 -i eth0 -j ACCEPT
[0:0] -A INPUT -s 233.32.240.0/255.255.255.0 -i eth0 -j ACCEPT
COMMIT
# Completed on Thu Aug 30 14:41:32 2007


вот конфиг igmpproxy:

Код: Выделить всё

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
altnet 85.21.90.0/24
altnet 85.21.91.0/24
phyint eth1 downstream  ratelimit 0  threshold 1

запускаю iptables запускаю igmpproxy и включаю на vlc канал ОРТ 233.32.240.115:5050 и не чего не происходит... если подючиться сразу через комп без роутера всё нормально следовательно мультикаст на район приходит и проблема только в роутере... в чём тут косяк?
Спасибо сказали:
aka
Сообщения: 171

Re: Помогите с мультикастом (IPTV)

Сообщение aka »

Также настраиваю в данный момент igmpproxy на FreeBSD 7.2.Вот Конфиг

Код: Выделить всё

##------------------------------------------------------
## Enable Quickleave mode (Sends Leave instantly)
##------------------------------------------------------
quickleave


##------------------------------------------------------
## Configuration for eth0 (Upstream Interface)
##------------------------------------------------------
phyint vr0 upstream ratelimit 0 threshold 1
altnet 239.0.0.0/8


##------------------------------------------------------
## Configuration for eth1 (Downstream Interface)
##------------------------------------------------------
phyint ae0 downstream ratelimit 0 threshold 1
phyint lo disabled

Но не работает.Крутил с маршрутами разные варианты.Все равно не фурычит гад:)
Мой блог -- unixway.info --
Спасибо сказали: