Автор Тема: Как пробросить IPTV  (Прочитано 9962 раз)

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Как пробросить IPTV
« : 30.04.2009 11:26:02 »
Провайдер крутит IPTV, как пробросить его в локалку если на сервере (шлюз между локалкой и провайдером) стоит AltLinux Office Server 4.0, eth0-локалка
eth1-провайдер
ppp0-рррое (тв рабоет без него)

ПС В линуксе Новичок

Оффлайн Salomatin

  • Модератор раздела
  • ****
  • Сообщений: 981
    • Пошаговые инструкции
    • Email
Re: Как пробросить IPTV
« Ответ #1 : 30.04.2009 15:18:24 »
Может быть поступить так:
Узнать на какой порты провайдер крутит IPTV и пропросить этот порты вовнутрь. Мой пример для 22 порта, на нем легче протестировать:
 
Если Вы хотите пробросить 22 порт вовнутрь, нужно сделать следующее:
 1) Включить форвардинг net.ipv4.ip_forward = 1 в /etc/net/sysctl.conf
 2) Включить нат снаружи,
 iptables -t nat -A PREROUTING -d 81.89.95.114 -p tcp --destination-port 22 -j DNAT --to-destination 10.0.0.27
 2) Включить нат изнутри
 iptables -t nat -A POSTROUNG -s 10.0.0.27 -j MASQUERADE
 
 при этом порт 22 будет проброшен на 10.0.0.27

Надо проверить при включенном pppoe  и при выключенном. Если при pppoe работать не будет, значит с маршрутом default  надо будет разобраться и просто вручную прописать.


Хочешь понять сам, объясни другому.
"Если уже все испробовал и ничего не помогает - почитай инструкцию"

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #2 : 30.04.2009 15:47:18 »
Как-то все просто.
Может я не так написал.
Потому как народ для проброски мультикаста извращается и прокси ставит(он должен поддерживат какой-то коннект на подписку постоянно)  с TTL играется, но все примеры и обсуждения под FreeBSD, а к альту я не смог применить.

Вот кусок из плейлиста
#EXTM3U
#EXTINF:0,1+1
udp://@234.2.253.2:1234
#EXTINF:0,Новый канал
udp://@234.5.250.5:1234
#EXTINF:0,OK Одесса
udp://@235.40.215.192:1234
#EXTINF:0,Рада
udp://@239.51.204.1:1234
...
195.138.80.52/255.255.255.255 сервер потокового видео - IPTV
Это нужно прописывать все эти адреса и порт 1234 или сервер потокового видео?
так адреса могут менятся и каждый раз их прописывать?
потом для FreeBSD нужно роут делать на виртуальную сеть 224.0.0.0.
плюс в плейлисте идет udp протокол, а Вы предлагаете tcp.

Оффлайн Salomatin

  • Модератор раздела
  • ****
  • Сообщений: 981
    • Пошаговые инструкции
    • Email
Re: Как пробросить IPTV
« Ответ #3 : 30.04.2009 16:59:26 »
Я не работал с видео и может вам поможет кто-нибудь другой. Наверное я не прав.  А пока попробуйте простой вариант, когда ваш сервер тупой маршрутизатор. Сервер можно для теста один. У меня местный "Ослик"провайдера так заработал. Про роут я говорил, когда будет ли работать при pppoe. Если без него заработает, роут прописать будет просто.
Хочешь понять сам, объясни другому.
"Если уже все испробовал и ничего не помогает - почитай инструкцию"

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #4 : 30.04.2009 17:15:51 »
прописал первый канал "1+1" из плейлиста ребутнулся, не работает тв.  :(

Оффлайн yaleks

  • Мастер
  • ***
  • Сообщений: 6 233
Re: Как пробросить IPTV
« Ответ #5 : 30.04.2009 23:56:01 »
igmpproxy настраивать.

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #6 : 01.05.2009 13:00:22 »
А есть ссылка на уже собранный под альтлинукс пакет igmpproxy?
А то я никак не могу найти.

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #7 : 02.05.2009 13:04:12 »
откомпилировал igmpproxy и установил
make
make install

/etc/igmpproxy.conf
##------------------------------------------------------
## Enable Quickleave mode (Sends Leave instantly)
##------------------------------------------------------
quickleave
##------------------------------------------------------
## Configuration for eth1 (Upstream Interface)
##------------------------------------------------------
phyint eth1 upstream  ratelimit 0  threshold 1
        altnet 10.8.25.0/24
##------------------------------------------------------
## Configuration for eth0 (Downstream Interface)
##------------------------------------------------------
phyint eth0 downstream  ratelimit 0  threshold 1
##------------------------------------------------------
## Configuration for ppp0 (Disabled Interface)
##------------------------------------------------------
phyint ppp0 disabled
 

eth1-провайдер с 10.8.25.212
eth0-локалка
ppp0-ppoe

[root@localhost ~]# igmpproxy -d
igmpproxy, Version 0.1 beta2, Build 090502
Copyright 2005 by Johnny Egeland <johnny@rlo.org>
Distributed under the GNU GENERAL PUBLIC LICENSE, Version 2 - check GPL.txt

Debu: Searching for config file at '/etc/igmpproxy.conf'
Debu: Config: Quick leave mode enabled.
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface eth1.
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 10.8.25.0/24.
Debu: Config: IF: Altnet: Parsed altnet to 10.8.25/24.
Debu: IF name : eth1
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 1
Debu: Allowednet ptr : 8051250
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface eth0.
Debu: Config: IF: Got downstream token.
Debu: Config: IF: Got ratelimit token '0'.
Debu: Config: IF: Got threshold token '1'.
Debu: IF name : eth0
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 2
Debu: Allowednet ptr : 0
Debu: Config: Got a phyint token.
Debu: Config: IF: Config for interface ppp0.
Debu: Config: IF: Got disabled token.
Debu: IF name : ppp0
Debu: Next ptr : 0
Debu: Ratelimit : 0
Debu: Threshold : 1
Debu: State : 0
Debu: Allowednet ptr : 0
Debu: Physical Index value of IF 'lo' is 1
Debu: buildIfVc: Interface lo Addr: 127.0.0.1, Flags: 0x0049, Network: 127/8
Debu: Physical Index value of IF 'eth0' is 2
Debu: buildIfVc: Interface eth0 Addr: 192.168.1.15, Flags: 0x1043, Network: 192.168.1/24
Debu: Physical Index value of IF 'eth1' is 3
Debu: buildIfVc: Interface eth1 Addr: 10.8.25.212, Flags: 0x1043, Network: 10.8.25/24
Debu: Physical Index value of IF 'ppp0' is 4
Debu: buildIfVc: Interface ppp0 Addr: 79.140.11.3, Flags: 0x10d1, Network: 79.140.11.3/32
Debu: Found config for eth0
Debu: Found config for eth1
Debu: Found config for ppp0
Note: adding VIF, Ix 0 Fl 0x0 IP 0x0f01a8c0 eth0, Threshold: 1, Ratelimit: 0
Debu:         Network for [eth0] : 192.168.1/24
Note: adding VIF, Ix 1 Fl 0x0 IP 0xd419080a eth1, Threshold: 1, Ratelimit: 0
Debu:         Network for [eth1] : 10.8.25/24
Debu:         Network for [eth1] : 10.8.25/24
Note: adding VIF, Ix 2 Fl 0x0 IP 0x030b8c4f ppp0, Threshold: 1, Ratelimit: 0
Debu:         Network for [ppp0] : 79.140.11.3/32
Debu: Got 262144 byte buffer size in 0 iterations
Debu: Joining all-routers group 224.0.0.2 on vif 192.168.1.15
Note: joinMcGroup: 224.0.0.2 on eth0
Debu: SENT Membership query   from 192.168.1.15    to 224.0.0.1
Debu: Sent membership query from 192.168.1.15 to 224.0.0.1. Delay: 10
Debu: Created timeout 1 (#0) - delay 10 secs
Debu: (Id:1, Time:10)
Debu: Created timeout 2 (#1) - delay 21 secs
Debu: (Id:1, Time:10)
Debu: (Id:2, Time:21)
Note: RECV Membership query   from 192.168.1.15    to 224.0.0.1
Info: ignoring unknown IGMP message type 11 from 192.168.1.15 to 224.0.0.1
Note: RECV Membership query   from 10.253.0.252    to 235.58.197.17
Info: ignoring unknown IGMP message type 11 from 10.253.0.252 to 235.58.197.17
Note: RECV Membership query   from 10.253.0.252    to 235.63.192.22
Info: ignoring unknown IGMP message type 11 from 10.253.0.252 to 235.63.192.22
Note: RECV V2 member report   from 192.168.1.15    to 224.0.0.2
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: No routes in table...
Debu:
-----------------------------------------------------
iptables
iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT
iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT

route
route add -net 224.0.0.0/4 dev eth1Что я сделал не так или как нужно правильо до настроить?
« Последнее редактирование: 07.05.2009 10:39:19 от ASnake »

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #8 : 06.05.2009 21:11:00 »
Для FreeBSD говорят что должно быть скомпилировано ядро с параметрами

options MROUTING
options PIM


У альта как посмотреть скомпилено ядро с этими параметрами или нет?

Alexei_VM

  • Гость
Re: Как пробросить IPTV
« Ответ #9 : 06.05.2009 21:19:33 »
У альта как посмотреть скомпилено ядро с этими параметрами или нет?

С _этими_? В Линуксе совсем другое ядро, и совсем другие параметры.

Опции, с которыми собрано ядро, можно посмотреть в файле /proc/config.gz

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #10 : 06.05.2009 21:54:30 »
Судя повсему есть аналогичные
CONFIG_IP_MROUTE=y
CONFIG_IP_PIMSM_V1=y
CONFIG_IP_PIMSM_V2=y
И я так понимаю "у"-это yes. т.е. "все включено"



Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #11 : 10.05.2009 12:42:37 »
Какой линукс наиболее родственный альту?
Может где-то найду для другого линукса на данную тему.
Но почему-то везде все под freebsd обсуждается  >:(.
И еще вопрос в каую из рассылок будет правильнее задать вопрос по этой теме?
« Последнее редактирование: 10.05.2009 12:49:28 от ASnake »

Alexei_VM

  • Гость
Re: Как пробросить IPTV
« Ответ #12 : 10.05.2009 17:25:13 »
Какой линукс наиболее родственный альту?

Никакой.

И еще вопрос в каую из рассылок будет правильнее задать вопрос по этой теме?
sysadmins@

Оффлайн ASnake

  • Давно тут
  • **
  • Сообщений: 25
Re: Как пробросить IPTV
« Ответ #13 : 13.05.2009 11:23:27 »
Задал вопрос в рассылку ответ был примерно такой "Google  в помощь" :'( (+ ключевые слова). Можно подумать я там не рылся, а сразу к ним.
Вот что удалось еще найти тут http://www.allunix.ru/forum/index.php?showtopic=737&view=findpost&p=1937
Цитировать
"Это скрипт ручной маршрутизации мультикаста. К каждой мультикаст-группе нужно присоединяться вручную. Автоматическая реализация будет сложнее."
Но по ходу это не скрипт.
#include <stdio.h>
#include <unistd.h>
#include <strings.h>
#include <arpa/inet.h>
#include <netinet/igmp.h>
#include <linux/ mroute .h>

int main()
{
        int igmp_socket;
        int value;
        struct vifctl vc;
        struct ip_mreq mreq;
        struct mfcctl mc;
        in_addr_t local_addr = inet_addr("<адрес локального интерфейса, например 192.168.0.1>");
        in_addr_t remote_addr = inet_addr("<адрес внешнего интерфейса, например 87.240.12.34>");
        in_addr_t multicast = inet_addr("<мультикаст-группа, например 239.255.2.14>");
        in_addr_t origin_addr = inet_addr("<адрес источника тв-вещания, например 213.85.187.36>");

// Создаём igmp-сокет
        igmp_socket = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
// Инициализируем мультикаст-роутинг
        value = 1;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_INIT, &value, sizeof(value));
// Создаем виртуальные мультикаст интерфейсы (vif)
        vc.vifc_vifi = 0;
        vc.vifc_flags = 0;
        vc.vifc_threshold = 1;
        vc.vifc_rate_limit = 0;
        vc.vifc_lcl_addr.s_addr = remote_addr;
        vc.vifc_rmt_addr.s_addr = 0;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_ADD_VIF, &vc, sizeof(vc));
        vc.vifc_vifi = 1;
        vc.vifc_lcl_addr.s_addr = local_addr;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_ADD_VIF, &vc, sizeof(vc));
// Подключаемся к igmp-группе на внешнем интерфейсе
        mreq.imr_multiaddr.s_addr = multicast;
        mreq.imr_interface.s_addr = remote_addr;
        setsockopt(igmp_socket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq));
// Добавляем запись в таблицу мультикаст-маршрутизации
        mc.mfcc_origin.s_addr = origin_addr;
        mc.mfcc_mcastgrp.s_addr = multicast;
        mc.mfcc_parent = 0;
        bzero(mc.mfcc_ttls, sizeof(mc.mfcc_ttls));
        mc.mfcc_ttls[1] = 1;
        setsockopt(igmp_socket, IPPROTO_IP, MRT_ADD_MFC, &mc, sizeof(mc));
// Смотрим телек
        printf("Press ENTER to exit\n");
        getchar();
// Вырубаем
        mreq.imr_multiaddr.s_addr = multicast;
        mreq.imr_interface.s_addr = remote_addr;
        setsockopt(igmp_socket, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq));
        setsockopt(igmp_socket, IPPROTO_IP, MRT_DONE, NULL, 0);
        close(igmp_socket);

        return 0;
}

Можно ли это применить к альту? Если да, то что нужно исправить или докачать, дописать...?
Или может кого-то это подтолкнет к правильному решению?
Т.к. "ручной" это не дело, но хоть что-то для начала.

Drool

  • Гость
Re: Как пробросить IPTV
« Ответ #14 : 13.05.2009 11:36:33 »
Но по ходу это не скрипт.

Это исходники, комилить нужно.