Автор Тема: И ещё раз про IPTV через шлюз на ALS 5.0.1  (Прочитано 2201 раз)

Оффлайн krack_85

  • Участник
  • *
  • Сообщений: 61
Здесь есть пара тем про IPTV, но ни в одной нет решения. У меня получилось пробросить поток через Alt Linux server 5.0.1. Хочу поделиться и попросить помощи в доработке.

Имеется: Сервер с 2 сетевыми картами eth0 - смотрит в интернет, eth1 - смотрит в локалку 192.168.0.0/24
Требуется: На компьютерах в локальной сети 192.168.0.0/24 смотреть IPTV от провайдера.

Я руководствовался 2 статьями.
1. http://www.altlinux.org/Static_Multicast_Routing
2. http://rukul.ru/system-setting/linux-debian-%D0%BF%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81-multicast-iptv-%D0%BF%D1%80%D0%BE%D0%B1%D1%80%D0%BE%D1%81%D0%B8%D1%82%D1%8C-%D1%87%D0%B5%D1%80%D0%B5%D0%B7-nat-%D0%B2-%D0%BB%D0%BE%D0%BA%D0%B0

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

Подготовка шлюза

Для начала необходимо установить дистрибутив ALT Linux и пакет демон multicast-маршрутизации igmpproxy и программу настройки статических маршрутов smcroute из соответствующего репозитория:

apt-get update
apt-get install igmpproxy smcroute

smcroute это я не ставил
Также необходимы пакеты iptables net-tools iproute2, в дистрибутивах ALT Linux они присутствуют по умолчанию.

Для мониторинга можно установить пакеты tcpdump, wireshark и iperf это тоже не устанавливал

Все манипуляции осуществляются под правами пользователя root.

Конфигурация

Файл /etc/igmpproxy.conf:

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
phyint eth1 downstream  ratelimit 0  threshold 1
phyint lo disabled

Если есть другие интерфейсы, не участвующие в процессе, их тоже дописываем вниз например

phyint eth2 disabled

Для дистрибутивов на базе Пятой платформы файл /etc/igmpproxy.conf вместо eth0 и eth1 исполь-зуйте breth0 и breth1 соответственно.

Настройка маршрутизации

1. Шлюз должен быть настроен для маршрутизации сетевых пакетов:

    Находится в режиме "Шлюз" в модуле "Брандмауэр" в дистрибутивах на базе Пятой платформы;
    или настраиваем вручную: в файле /etc/net/sysctl.conf параметр net.ipv4.ip_forward должен быть установлен в "1":

net.ipv4.ip_forward = 1
Также в файл /etc/net/sysctl.conf добавляем параметры: отключаем reverse path filtering для eth0 и для ядер 2.6.x указываем версию IGMP (igmpproxy поддерживает только IGMPv1 и IGMPv2 на внутреннем интерфейсе):

net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.force_igmp_version=1
net.ipv4.conf.eth1.force_igmp_version=1

Примечание: после внесения изменений в этот файл необходимо перезагрузить компьютер.

2. Проверяем готовность к маршрутизации:

[root@ham1 ~]# less /proc/config.gz | grep '\(MROUTE\|MULTICAST\)'
CONFIG_IP_MULTICAST=y
CONFIG_IP_MROUTE=y
[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/default/forwarding
1
[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/eth0/rp_filter
0
[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/eth0/force_igmp_version
1
[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/eth1/force_igmp_version
1

3. Настраиваем цепочки iptables для работы со специальными multicast-подсетями:

iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT
iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT

4. Прописываем маршрут:

route add -net 224.0.0.0/4 dev eth1
5. Запускаем демона:

igmpproxy /etc/igmpproxy.conf
Такой командой он не запустился, запускаем так

/usr/sbin/igmpproxy /etc/igmpproxy.conf -v -d
параметры -v -d нужны для большей информации и для режима отладки. Позже будет понятно.

Журнал работы igmpproxy ведётся в /vat/log/messages. Для отладки можно запустить командой igmpproxy -d /etc/igmpproxy.conf

Проверка работы

После запуска igmpproxy должны появится соответствующие флаги:

[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/breth0/mc_forwarding
1
[root@ham1 ~]# cat /proc/sys/net/ipv4/conf/breth1/mc_forwarding
1

После проделанной выше работы у меня ничего не заработало, тут пригодилась вторая инструкция, а точнее только небольшая часть.

Запущен у нас на виндовой машине клиент и запущен igmpproxy и нет никакого ТВ … Кликаем канал и внимательно смотрим лог igmpproxy

    RECV Membership query from 192.168.0.1 to 239.192.0.12
    RECV V2 member report from 192.168.0.2 to 239.192.0.12
    Inserted route table entry for 239.192.0.12 on VIF #0
    joinMcGroup: 239.192.0.12 on eth0
    RECV V2 member report from 10.72.55.177 to 239.192.0.12
    The IGMP message was from myself. Ignoring.
    Route activation request from 10.72.55.177 for 239.192.0.12 is from myself. Ignoring.
    The source address 172.16.110.210 for group 239.192.0.12, is not in any valid net for upstream VIF.
    RECV V2 member report from 192.168.0.2 to 239.192.0.12
    Updated route entry for 239.192.0.12 on VIF #0
    RECV V2 member report from 192.168.0.1 to 224.0.0.251
    The IGMP message was from myself. Ignoring.
    RECV V2 member report from 10.72.55.177 to 239.192.0.12
    The IGMP message was from myself. Ignoring.

В логе видим
The source address 172.16.110.210 for group 239.192.0.12, is not in any valid net for upstream VIF.

Добавляем чудесный адрес в igmppoxy.conf в раздел к сетям, с которых ловим multicast

quickleave
phyint eth0 upstream  ratelimit 0  threshold 1
altnet 172.16.110.210
phyint eth1 downstream  ratelimit 0  threshold 1
phyint lo disabled

После чего запускаем igmpproxy и вновь проверяем работу IPTV клиента, должно всё заработать.
Все адреса указаны для примера. Подставлять нужно свои.

Подскажите, как сохранить цепочки и маршрут
iptables -I INPUT -d 224.0.0.0/4 -j ACCEPT
iptables -I FORWARD -d 224.0.0.0/4 -j ACCEPT
route add -net 224.0.0.0/4 dev eth1
после перезагрузки компьютера или правки из альтератора приходится заново добавлять их.
« Последнее редактирование: 22.09.2012 18:03:06 от krack_85 »