0 из 0

Создать тему
6

Так уж случилось, что я являюсь жутким нищебродом Sad настолько жутким, что у меня даже нет денег на винду. Даже на пиратскую. А как известно, мир создан исключительно для пользователей Microsoft™ Windows®. Британские ученые, в свою очередь, считают что на самом деле мир не для кого не создан, а существует только проблема несовместимости некоторых личностей с суровой реальностью, но речь не об этом.

Короче, к делу. Имеется типичная "наколеночная" типа-сеть: 1 компьютер подключен к сампо, и настроен делиться интернетом с другим компьютером. Про такое уже 100500 раз писали в интернетах, зачем же писать еще раз? Все очень просто - я не осилил настройку по существующим мануалам. Ну никак.

По этому, я открываю стопицотпервый топик для решения проблемы просмотра IPTV под linux. Ничего сверхъестественного, решение типовое. Отличие от сотен других подобных топиков одно - рассматривается вопрос настройки именно самповского бесплатного пакета IPTV. Хотя я сам использую вражескую openSUSE (а говорят Novell наконец продался Microsoft с концами), думаю, что этот топик может оказаться полезен пользователям Ubuntu, или Altlinux... а может и гентушники заценят, хотя это вряд ли.

Пост будет дополняться и исправляться, принимаются советы и пожелания товарищей знатоков и просто сочувствующих!

Часть 1. Заворачиваем мультикаст в локальную сеть

Что ж, как уже упоминалось ранее, локальная сеть у нас уже есть, а вот мультикаста в ней - ни шыша. Казалось бы, в чем проблема - смотри телек с комьютера, подключенного прямо к SAMPO, но:


  1. Это не интересно
  2. Мама не разрешает

Беглый осмотр, письмо в региональное отделение Microsoft и звонок на горячую линию психологической помощи помогли установить следующие факты:


  • На "роутере" установлена openSUSE 11.3
  • Интерфейс "роутера" eth0 подключен к локальной сети, а eth1 - к самповской
  • Адрес самповской мультикаст-группы - 10.239.32.0/24

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

Следующие, что нам понадобится - программа igmpproxy. Если честно, я так и не понял, как эта штука работает. По-моему она просто динамически прописывает маршруты. Кто знает, расскажите пожалуйста.
Конфиг этой приблуды, находящийся в файле /etc/igmpproxy.conf, должен выглядеть примерно так:

quickleave


phyint eth1 upstream  ratelimit 0  threshold 1
        altnet 10.239.32.0/24


phyint eth0 downstream  ratelimit 0  threshold 1

Не забываем, что в моем случае eth0 - внутренний интерфейс, а eth1 - провайдерский. Так же обратите внимание на параметр quikleave - если в сети будет несколько компов, на которых одновременно смотрят IPTV, то его лучше закомментить.
Для удобства можно написать скрипт, который будет дергать эту программу при каждом старте системы (пример такого скрипта традиционно находится в /etc/init.d/skeleton), но по моим личным наблюдениям эта программа имеет обыкновение зависать в самы неподходящий момент, и ее все равно приходится перезагружать вручную.

Следующий шаг - разрешить мультикаст в iptables. Если ваши iptables пусты, то все уже должно работать Happy
Как водится, в iptables я совсем ничего не понимаю, и по этому просто скопировал следующие правила откуда-то из Интернета (не забываем прошлое замечание про интерфейсы):

modprobe ipt_TTL
iptables -t filter -A INPUT -d 224.0.0.0/240.0.0.0 -i eth1 -j ACCEPT
iptables -t filter -A INPUT -s 224.0.0.0/240.0.0.0 -i eth1 -j ACCEPT
iptables -t filter -A FORWARD -d 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -t filter -A FORWARD -s 224.0.0.0/240.0.0.0 -j ACCEPT
iptables -t mangle -A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1

Очень прошу кого-нибудь прокомментировать эти настройки. Насколько я понимаю, меньшее, что можно сделать - сузить маску сети. Зачем надо менять TTL я тоже не понимаю, но первоисточник утверждал, что без этого не будет работать.

Вот тут-то и вылезают дистроспециффичные проблемы. Дело в том, что в openSUSE есть такая штука, как SuSEfirewall. Это не что иное, как скрипт для настройки iptables. Вещь довольна удобна для тех, кто ничего не понимает в этих самых таблицах (т.е. для меня), и по этому не хотелось бы от нее отказываться. К счастью, разработчики предусмотрели возможность вставить свои собственные правила, да вот незадача: они забыли упомянуть об этом в документации Sad Как типично, не правда ли? На наше счастье, конфигурационные файлы снабжены исчерпывающими комментариями.
Свои правила можно добавить в файл /etc/sysconfig/scripts/SuSEfirewall2-custom. Я не уверен, что этот файл не затрется при следующем обновлении пакета, но все же это лучше, чем вовсе отказаваться от SuSEfirewall.
Просто добавьте вышеприведенные правила в функцию fw_custom_after_chain_creation() уже известного нам файла(естественно, ДО строчки true). Но не все так просто Sad Теперь тупому скрипту еще надо объяснить, что мы хотим использовать эти самые кастомные правила. Они что, не могли сделать настройку через libastral.so?!
Лезем в файл /etc/sysconfig/SuSEfirewall2, и добавляем туда строчку:

FW_CUSTOMRULES="/etc/sysconfig/scripts/SuSEfirewall2-custom"

Хотя на самом деле, она там уже есть, просто закомментирована.

Вроде бы все... Перезапускаем SuSEfirewall, включаем igmpproxy и можем наслаждаться цифровым телевидением, если в вашей сети есть компьютер с Windows.

UPD0: Замечено, что igmpproxy просто адски флудит в syslog. Если вы используете syslog-ng рекомендую добавить для него что-то типа следующих правил:

filter f_igmpproxy  { program('igmpproxy');};
log { source(src); filter(f_igmpproxy); flags(final); };

Часть 2 - настройка ОС для, собственно, просмотра IPTV

А вот тут мне пока сказать нечего, настройку проигрывания IPTV в linux я не осилил.
Проблема - для просмотра необходимо, чтобы медиаплеер имел возможность прослушивать 200 порт udp. А в linux это может делать только суперпользователь.
Как решить эту загвоздку - понятия не имею, возможно придется поменять что-то в первой части этого поста, а возможно, сделать что-то хитроумное на "клиентской" машине. Не знаю, предлагайте решения.
UPD1: Скажем большое спасибо muhamorchik, его способ, похоже, работает.
Все что нам надо на "клиенте" добавить следующие правила в функцию fw_custom_before_masq() файла /etc/sysconfig/scripts/SuSEfirewall2-custom:

iptables -t nat -A PREROUTING -p udp -m udp --dport 200 -j DNAT --to-destination :34200
iptables -t nat -A POSTROUTING -p udp -m udp --dport 34200 -j SNAT --to-source :200

Это перенапавит 200й порт в 34200й. Насколько я понимаю, можно использовать не любой порт, по крайней мере, навесить IPTV на 2000й у меня не получилось

Далее не забываем поправить файл /etc/sysconfig/SuSEfirewall2: указать для опции FW_CUSTOMRULES нужный файлик и добавить 34200й порт в строку FW_SERVICES_EXT_UDP. После этого перезапускаем SuSEfirewall и смотрим что получилось (только не забудьте, что у нас теперь 34200й порт, а не 200й)

Минусы метода:


  • Я пока не понял, как сделать аналогичную вещь прямо на "роутере". Придется править настройки каждой машины, если у вас их много
  • Почему-то срабатывает не всегда. Иногда нужно долго и упорно перезапускать все подряд, прежде, чем увидишь картинку. Иногда - запустить параллельно этот же канал на Windows-машине.
  • Сигнал довольно сильно "бьется". Опять же, не знаю почему. Возможно, не хватает процессора для работы пакетного фильтра
  • Wi-Fi точка D-Link dl-524 обижается и перестает работать, даже если непосредственно через нее IPTV не смотреть.

  • screen220.png

SrID 22:40 - 14.12.2010

Комментарии

Всего 9 комментариев

Войдите или зарегистрируйтесь чтобы оставлять комментарии

0

Первый апдейт. Но проблема просмотра все еще актуальна. И куда только сбежали все linux-Гуру этого форума?

1
0

Пробовал добавлять такое и на клиента и на "роутер", но что-то не срослось.

Может я что-то неправильно понял? На сколько я знаю, имеет значение так же порядок, в котором следуют правила. Когда лучше добавлять конкретно эти?

Комментарий снят с публикации
0

Способ muhamorchik, в принципе, работает, но мне не удалось его подружить с SuSEfirewall. Никак не пойму, в чем проблема.

0

Намутил кое-чего по совету muhamorchik, но так же сигнал пропадает. Помогает только запустить параллельно то же самое под виндой. Плюс, всякие глюки Sad

0

Внимательное изучение логов igmpproxy подсказало, что в этом случае не создаются нужные маршруты. Скорее всего, firewall опять что-то блокирует. Надо разбираться.

Комментарий снят с публикации
0

Тут какая-то странная фигня. Я вроде бы все сделал как надо, и оно некоторое время работает, но потом перестает. И помогает только перезапуск ВСЕГО: и vlc-плеера, и firewall + надо перезапустить igmpproxy на другом компьютере.
Похоже, где-то накапливаются ошибки Sad

Войдите или зарегистрируйтесь чтобы оставлять комментарии

Наверх