Здесь есть пара тем про 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_Routing2.
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
после перезагрузки компьютера или правки из альтератора приходится заново добавлять их.