Код: Выделить всё
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 Помогите плз!
Модераторы: SLEDopit, Модераторы разделов
Код: Выделить всё
quickleave
phyint eth0 upstream ratelimit 0 threshold 1
altnet 233.32.240.0/24
phyint eth1 downstream ratelimit 0 threshold 1Код:
ТВ и наша сеть
[править] 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 =)
В ближайшем будущем будут добавления и правки
Код: Выделить всё
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 -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Код: Выделить всё
# 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Код: Выделить всё
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Код: Выделить всё
##------------------------------------------------------
## 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